TCP连接中的ACK与ack

在TCP协议三报文握手建立连接的过程中,TCP请求报文段中存在ACK和ack两个数值。要搞清楚这两个数值的含义,得了解TCP报文段的首部格式:

1、TCP报文段的首部格式:

TCP报文段分为首部与数据部分两大部分,首部存放TCP报文段相关信息,数据部分存放TCP报文段数据内容。首部按顺序存在20个固定字节与4n个长度可变的选项字节,这里不讨论首部无关字段,与主题相关的两个字段为“确认号”字段与“ACK”字段(如下图)。
TCP连接中的ACK与ack_第1张图片
重要前提:TCP连接中传送的字节流中的每一个字节都按顺序编号,编号相关的信息存放于“序号”字段中。

(1)确认号字段:该字段存放的信息为期望收到对方下一个报文段的第一个数据字节的序号。 例:A向B发送数据报文段,B需给A发送一个收到确认报文段来告知A已收到其发来的数据报文段。在B给A发送的确认报文段中,确认号为501,即表明序号1-500的字节已成功收到,接下来期望收到从A发来的序号为501的字节。
(2)ACK字段:在TCP报文段中,字段ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。

2、三报文握手中ACK与ack的含义
TCP的连接建立时,使用三报文握手的方式建立连接(例如下图)。
TCP连接中的ACK与ack_第2张图片
客户端与服务器来回共发送三个TCP报文段来建立运输连接,三个TCP报文段分别为:
(1)客户端A向服务器B发送的TCP请求报文段“SYN=1,seq=x”;
(2)服务器B向客户端A发送的TCP确认报文段“SYN=1,ACK=1,seq=y,ack=x+1”;
(3)客户端A向服务器B发送的TCP确认报文段“ACK=1,seq=x+1,ack=y+1”。

ACK:这里出现的ACK即为上面所说的TCP报文段首部中的“ACK字段”,置1时该报文段为确认报文段。
ack:而ack则为TCP报文段首部中“确认号字段”的具体数值。ack=x+1说明B希望A下次发来的报文段的第一个数据字节为序号=x+1的字节;ack=y+1说明A希望B下次发来的报文段的第一个数据字节为序号=y+1的字节。

你可能感兴趣的:(TCP连接中的ACK与ack)