三次握手与四次握手


三次握手是TCP建立连接的协议,四次握手是关闭连接的协议

三次握手

ClientServerClosedListenclosed,SYN=1,seq=xSYN_SENTSYN=1,seq=y,ACK=1,ack=x+1SYN_RCVD收到后切换状态EstablishSYN=1,seq=x+1,ACK=1,ack=y+1Establish数据传输数据传输ClientServer

为什么3次?有什么作用?是为了建立TCP连接,需要三次握手才能确定对方的接收能力和发送能力都没有问题,指定自己的初始化***为后面的可靠性传送做准备

初始化***有什么用?动态生成,每个连接不同,客户端开始以x,下次x+1,类推;可以根据***组装数据;

三次握手中够可以携带数据吗?第一次不可以,这样可以防止攻击;第三次可以,因为对客户端来说,连接已建立。

SYN攻击?通常半连接队列爆满,Server不断重复确认包直到超时(攻击方不断发送连接请求,但又不确认);

四次握手

半关闭?一方结束数据发送任务后,还能接受来自另一方的数据;即TCP是全双工连接,每个方向需要单独进行关闭;
三次握手与四次握手
详细解释

  • 客户端发送一个FIN,用来关闭客户到服务器的数据传送。
  • 服务器收到,发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
  • 服务器关闭客户端的连接,发送一个FIN给客户端。
  • 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。同时自身等待2MSL就转到CLOSED状态

等待2msl目的是什么?一定要吗?等待2MSL时间主要目的是:怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在实际应用中可以通过设置SO_REUSEADDR选项达到,不必等待2MSL时间结束再使用此端口。

统一的状态图

3次和4次握手正常情况下,入蓝黄红箭头所示:
三次握手与四次握手

相关文章:

  • 2021-05-08
  • 2021-11-22
  • 2021-04-23
  • 2022-12-23
猜你喜欢
  • 2022-01-14
  • 2021-05-14
  • 2021-11-17
  • 2021-11-18
  • 2022-02-15
  • 2021-08-21
相关资源
相似解决方案