TCP连接详解:三次握手与实战分析(SYN,ACK,seq)

1、TCP连接的目的

(1)让发送方、接收方感知对方的存在

(2)发送方、接收方协商相关参数(各自的起始序号,接收能力,MSS,窗口扩大,时间戳等等)

(3)根据双方的协商分配资源(发送缓存,接收缓存等)

2、TCP连接建立过程

(1)A向B发送TCP连接请求,SYN=1消耗一个序号seq=x;

(2)B发送连接接受报文SYN=1,对A的序号为x的报文进行确认,故确认号有效ACK=1,ack_seq=x+1,seq=y,y是B的起始序号;

(3)A对B进行确认,ACK=1,ack_seq=y+1;seq=x+1(备注:(a)此时可以发送数据了序号从x+1开始,顺带确认,如果不发送数据seq=x+1,此时并不消耗序号x+1,后面数据发送序号仍然从x+1开始)

(4)如上所述,TCP在三报文握手期间会消耗掉一个序号,但这对数据传输没有任何影响。


3、Wireshark抓包实例分析


(1)连接请求(标志syn=1,ACK=0)

TCP连接请求报文:SYN=1,seq=0(发送方的起始序号为0),ACK控制位=0,此时确认号无效,即没有确认,此时我们很多时候可能看到ack_seq=0,但只要ACK控制位=0,它就无效,任何确认都不可能是0,因为序号最小从0开始,确认号最少从1开始。另外该TCP报文的源端口号为10530,目的端口号80,在确认报文中,源端口号和目的端口号将对调。

在数据中,我们还可以看到Sequence Number (raw),这是TCP协议中表示数据包起始字节编号的原始值,用于标识数据流中的每个字节。具体解析如下:

  • 原始值:表示数据包起始字节的绝对编号,通常为一个大整数(如1150047968);
  • 相对值:在通信中显示为相对序列号(如0),表示相对于连接建立时的起始值。
    (2)连接接受报文(SYN=1,ACK=1,ack_seq=1)

TCP连接接受报文:ACK=1,SYN=1,ack_seq=1(这是对对方,即发送方0序号的确认),seq=0,接收方的起始序号。此时发送方知道,接收方已经感知到它的存在了。源端口号80,目的端口号10530。Sequence Number (raw)原始值为1627912451,Acknowledgment Number (row) 1150047969,是对1150047968的确认。在这里理解时,我们使用相对的还是绝对的都可以。


(3)发送对接收方的确认

ACK=1,ack=1,此时SYN不再等于1。这是对接收方连接接受报文的确认,对方收到后,连接建立完成。同时开始发送数据。

4.408考研部分试题

试题一:

若主机甲主动发起一个与主机乙的 TCP 连接,甲、乙选择的初始序列号分别为 2018和

2046,则第三次握手TCP段的确认序列号是( )。

A 2018 B 2019 C 2046 D 2047

分析:

(1)TCP连接请求中,seq=2018,ACK=0,确认号ack无效

(2)TCP连接接受报文中,seq=2046,ACK=1,ack=2019

(3)TCP确认中,seq=2019,ACK=1,ack=2047
试题二:

若主机甲与主机乙建立TCP连接时,发送的SYN段中的序号为1000,在断开连接时,甲发送给乙的FIN段中的序号为5001,则在无任何重传的情况下,甲向乙已经发送的应用层数据的字节数为( )。

A 3999 B 4000 C 4001 D 4002

分析:

(1)TCP连接时初始序号为1000;

(2)实际数据序号从1001开始

(3)断开连接的确认号为5001

(4)对方的接收数据最大序号为5000

(5)数据编号:1001-5000共4000

相关推荐
ulias2124 小时前
Linux系统中的权限问题
linux·运维·服务器
青花瓷5 小时前
Ubuntu下OpenClaw的安装(豆包火山API版)
运维·服务器·ubuntu
振浩微433射频芯片5 小时前
433MHz在智能家居中的应用大全(二):智能安防篇——安全不容“信号死角”
网络·单片机·嵌入式硬件·物联网·智能家居
韭菜钟6 小时前
WIndows下一键切换网卡IP脚本
windows·网络协议·tcp/ip
Dream of maid7 小时前
Linux(下)
linux·运维·服务器
齐鲁大虾7 小时前
统信系统UOS常用命令集
linux·运维·服务器
fengfuyao9857 小时前
基于STM32的4轴步进电机加减速控制工程源码(梯形加减速算法)
网络·stm32·算法
瀚高PG实验室8 小时前
审计策略修改
网络·数据库·瀚高数据库
forAllforMe9 小时前
etherCAT的协议VoE,FoE,EoE,CoE的概念和区别
网络
专吃海绵宝宝菠萝屋的派大星9 小时前
使用Dify对接自己开发的mcp
java·服务器·前端