TCP三次握手的几个相关问题

1. 两次握手行不行?

答案是不行。TCP如果进行两次握手,则不符合全双工的要求,也就是无法确认双方的接收能力与发送能力是否正常。可以看以下图解:

基于这种两次握手不能实现全双工的原因,会出现一些问题,比如:

客户端发送了一个数据包,因为网络堵塞等原因并没有到达服务端,于是发送了第二个数据包。而这时候,网络堵塞突然好了,也就是服务端收到了两个数据包,这时候服务端就以为客户端要建立两次连接,而客户端却认为自己只是建立了一个连接。这样会造成客户端与服务端状态不一致以及资源浪费的情况。

2.四次握手呢?

简单来说,三次握手已经保证了全双工的要求,已经建立了可靠的连接。四次握手没有必要,除了浪费性能,也无法获得更高的保证性(五次,六次,七次八次也是一样的)。

3. 第三次握手能不能携带数据(指除了数据包参数以外的数据)?

答案是能。因为第二次握手的时候客户端已经确认了双方的发送与接收能力,进入了ESTABLISHED状态。甚至第二次握手后,可以直接发送一个GET请求给服务端当作第三次握手。(因为GET请求的ACK = 1)不过一般并不推荐这种做法。

4. 三次握手中出现丢包会发生什么?

总的来说,会周期性地重发包,直到得到回应或者超过最大次数。

1.第一次握手丢包:

        即服务端没有收到客户端的SYN请求,不知道客户端要建立连接。这时候客户端会等待一段时间后重发数据包,这种重发是周期性的,也就是只要没有回应会一直发送(当然也有最大次数限制)。

2.第二次握手丢包

        即客户端没有收到服务端的SYN+ACK响应,不确定服务端是否收到了自己的请求。这时候客户端还是会周期性地重发数据包给服务端,直到达到最大次数。

3.第三次握手丢包

        即服务端没有收到客户端的ACK确认,不知道自己发送的包是否到了客户端。这时候服务端会重发数据包给客户端,也是周期性的,存在最大次数限制。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值