白话TCP协议数据报文三次握手图文详解

TCP协议相关介绍

TCP是面向连接的协议,在通信之前需要先建立连接,其本质就是打开一个socket文件,这个文件有自己的缓冲区,如果要发送数据,上层把数据拷贝到发送缓冲区;如果是接收数据,OS直接把来自网络的数据拷贝到接收缓冲区里
白话TCP三次握手图文详解
  • 序列号:在建立连接时就由计算机随机生成,每发送一次数据,该序列号+1,用来解决网络中包乱序的问题
  • 确认应答号:表示下一次期望收到的报文序列号,表示以前的数据报都已经收到了,用来解决网络中丢包的问题
  • 控制位:
    • ACK:该位为1时,确认应答号是有效的,除了建立连接开始的syn包时,其他包该位必须为1
    • RST:该位为1时,表示出现异常,强制连接断开
    • SYN: 该位为1时,表示希望建立连接,并且初始化序列号
    • FIN: 该位为1时,希望正常断开连接,通信双方互相交换FIN,表示可以断开
  • 窗口,占2字节,指的是通知接收方,发送本报文你需要有多大的空间来接受;
  • 检验和,占2字节,校验首部和数据这两部分;
  • 紧急指针,占2字节,指出本报文段中的紧急数据的字节数;
  • 选项,长度可变,定义一些其他的可选的参数。

Wireshark抓包实例分析

  • TCP三次数据包交互握手的过程如下图:
Wireshark抓包实例分析
  • 第1次握手数据报文交互,在Flags位里Syn被置1,Sequence Number=4204971996,如 下图:
  • 第2次握手数据报文交互,在Flags位里Syn被置1Ack被置1Ack=第1次数据报文的Seq(4204971996)+1=4204971997(X+1)同时为Sequence Number=60495204(Y)
白话TCP协议数据报文三次握手图文详解

第3次握手数据报文交互,在Flags位里Syn被置1,Ack被置1,Ack=第2次数据报文的Seq(60495204)+1=60495205(Y+1),同时为Sequence Number=4204971997(X+1)

  • Seq不是每次都加1, 是要加上Len的值,因为三次握手的Len=0
白话TCP协议数据报文三次握手图文详解

Wireshark学习操作显示界面设置:https://www.hao0564.com/3881.html

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注