计算机网络之TCP报文
1.TCP报文
1、端口号:用来标识同一台计算机的不同的应用进程。
1)源端口:源端口和IP地址的作用是标识报文的返回地址。
2)目的端口:端口指明接收方计算机上的应用程序接口。
TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。
2.窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。
3.校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。
4.数据偏移/首部长度:4bits。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。
5.保留:为将来定义新的用途保留,现在一般置0。
6.紧急指针:只有当 URG 标志置 1 时紧急指针才有效; 紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号; TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。
7.选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。
8.数据部分: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

2.序号
Sequence number (顺序号码)-------也叫序列号
占4个字节,它的范围在0-2^32-1,序号随着通信的进行不断的递增,当达到最大值的时候重新回到0在开始递;
TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按照顺序编号,整个要传送的字节流的起始号必须在连接建立时设置;
首部中的序列号字段指的是本报文段所发送的数据的第一个字节的序号;
例如:一个报文序号是301,而携带的数据共有100字节,则表示本次报文中的序号是301,下一个报文的序号是401,重复一下,每一个报文的序号是该报文包含的字节中第一个字节的编号
3.确认号
Acknowledge number (确认号码) ------小写ack
占4个字节,确认号,是对下一个想要接受的字节的期望,这里隐式确认了对上一个数据包的成功接收。如上例,在成功接收了序号为301的数据包,想要接收下一个数据包因为上个数据包包含100字节,所以此时的确认号应该是401,表示希望接收下一个序号是401的数据包