基础标识
序号(seq:sequence nubmer)
Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
确认号(ack:acknowledgement number)
ack序号,占32位,只有标志位ACK为1时,确认序号字段才有效,ack=seq+1。
标志位(flags)
- URG---Urgent:紧急位,URG=1,表示紧急数据
- ACK---Acknowledgement:确定位,ACK=1,确定序号有效
- PSH---Push:推送位,PSH=1,表示尽快把数据交付给应用层
- RST---Rest:重置位,RST=1,表示重新建立起连接
- SYN---Synchronization:同步位,SYN=1,表示发起新连接
FIN---Finish:终止位,FIN=1 表示释放连接
TCP三次握手
三次握手过程
第一次
客户端想要和服务端创建一个连接,所以发送了一段报文
- SYN=1 表示请求连接
seq=x(client_isn)客户端序号
第二次
服务端收到来自客户端的报文之后,会返回给客户端一段TCP报文
- SYN=1 表示是连接请求
- ACK=1 表示确定字段有效
- ack=x+1 确认号
seq=y(设备序号)
第三次
客户端接收到来自服务端的报文之后,会如下操作
- 检查ACK确认为是否为1
- 检查ack确认号是否y+1
- 如果满足以上两个条件,则将ack=y+1,ACK=1,seq=x+1发出,正式建立连接
参考链接:https://juejin.cn/post/6862842512952786952
TCP四次挥手
四次挥手过程
第一次
发送端第一次发送报文
报文内容
- FIN=1 表示完成了传输需要释放链接
seq=u 将自己的序列号发给服务端
此时的发送端就处于一个第一个等待状态
第二次
接收端收到发送端的终止请求之后,他会发一个报文去确定一下
报文内容- ACK=1表示确定这个报文已经接收到了
- seq=v 发送自身的型号
ack=u+1确认号
接收方发送了确定报告之后进入了关闭等待状态
发送方接收到以上信息,就进入连接结束的第二个等待状态
第三次
接收端接收完数据之后会发送一个新的报文- FIN=1表示已经可以释放连接了
- ACK=1确认号表示报文已经收到
- seq=w 发送自己的序列号
ack=u+1确认一下是接收的序号
第四次发送端接收到接收方的确定报文之后,会发送一个确认报文,告之已收到
报文内容- ACK=1表示确认
- seq=u+1
ack=w+1
接收方在发送报文之后,会停留在一个最后确认状态
发送方接收到之后进入等待计时器状态
等一会儿确认没有出现任何问题之后,此时进入关闭状态
参考链接:https://juejin.cn/post/6865067087401287688