TCP/IP-三次握手和四次挥手

TCP/IP协议在客户端与服务器建立连接和断开连接时的一套消息确认机制,就是三次握手和四次挥手。

TCP/IP的三次握手和四次挥手是《计算机网络》的基础知识。

三次握手四次挥手
数据在两端之间的网络传输,是确认对方能发也能收。

三次握手

三次握手TCP/IP建立连接的确认机制,是客户端和服务器双方要确认对方能收到自己的信息,而三次握手是最短路径。

  1. 第一次握手:建立连接时,Client发送请求报文段(syn seq=x),进入SYN_SENT状态,等待Server确认。
  2. 第二次握手:服务器收到,Server回复信息给Client,包含给客户端的确认信息,和服务器自身的报文信息(ack=x+1 syn seq=y),此时服务器进入SYN_RECV状态。
  3. 第三次握手:客户端收到SYN+ACK包,Client回复服务器(ack=y+1),客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

三次握手完成后,客户端与服务器开始传送数据。

形象比喻

  1. A 向 B 发起建立连接请求:A——>B;
  2. B 收到 A 的发送信号,并且向A发送确认信息:B——>A;
  3. A 收到 B 的确认信号,并向B发送确认信号:A——>B。

通过第一次握手,B 知道 A 能够发送数据。通过第二次握手,A 知道 B 能发送数据。
结合第一次握手和第二次握手,A 知道 B 能接收数据。结合第三次握手,B知道A能够接收数据。

至此,完成了握手过程,A 知道 B 能收能发,B 知道 A 能收能发,通信连接至此建立。
三次连接是保证可靠的最小握手次数,再多次握手也不能提高通信成功的概率,反而浪费资源。

四次挥手

四次挥手TCP/IP关闭连接的确认机制。
对于一个已经建立的连接,TCP使用改进的三次握手来释放连接(使用一个带有FIN附加标记的报文段)。TCP关闭连接的步骤如下:

  1. 第一步:当主机 A 的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。
  2. 第二步:主机 B 收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。
  3. 第三步:主机 B 的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机 A送一个FIN报文段。
  4. 第四步:主机 A 收到这个 FIN 报文段后,向主机 B 发送一个ACK表示连接彻底释放。

形象比喻

  1. A 向 B 发起请求(fin),表示A没有数据要发送了:A——>B;
  2. B 向 A 发送信号(ack),知道A要请求断开;
  3. B 向 A 发送信号(fin),数据接收完成,告知B要关闭连接:B——>A;
  4. A 向 B 收到信号(fin)向B发送(ack),确认断开:A——>B。
  5. B 收到确认信号,断开连接,而A在一段时间内没收到B的信号,表明B已经断开了,于是A也断开了连接。至此,完成挥手过程。

2,3次挥手不能合为一次,因为此时 A 虽然不再发送数据了,但是还可以接收数据,B可能还有数据要发送给A,所以两次挥手不能合并为一次。
挥手次数比握手多一次,是因为握手过程,通信只需要处理连接。而挥手过程,通信需要处理数据+连接。

参考
为什么TCP需要三次握手和四次挥手
TCP 三次握手和四次挥手

作者

光星

发布于

2018-03-23

更新于

2023-01-10

许可协议

评论