tcp连接的建立与断开

TCP连接的建立与断开

1.连接的建立—–3次握手

​ 1.发起连接的客户端会向服务器发送一个SYN报文段(在SYN段置位的tcp报文),并指定端口号和客户端序列号(INC)。

​ 2.服务器收到SYN报文段后,会向客户端回发一个SYN报文段,并指定服务器序列号(INS),ACK为INC+1

​ 3.客户端收到后,返回ACK = INS+1的报文段确认,至此三次握手完成

​ ![屏幕截图 2023-11-04 162752](D:\myboke\source\images\屏幕截图 2023-11-04 162752.png)

​ 三次握手的目的不仅在于让通信双方了解一个连接正在建立,还在于利用数据包的选项来承载特殊的信息,交换初始序列号

2.连接的断开—–4次挥手

​ 1.连接的主动关闭者发送一个FIN报文段来发起关闭,指明接收者希望看到的自已当前的序列号K,同时携带ACK来确认最近一次收到的数据。

​ 2.连接的被动关闭者收到FIN报文段后将K+1作为ACK值来确认收到FIN段。此时,上层的应用程序会被告知连接的另一端已经提出了关闭的请求。通常,这将导致应用程序发起自已的关闭操作。

​ 3.连接的被动关闭者变为主动关闭者,发送一个FIN报文,以L为序列号

​ 4..为了完成连接的关闭,关闭发起者最后发送一个报文段,包含一个ACK用于确认上一个FIN,如果出现FIN丢失的情况,那么发送方将重新传输,直到接收到一个ACK确认为止。

连接的半关闭

​ 首先发送的两个报文与正常关闭一致,接受到半关闭的一方扔能发送数据,直到数据发送完毕。它将会发送一个FIN来关闭本方的连接,同时向发起半关闭的应用程序发出一个文件尾指示。

tcpsicihuishou

3.TCP状态转移

TCPztzy

​ TIME_WAIT状态:TIME_WAIT状态也称为2MSL等待状态。在该状态中, TCP将会等待两倍于最大段生存期。

TIME_WAIT状态存在的意义

​ MSL:最大段生存期,它代表任何报文段在被丢弃前在网络中被允许存在的最长时间。

​ 1.确保连接被可靠的关闭:让TCP重新发送最终的ACK以避免出现丢失的情况。重新发送最终的ACK并不是因为TCP重传了ACK. (它们并不消耗序列号也不会被TCP重传),而是因为通信另一方重传了它的FIN (它消耗一个序列号)。事实上, TCP总是重传FIN, 直到它收到一个最终的ACK 。

​ 2.TIME_WAIT状态能够防止新的连接将前一个连接的延迟报文段解释成自身数据的状况。因为一个TCP报文的能存在的最长时 间是1个MSL,所以等待一个MSL就可以保证网络中不会再有本次连接的报文了