美文网首页
TCP三次握手,四次挥手

TCP三次握手,四次挥手

作者: 小名源治 | 来源:发表于2023-02-16 18:19 被阅读0次

三次握手的过程

1.第一次握手:客户端给服务器端发送一个SYN报文,并指明客户端的初始化序列号 ISN;
2.第二次握手:服务端收到客户端的SYN报文后,给客户端会一个自己的初始化序列号ISN,并将客户端的初始化序列号+1返回(这样做的目的是为了告诉客户端,我已经收到了你的序列号)
3.第三次握手:客户端收到服务端的SYN报文后,将客户端的初始化序列号(ISN)+1返回给服务端。

三次握手的作用

1、确认双方的接受能力、发送能力是否正常。
2、指定自己的初始化序列号,为后面的可靠传送做准备。

(ISN)是固定的吗

三次握手的一个重要功能是客户端和服务端交换ISN(Initial Sequence Number), 以便让对方知道接下来接收数据的时候如何按序列号组装数据。
如果ISN是固定的,攻击者很容易猜出后续的确认号,因此 ISN 是动态生成的。

三次握手过程中可以携带数据吗

其实第三次握手的时候,是可以携带数据的。也就是说,第一次、第二次握手不可以携带数据,而第三次握手是可以携带数据的。
假如第一次握手可以携带数据的话,如果有人要恶意攻击服务器,那他每次都在第一次握手中的SYN报文中放入大量的数据,因为攻击者根本就不理服务器的接收、发送能力是否正常,然后疯狂着重复发SYN报文的话,这会让服务器花费很多时间、内存空间来接收这些报文。也就是说,第—次握手可以放数据的话,其中一个简单的原因就是会让服务器更加容易受到攻击了。

四次挥手

假如是客户端先发起关闭请求
1.第一次挥手:客户端给服务器端发送一个FIN报文,其中会指定一个序列号。(这时客户端处于FIN_WAIT1的状态)
2.第二次挥手:服务端收到客户端的FIN报文后,会给它发送一个ACK报文,将客户端的序列号+1作为ACK报文的序列号。
3.第三次挥手:服务端也想断开连接了,给客户端发送一个FIN报文,也会指定一个序列号。
4.第四次捂手:客户端收到服务端的FIN报文后,也会发一个ACK报文回去,并且ACK的报文也是服务端的报文序列号+1;然后进入TIME_WAIT状态,需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态。
5.服务端收到客户端的ACK报文后,就关闭连接了。

主要的就是TIME_WAIT这个状态
为什么客户端发送ACK之后不直接关闭,而是要等一阵子才关闭。这其中的原因就是,要确保服务器是否已经收到了我们的ACK报文,如果没有收到的话,服务器会重新发FIN 报文给客户端,客户端再次收到FIN 报文之后,就知道之前的ACK报文丢失了,然后再次发送ACK报文。
至于TIME_WAIT持续的时间至少是一个报文的来回时间。一般会设置一个计时,如果过了这个计时没有再次收到FIN报文,则代表对方成功就是ACK报文,此时处于CLOSED已关闭的状态。

相关文章

网友评论

      本文标题:TCP三次握手,四次挥手

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