TCP连接的建立与终止

来源:互联网 发布:网络出版服务许可 编辑:程序博客网 时间:2024/05/20 20:48

一、三次握手

这里写图片描述

上图可见TCP三次握手过程。
其中需要注意的是步骤一、SYN = 1且ACK = 0。SYN为1时,源于协议的设计SYN和FIN各占一个字节的序号。
且步骤一和步骤二进行同步请求时,SYN为1,之后SYN为0。

为什么需要步骤三,客户A再发送一次ACK?

因为网络原因,可能客户A向服务器B发送了一个SYN同步请求连接在网络中滞留了一会。然而客户A在超时重传的事件内,没有收到自己发出了请求后必会得到一个ACK为1的确认,等到超时重传定时器时间到了后还没有收到ACK确认。因此客户A需要再次发送一个SYN同步请求,这时候服务器B直接收到了,给A一个ACK确认,A也给服务器B一个ACK确认,至此三次握手完成了,可以进行数据通信了。但是这时候第一次发出的SYN同步到了服务器B,服务器B对迟到的SYN请求也给出了一个ACK确认,客户A这时候已经不认为这个对迟到的SYN请求是自己发送的,所以不会处理这个ACK(即向服务器B发送ACK)。如何没有最后一次确认,客户A收到延迟的SYN的ACK确认就会建立连接,但是实际上并没数据传输,这样占用了服务器B的资源。

二、四次挥手

这里写图片描述

为什么四次挥手需要在TIME-WAIT状态等待2MSL?

因为如果没有等待这2MSL,服务器B发送给A的FIN报文一旦丢失,A就无法发送一个ACK使B完全关闭。若A的ACK包丢失,在这个时间里还可以再次重传给B,使B可以完全关闭。

TCP半部连接

从上图可以看到A发送FIN后,其已经不可以再向服务器发送数据了。但是服务器B没有直接发送FIN报文,因此这时服务器B还可以继续向客户A发送数据,客户A这时候只能接收服务器发去的数据。只有当服务器向客户端A发送了FIN报文,这个时候服务器才终止向客户A发送数据。

原创粉丝点击