TCP三次握手,为什么是三次握手

TCP三次握手,为什么是三次握手


TCP连接的建立

这里写图片描述
1. 第一次握手:主机A发送SYN=1,并产生随机序列号seq=x,主机A由CLOSE状态转为SYN_SENT状态
2. 第二次握手:主机B收到了主机A的SYN=1知道A要求建立连接,向A发送ack=(主机A的seq+1),syn=1,ACK=1,随机产生seq=y的包 主机B由LISTEN变为SYN_REVD状态
3. 第三次握手:主机A收到B的信息后检查 ack 和ACK是否正确,若正确,回复 ACK=1 seq=x+1 ack=y+1 主机AB进入ESTAB_LISNED状态

为什么要三次握手

为什么A还要发送一次确认呢?这主要是为了防止已失效的连接请求报文段突然又传送回了B,因而产生错误。造成不必要的浪费B的资源

所谓已失效的连接请求报文段是这样产生的。
假设我们使用二次握手建立连接:

正产情况:A发送连接请求,但是A发送的连接请求因为某种原因丢失了。于是A再重新发送。后来收到了B的确认,建立了连接、传输数据、释放连接

异常情况:A发送的连接请求并没有丢失,而是在某些网络节点长时间滞留了,A连接释放的以后某个时间才到达B。B就认为A又重新发送了一次连接请求于是B发送回复确认。新的连接就建立了。显然这次连接的建立是无意义的。由于A其实并没有发送新的连接请求,因此不会理睬B的确认,也不会向B发送数据。但B却认为新的运输连接建立了,一直等待A发数据。这样B的许多资源就这样浪费了

而采用三次握手就不会发生上面的情况
只要A不发送连接见了的回复 B就不会建立连接

TCP的连接释放工程(四次握手)

这里写图片描述

为什么A在TIME-WAIT状态必须等待2MSL的时间

第一,为了保证A发送的最后一个ACK报文段能够到达B。

第二,防止上一节提到的“已失效的连接请求报文段”出现在本连接中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值