TCP协议的3次握手建立连接and4次挥手断开连接

一:学英语

 

Client: 客户端

 

Server: 服务端

 

CLOSED: 关闭,表示主机的连接处于关闭状态。

 

LISTEN: 监听,表示主机处于监听状态,等待被连接。

 

SYN: Synchronize Sequence Numbers,同步序列编号。是TCP/IP建立连接时使用的握手信号。

 

SYN_SEND: Synchronize Sequence Numbers Send,同步序列号已发送。

 

SYN_RCVD: Synchronize Sequence Numbers Send Received,同步序列号已接收。

 

ACK: Acknowledge character,确认字符,表示发来的数据已确认接收无误。

 

ESTABLISHED: 已经建立连接,TCP:连接成功。

 

FIN_WAIT: Finish Wait,终止等待,请求关闭连接。是TCP/IP关闭连接时使用的挥手信号。

 

CLOSE_WAIT: 关闭等待,会被动关闭连接。

 

TIME_WAIT: 时间等待,会主动关闭连接。

 

LAST_ACK: Last Acknowledge character,最后的确认,确认后,TCP:连接关闭。

 

二:半连接池

客户端发送请求后,服务端会先将SYN请求放进半连接池。
如果半连接池只能存放5个SYN请求,那么第6个SYN请求会无法进入。
在连接池内的SYN请求并不会马上获得响应,而是像队列一样,先进先出,一个一个地获得服务端的回应。
 

三:3次握手

 

1.纯英文(看不懂)版

  • 一开始:客户端(Client) 和 服务端(Server) 都处于 关闭(Closed)状态,服务端(Server) 处于监听状态(Listen)。

1.客户端(Client) :我请求连接你(SYN=1),我的身份是Client(seq=J)。

  • 此时,客户端(Client) :关闭状态(Closed) ——> 请求已发送状态(SYN_SEND)

2.服务端(Server) :我收到你的连接请求了(ACK=1),我确认你的身份了(ack=J+1),你可以连接了;我也要连接你(SYN=1),我的身份是(seq=K)。

  • 此时, 服务端(Server) :监听状态(Listen) ——> 请求已接收状态(SYN_SEND)(半连接状态)

3.客户端(Client) :我也收到你的连接请求了(ACK=1),我确认你的身份了(ack=K+1),你也可以连接了。

  • 此时, 客户端(Client) : 请求已发送状态(SYN_SEND) ——> 连接已建立状态(ESTABLISHED)
  • 之后, 服务端(Server) :请求已接收状态(SYN_SEND) ——> 连接已建立状态(ESTABLISHED)
 

2.中文(看得懂)版

 

3.通俗版

背景:A区和B区之间交通不太好,需要修高速公路(都是单向的)

①A区:我是A区,我想要修一条到B区的(单向)高速公路,可以吗?
②B区:我知道了,你修吧!我是B区,我也想修一条到A区的(单向)高速公路,可以吗?
③A区:我知道了,你修吧!
 

四:4次挥手

 

1.纯英文(看不懂)版

  • 一开始:客户端(Client) 和 服务端(Server) 都处于 连接已建立状态(ESTABLISHED)。

1.客户端(Client) :我数据传完了 请求断开连接(FIN=1),我的身份是Client(seq=J)。

  • 此时,客户端(Client) :连接已建立状态(ESTABLISHED) ——> 终止等待状态1(FIN_WAIT_1)

2.服务端(Server) :我收到你断开的连接请求了(ACK=1),我确认你的身份了(ack=J+1),你可以断开连接了;我数据还没传完(seq=K)。

  • 此时, 服务端(Server) :连接已建立状态(ESTABLISHED) ——> 关闭等待状态1(CLOSE_WAIT)
  • 此时,客户端(Client) :终止等待状态1(FIN_WAIT_1) ——> 终止等待状态2(FIN_WAIT_2)

3.服务端(Server) :好了 我数据传完了 请求断开连接(FIN=1),我的身份是Server(seq=L)。

  • 此时, 服务端(Server) :关闭等待状态1(CLOSE_WAIT) ——> 最后确认状态(LAST_ACK)

4.客户端(Client) :我收到你的断开连接请求了(ACK=1),我确认你的身份了(ack=L+1),你可以断开连接了。

  • 此时, 客户端(Client) : 终止等待状态2(FIN_WAIT_2) ——> 时间等待状态(TIME_WAIT) ——等待2MSL—— 连接关闭状态(CLOSED)
  • 之后, 服务端(Server) :最后确认状态(LAST_ACK) ——> 连接关闭状态(CLOSED)
 

2.中文(看得懂)版

 

3.通俗版

背景:A区和B区中间要建立开发区了,需要拆除高速公路

①A区:我是A区 我高速公路上的车辆都清空了,我要拆高速公路了
②B区:好的,你拆吧!我还没清空车辆
③B区:我是B区,我高速公路上的车辆也清空了,我要拆高速公路了
⑤A区:好的,你拆吧!
每天逼着自己写点东西,终有一天会为自己的变化感动的。这是一个潜移默化的过程,每天坚持编编故事,自己不知不觉就会拥有故事人物的特质的。 Explicit is better than implicit.(清楚优于含糊)
原文地址:https://www.cnblogs.com/kylin5201314/p/13508188.html