TCP三次握手、四次挥手及状况转换详解

小微 科技TCP三次握手、四次挥手及状况转换详解已关闭评论125字数 1743阅读模式
摘要TCP特性概述1. 提供一种面向连接的、可靠的字节流服务2.在一个 TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于 TCP3.使用校验和,确认和重传机制来保证可靠传输4....

TCP特性概述

1. 提供一种面向连接的、可靠的字节流服务

2.在一个 TCP 连接中,仅有两方进行彼此通讯。播送以及多播不能用于 TCP文章源自微观生活(93wg.com)微观生活-https://93wg.com/6622.html

3.使用校验以及,确认以及重传机制来保证可靠传输文章源自微观生活(93wg.com)微观生活-https://93wg.com/6622.html

4.给数据分节进行排序,并使用积累确认保证数据的顺序不变以及非重复文章源自微观生活(93wg.com)微观生活-https://93wg.com/6622.html

5.使用滑动窗口机制来实现流量节制,通过动态扭转窗口的大小进行拥塞节制文章源自微观生活(93wg.com)微观生活-https://93wg.com/6622.html

TCP状况转换图

状况说明:文章源自微观生活(93wg.com)微观生活-https://93wg.com/6622.html

1. CLOSED: 文章源自微观生活(93wg.com)微观生活-https://93wg.com/6622.html

这个表示初始状况。文章源自微观生活(93wg.com)微观生活-https://93wg.com/6622.html

2.LISTEN(服务器):文章源自微观生活(93wg.com)微观生活-https://93wg.com/6622.html

这个也是无比容易理解的一个状况,表示服务器端的某个SOCKET处于监听状况,可以接受连接了。文章源自微观生活(93wg.com)微观生活-https://93wg.com/6622.html

3.SYN_RCVD(服务器):文章源自微观生活(93wg.com)微观生活-https://93wg.com/6622.html

这个状况表示接受到了SYN报文,在正常情况下,这个状况是服务器端的SOCKET在树立TCP连接时的三次握手会话进程中的一个中间状况,很短暂,基本上用netstat你是很难看到这类状况的,除了非你特地写了一个客户端测试程序,故意将三次TCP握手进程中最后一个ACK报文不予发送。因而这类状况时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状况。

4.SYN_SENT:

这个状况与SYN_RCVD呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因而也随即它会进入到了SYN_SENT状况,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状况表示客户端已发送SYN报文。

5.ESTABLISHED:

表示连接已经树立了。

6.FIN_WAIT_1:

这个状况要好好解释一下,其实FIN_WAIT_1以及FIN_WAIT_2状况的真正含意都是表示等待对方的FIN报文。而这两种状况的区分是:FIN_WAIT_1状况其实是当SOCKET在ESTABLISHED状况时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状况。而当对方回应ACK报文后,则进入到FIN_WAIT_2状况,固然在实际的正常情况下,不管对方何种情况下,都应当马上回应ACK报文,所以FIN_WAIT_1状况通常为比较难见到的,而FIN_WAIT_2状况还有经常常可以用netstat看到。

7.FIN_WAIT_2:

上面已经详细解释了这类状况,实际上FIN_WAIT_2状况下的SOCKET,表示半连接,也即有一方请求close连接,但此外还告知对方,我暂时还有点数据需要传送给你,稍后再关闭连接。

8.TIME_WAIT:

表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后便可回到CLOSED可用状况了。如果FIN_WAIT_1状况下,收到了对方同时带FIN标志以及ACK标志的报文时,可以直接进入到TIME_WAIT状况,而不必经由FIN_WAIT_2状况。

9.CLOSING:

这类状况比较特殊,实际情况中应当是很少见,属于一种比较罕见的例外状况。正常情况下,当你发送FIN报文后,按理来讲是应当先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。然而CLOSING状况表示你发送FIN报文后,并无收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会呈现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几近在同时close一个SOCKET的话,那么就呈现了双方同时发送FIN报文的情况,也即会呈现CLOSING状况,表示双方都正在关闭SOCKET连接。

10.CLOSE_WAIT:

这类状况的含意实际上是表示在等待关闭。如何理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑难地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状况。接下来呢,实际上你真正需要斟酌的事情是观察你是不是还有数据发送给对方,如果没有的话,那么你也就能够close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状况下,需要完成的事情是等待你去关闭连接。

11.LAST_ACK:

这个状况还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也便可以进入到CLOSED可用状况了。

三次握手树立连接

第一次握手:

客户端发送syn包(syn=x)的数据包到服务器,并进入SYN_S

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/6622.html