1.序
在TCP/IP中能够实现传输层功能的、具有代表性的协议是TCP和UDP,来一起看看TCP UDP的构造吧。
2.tcp协议:
TCP各个字段意义
2.1源端口和目的端口:
计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口(各占2个字节),就可以知道是哪两个进程需要通信。
源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个(65535)。
2.2序列号
TCP 是面向字节流的,在一个 TCP 连接中传输的字节流中的每个字节都按照顺序编号。
序列号(占 4 个字节)表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0 开始。
例如 100 kb 的 HTML 文档数据,一共 102400 (100 * 1024) 个字节,那么每一个字节就都有了编号,整个文档的编号的范围是 0 ~ 102399。
序号字段值指的是本报文段所发送的数据的第一个字节的序号。
那么 100 的 HTML 文档分割成四个等分之后,
第一个 TCP 报文段包含的是第一个 25kb 的数据,0 ~ 25599 字节, 该报文的序号的值就是:0
第二个 TCP 报文段包含的是第二个 25kb 的数据,25600 ~ 51199 字节,该报文的序号的值就是:25600
…
根据 8 位 = 1 字节,那么 4 个字节可以表示的数值范围:[0, 2^32],一共 2^32 (4294967296) 个序号。
序号增加到最大值的时候,下一个序号又回到了 0.
也就是说 TCP 协议可对 4GB 的数据进行编号,在一般情况下可保证当序号重复使用时,旧序号的数据早已经通过网络到达终点或者丢失了。
2.3确认号
TCP 的可靠性是建立在每一个数据报文都需要确认收到的基础之上的。也就是说,通讯的任何一方在收到对方的一个报文之后,都要发送一个相对应的确认报文(确认报文就会包含确认号)来表达确认收到。
确认号(占4个字节,32位):表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。
例如,通讯的一方收到了第一个25kb的报文,该报文的序号值=0,那么就需要回复一个确认报文,其中的确认号 = 25600(0-25599,所以期望收到的是25600).
2.4数据偏移
数据偏移占0.5个字节(4位)指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的,但应注意,“数据偏移”的单位是32位字(即以4字节的字为计算单位)。
由于4位二进制数能表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大字节(即选项长度不能超过40字节,因