最通俗地解释TCP/IP的三次握手和四次挥手

 

当我们输入url访问互联网时,需要由客户端连接到远程的服务器端。这时候,我们本可以发一个消息,然后接收一个消息,

但是,为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误;或者“网络中存在延迟的重复分组”等主要问题。

为了解决这些问题,规范连接。后来有了TCP/IP协议。

虽然TCP/IP并不是一个完美的协议,但是它却能在那么多的网络协议中脱颖而出,至少表明它是出色的,至少在目前还没有任何协议可以取代它。

 

三次握手

下面的发送方就是客户端,接收方就是服务器端。

 

为什么不能用两次握手进行连接?

这主要是为了防止已失效的请求连接报文忽然又传送到了,从而产生错误。
假定A向B发送一个连接请求,由于一些原因,导致A发出的连接请求在一个网络节点逗留了比较多的时间。此时A会将此连接请求作为无效处理 又重新向B发起了一次新的连接请求,B正常收到此连接请求后建立了连接,数据传输完成后释放了连接。如果此时A发出的第一次请求又到达了B,B会以为A又发起了一次连接请求,如果是两次握手:此时连接就建立了,B会一直等待A发送数据,从而白白浪费B的资源。 如果是三次握手:由于A没有发起连接请求,也就不会理会B的连接响应,B没有收到A的确认连接,就会关闭掉本次连接

 

已连接

好了,然后两边就可以想发什么就发什么了。

 

 

 

如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

 

四次挥手

 

 

为什么是四次挥手?

因为TCP是一个全双工协议,必须单独拆除每一条信道。4次挥手的目的是终止数据传输,并回收资源,此时两个端点两个方向的序列号已经没有了任何关系,必须等待两方向都没有数据传输时才能拆除虚链路,不像初始化时那么简单,发现SYN标志就初始化一个序列号并确认SYN的序列号。因此必须单独分别在一个方向上终止该方向的数据传输。

如果是三次挥手,会怎么样?三次的话,被动关闭端在收到FIN消息之后,需要同时回复ACK和Server端的FIN消息。如果Server端在该连接上面并没有Pending的消息要处理,那么是可以的,如果Server端还需要等待一段时间才可以关闭另外一个方向的连接,那么这样的三次挥手就不能满足条件。

 

参考:

通俗大白话来理解TCP协议的三次握手和四次分手
TCP的三次握手与四次挥手理解及面试题(很全面)

posted @ 2020-03-15 17:47  铅笔木有由  阅读(491)  评论(0编辑  收藏  举报