TCP连接的建立与终止

一、三次握手

这里写图片描述

上图可见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发送数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值