美文网首页
TCP中的三次握手和四次挥手

TCP中的三次握手和四次挥手

作者: 飞跑的蛤蟆 | 来源:发表于2020-04-07 09:24 被阅读0次

TCP的标志位:
SYN 建立连接
ACK 确认
FIN 结束
PSH 传输
RST 重置
URG 紧急

image.png

问题一:为什么要三次握手,而不是两次?

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误;减少服务器的开销,如果建立TCP连接失败则服务器可以关闭连接端口不用一直等待。

为了保证服务端能接收到客户端的信息并能做出正确的应答(第一次和第二次握手);为了保证客户端能接收到服务端的信息并能做出正确的应答(第二次和第三次握手)

问题二:三次握手的重要功能

  1. 确认双方做好发送数据的准备工作(双方都知道彼此已准备好)

  2. 允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

image.png

问题一:为什么需要四次挥手而不是三次挥手?

最简单的解释就是服务端在接收客户端的终止请求时,是不能立刻关闭的因为可能存在未传输完的数据,只有在传输完数据后才能发送终止请求,而客户端确认无误后再向服务器发送关闭的信号,至此关闭连接。

问题二:为什么客户端还需要等待一个2MSL时间?

首先MSL(Maximum Segment Lifetime)是最大报文生存时间,指的是一个片段在网络中最大的存活时间,2MSL时间就是一个发送和一个回复所需要的最大时间。

我们假定网络是不可靠的,有可能最后一个ACK会丢失。而TIME_WAIT状态就是用来重发可能丢失的ACK报文的。如果服务端没有收到ACK,则会不断重复的发送FIN报文,所以客户端不能立刻关闭。如果2MSL时间后,客户端都没收到FIN,那么就会推断ACK已经被服务端成功接收,则结束TCP连接。

问题三:如果已经建立了连接,但是客户端突然故障了怎么办?

TCP还设有一个保活计时器,服务器每接收到一次客户端的请求后都会重新复位这个计时器,而计时器的时间通常被设置为2小时,若两小时还没有收到客户端的任何数据,服务端就会发送一个探测报文,以后每隔75秒发送一次,若连续10个探测报文没有响应,服务端就会认为客户端出现了问题,从而关闭连接。

相关文章

网友评论

      本文标题:TCP中的三次握手和四次挥手

      本文链接:https://www.haomeiwen.com/subject/zkzpphtx.html