计算机网络面试题(九):TCP四次挥手
TCP四次挥手
挥手重要标号:FIN
FIN=1 代表申请断开TCP连接
- 确认字符ACK含义:说明当前这个报文是针对之前的哪个报文的验证。因为在TCP连接上会有很多请求(例如管线化)
- ***seq含义:代表当前这个报文的序号
TCP四次挥手过程:
- 客户端发送断开TCP连接的请求报文
报文:FIN=1, seq=x
- FIN=1:代表请求断开TCP连接
- seq=x:给这个请求打一个标号,x是生成的随机数
- 服务端回复客户端的断开请求
报文:FIN=1, ACK=x+1, seq=y
- FIN=1:代表断开TCP请求
- ACK=x+1:确认字符,在发送端的***x上面+1,这样就说明了是针对客户端***是x的报文的确认
- seq=y:给当前这个回复报文随机生成一个***(相当于标记)
***seq相当于是给当前报文的一个标号,方便识别。一个TCP连接上面可能会有很多的报文来往,故需要这样一个标号
-
服务端在第一次回复之后不会马上就断开TCP连接,而是会先确保断开前,所传输的数据是否已经传输完成了(分手了也得把东西收拾完)
确认完毕后再回复一个报文
报文:FIN=1,ACK=x+1, seq=z
- FIN=1:代表断开TCP连接
- ACK=x+1:依然是针对上***是x的客户端请求的确认报文
- seq=z:给当前这个报文一个标号
- 客户端收到服务端的回复后再知会一声
报文:FIN=1,ACK=y+1,seq=h
- FIN=1:断开TCP连接
- ACK=y+1:代表是针对标号是y的服务端报文的确认字符
- seq=h:给当前报文一个标号