TCP的三次握手和四次挥手学习

  • 所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送4个包(两个SYN,两个ACK);
  • 第一次握手:当客户端向服务器发起连接请求时,客户端会发送同步序列标号SYN到服务器,等待服务器确认,这时客户端的状态为SYN_SENT。
  • 第二次握手:当服务器收到客户端发送的SYN后,服务器要做的是确认客户端发送过来的SYN,在这里服务器发送确认包ACK,意思是说“我收到了你发送的SYN了”,同时,服务器也会向客户端发送一个SYN包。这时服务器的状态为SYN_RECV。服务器端发送SYN和ACK两个包。
  • 第三次握手:客户端收到服务器发送的SYN和ACK包后,需向服务器发送确认包ACK,“我也收到你发送的SYN了,我这就给你发个确认过去,然后我们即能合体了”,发送完毕后,客户端和服务器的状态为ESTABLISH,即TCP连接成功。
  • 在三次握手中,客户端和服务器端都发送两个包SYN和ACK,只不过服务器端的两个包是一次性发过来的,客户端的两个包是分两次发送的。

  • TCP的连接的拆除需要发送四个包(两个FIN,两个ACK),因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
  • 第一次挥手:A端向B端请求断开连接时会向B端发送一个带有FIN标记的报文段,这里的FIN是FINish的意思。
  • 第二次挥手:B端收到A发送的FIN后,B段现在可能现在还有数据没有传完,所以B端并不会马上向A端发送FIN,而是先发送一个确认序号ACK,意思是说“你发的断开连接请求我收到了,但是我现在还有数据没有发完,请稍等一下”。
  • 第三次挥手:当B端的处理完,那么此时B端就可以断开连接了,此时B端向A端发送FIN序号,意思是这次可以断开连接了。
  • 第四次挥手:A端收到B端发送的FIN后,会向B端发送确认ACK,然后经过两个MSL(MSL是Maximum Segment Lifetime,最大报文段生存时间,2个MSL是报文段发送和接收的最长时间。)时长后断开连接。

参考这里

还有这里

猜你喜欢

转载自www.cnblogs.com/mercycnblog/p/9021817.html