TCP专有的三次握手和四次挥手(简述)

TCP的三次握手和四次挥手(简述)

先简单说下tcp包的封装格式,在说下自己对于TCP三次握手和四次挥手的理解

TCP的封装格式(不按顺序)

16位源端口号
16位目标端口号
32位序列号
32位确认号
6位标识符

URG:紧急指针有效位
ACK:确认序列号有效
PSH:要求对方数据尽快达到应用层
RST:重置连接
SYN:发起一次连接
FIN:释放一次连接

4位首部长度:
6位保留:
16位窗口大小
16位校验和
16位紧急指针
可选项
数据

TCP的三次握手

在开始之前先设置定义下情景,假设有两台主机,分别为client端和server端

  1. client端向server端请求http服务,于是向server端发送了一个报文包,其中序列号seq的值为1,6位标识中的SYN为1
  2. server端收到client端的报文包后,同意建立连接,于是给client端返回报文包,其中序列号seq的值为100,确认号ack的值为2(前报文seq+1),标识位中SYN、ACK的值为1
  3. client端接收到server端返回的报文包之后,开始建立连接,给server端发送报文包,其中序列号seq的值为2,确认号ack的值为2,确认号ack的值为101

四次挥手

在上面三次握手成功开始传递数据的基础上,client端不想使用http服务了,向断开连接,此时最近一个server端发过来的包中序列号seq的值为200,确认号ack为101

  1. client端给server段发送报文包,请求断开连接,其中序列号seq的值为101,确认号ack的值为201,标识位FIN、ACK的值为1
  2. server端接收到client端发送的请求断开报文包,同意断开连接,于是同时给client端发送了2个报文包,其中一个报文包是确认包,其中序列号seq的值为201,确认号ack的值为102,标识位ACK的值为1
  3. 另一个报文包是请求断开连接的包,其中序列号seq的值为201,确认号ack的值为102,标记位FIN、ACK的值为1
  4. client端接收到server端的两个包后,给server端发送了一个确认报文包,其中序列号seq的值为102,确认号ack的值为202,标识位ACK的值为1

你可能感兴趣的:(计算机网络)