作者:爱塔居
专栏:计算机网络
作者简介:大三学生,希望和大家一起进步
经过三次的对话,这两个火柴人才确认了双方都能够说话,都能听见。三次握手也是一样的,只要这样才能确认双方的接受与发送能力是否正常。
1.第一次握手:客户端给服务器发一个SYN报文,并指明客户端的初始化序列号ISN(c)。此时,客户端处于SYN_Send状态
2.第二次握手:服务器收到客户端的SYN报文之后,会以自己的SYN报文作为应答,并且也是指定了自己的初始化序列号ISN(s),同时会把客户端的ISN报文+1作为ACK的值,表示自己已经收到了客户端的SYN,此时服务器处于SYN_REVD的状态
3.第四次握手:客户端收到SYN报文之后,会发送一个ACK报文,也是将服务器的ISN+1作为ACK的值,表示已经收到了服务端的SYN报文,此时客户端处于establised状态。
4.服务器收到ACK报文之后,也处于setablised状态,双方建立连接。
【注意】
🍬1.ISN是动态生成的。
三次握手的一个重要功能便是客户端和服务端交换ISN,以便于对方知道接下来接受数据的时候,如何按序列号组装数据。如果ISN是固定的,攻击者就会很容易就猜出后续的确认号。
🎀2.半连接序列和全连接序列
服务器第一次收到客户端的SYN之后,就会处于SYN——RCVD状态,此时双方还没有完全建立连接,服务器就会把此种状态下请求连接放在一个队列里,这种队列就称为半连接状态。
全连接序列就是已经完成三次握手,建立起连接的就会放在全连接队列。如果队列满了,就可能会出现丢包的现象。
🍒3.携带数据
第一次、第二次握手不能携带数据,第三层握手可以携带数据。
如果第一次握手能携带数据,如果有人恶意攻击服务器,每次在第一次握手中的SYN报文中放入大量的数据,因为攻击者不理会服务器的接受、发送能力是否正常,疯狂重复发送SYN报文,就会使服务器花费很多时间、内存空间来接受这些报文。当第三次的时候,对于客户端,已经建立连接了,接受、发送能力也正常,所以就能携带数据。
🥝4.出现差错的情况
两种情况:
①丢包
主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B;
如果主机A在一个特定时间间隔内没有收到B发来的确认应答,就会进行重发。
②ACK丢失了
没有接收到确认应答,会重新发送的机制,会使一方收到很多重复的数据。TCP协议需要能够识别出那些包是重复的,并且把重复的包丢弃掉。利用前面的序列号,就能很容易做到去重的效果。
确认超时重传的时间:
超时时间的长短会受网络环境的影响,太长会影响整体重传效率,太短,会频繁发送重复的包。
TCP为了保证无论在任何环境下都能比较高性能的通信,会动态计算这个最大超时时间。