TCP/IP协议的三次握手/四次挥手

三次握手确保了在客户端和服务器间安全建立TCP连接,防止失效请求导致资源浪费。四次挥手则保证双方都能确认数据传输完毕,可靠地断开连接。两次握手无法保证连接的可靠性,而缺少任何一次挥手可能导致连接无法正常关闭。
摘要由CSDN通过智能技术生成
三次握手

采用三次握手是为了防止失效的连接请求报文段突然又回传给server,进而产生错误。

失效的连接请求报文段:client端发送的第一个连接请求报文段并没有丢失,而是在某个网络节点滞留了,以至于延误到连接释放以后的某个时间才到达server。

出现的情况:server误以为这是一个新的请求,向client发出确认报文段,同意建立连接。假设不采用三次握手,那么只要server发出确认,新的连接就建立了。这时由于client并没有真正的请求,所以不会向server发送数据,但server却一直等待,这样就会浪费server的很多资源。如果有了三次握手,client不会向server发出确认,那么server收不到确认,就不会建立连接。

具体过程:如果使用三次握手,那么主机B收到主机A发送的陈旧的SYN报文段后,就向A发送SYN报文段,选择自己的序号seq=y,并确认收到A的SYN报文段,确定号为ack=x+1;当A收到B的报文段后,从确认号就知道不应该理睬这个SYN报文段(因为A现在并没有发送seq=x的报文段),这时A发送复位报文段,在这个报文段中,rst = 1,ACK =1,其确认号为ack = y+1;我们注意到,虽然A拒绝了B的TCP连接请求(发送复位报文段),但对B发送的syn报文段还是确认收到了,B收到A的rst后,就知道不能建立连接了。

不需要四次握手的原因是三次已经安全建立连接,四次纯属浪费资源。

四次挥手

采用四次挥手是为了让客户端把数据传输完成。

我们都知道,TCP连接是全双工通信的,而断开时双方都需要确定两个问题:自己是否还有数据要发送,对端是否还有数据要发送,而四次挥手正好在双方同步了这两个问题。

  • 第一次挥手:client告诉server自己的数据已全部发送,client可以回收发送缓冲区,server可以回收接收缓冲区
  • 第二次挥手:server告诉client自己收到了关闭信息
  • 第三次挥手:server告诉client自己的数据已全部发送,server可以回收发送缓冲区,client可以回收接收缓冲区
  • 第四次挥手:client告诉server自己收到了关闭信息

可以发现,四次挥手同样一次都不能少,如果少了其中任何一次,总有一方不能可靠的通知对方自己的数据已发送完毕,因此,连接不可能可靠的断开,TCP也就成了不可靠的协议。

2ms的缓冲时间是为了server端把数据传输完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值