TCP三次握手机制中的seq和ack的值到底是什么意思?

TCP连接的三次握手:

第一次(A--->B),SYN=1,seq=x
第二次(B--->A),SYN=1,ACK=1,seq=y,ack=x+1 //seq为什么是y,ack为什么是x+1?
第三次(A--->B),ACK=1,seq=x+1,ack=y+1 //seq为什么是x+1,ack为什么是y+1?
一直没搞懂,谁能解释详细点。

seq和ack号存在于TCP报文段的首部中,seq是序号,ack是确认号,大小均为4字节。

seq:占 4 字节,序号范围[0,2^32-1],序号增加到 2^32-1 后,下个序号又回到 0。TCP 是面向字节流的,通过 TCP 传送的字节流中的每个字节都按顺序编号,而报头中的序号字段值则指的是本报文段数据的第一个字节的序号。

ack:占 4 字节,期望收到对方下个报文段的第一个数据字节的序号。

扩展资料:

一个TCP连接的建立是通过三次握手来实现的

1. (A) –> [SYN] –> (B)

假如服务器B和客户机A通讯. 当A要和B通信时,A首先向B发一个SYN (Synchronize) 标记的包,告诉B请求建立连接.

注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources). 认识到这点很重要,只有当B受到A发来的SYN包,才可建立连接,除此之外别无他法。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不能主动连接外部任何主机,除非不是TCP协议

2. (A) <– [SYN/ACK] <–(B)

接着,B收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确认,并继续握手操作.

注意: SYN/ACK包是仅SYN 和 ACK 标记为1的包.

3. (A) –> [ACK] –> (B)

A收到SYN/ACK 包,A发一个确认包(ACK),通知B连接已建立。至此,三次握手完成,一个TCP连接完成

Note: ACK包就是仅ACK 标记设为1的TCP包. 需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位

握手阶段:

参考资料来源:百度百科-三次握手

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-11-09

楼上答得太好了,我配个图。

前三次都是tcp,第四次是http了

第2个回答  2020-08-03

第3个回答  2021-01-06

第4个回答  2018-06-07
其实第三次的时候SYN应该是0,即SYN=0
相似回答