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

相关推荐
咕噜企业分发小米9 小时前
有哪些开源的直播云服务器安全防护方案?
运维·服务器·云计算
开开心心_Every9 小时前
安卓后台录像APP:息屏录存片段,行车用
java·服务器·前端·学习·eclipse·edge·powerpoint
qq_3168377510 小时前
IP网段冲突 配置指定ip使用指定的网络接口发送,而不经过默认网关
服务器·网络·tcp/ip
布史10 小时前
Tailscale虚拟私有网络指南
linux·网络
枷锁—sha11 小时前
彻底解决 Google Gemini 报错:异常流量与 IP 地址冲突排查指南
网络·网络协议·tcp/ip
Xの哲學11 小时前
深入剖析Linux文件系统数据结构实现机制
linux·运维·网络·数据结构·算法
深圳市恒讯科技11 小时前
Linux 文件权限指南:chmod 755、644、drwxr-xr-x 解析
linux·服务器·xr
xingzhemengyou111 小时前
Linux taskset指令设置或查看进程的 CPU 亲和性
linux·服务器
开开心心就好11 小时前
图片格式转换工具,右键菜单一键转换简化
linux·运维·服务器·python·django·pdf·1024程序员节
-To be number.wan11 小时前
经典真题精讲|2010年408统考第34题:文件传输最少需要多久?
网络·计算机网络