?报文又叫做segment,是传输层的传输单位。
?总体上 报文可分为 首部 和数据部分
而大部分信息存储在首部,这也是我们要着重关注的部分
?数据传输的总体过程是,将数据分割成几段,然后在这几段里面分别加上首部,然后传输到对方。对方接收到后,将首部拿掉,然后拼接起来,形成源数据,举个栗子:
例如一个 100kb 的 HTML 文档需要传送到另外一台计算机,并不会整个文档直接传送过去,可能会切割成几个部分,比如四个分别为 25kb 的数据段。 而每个数据段再加上一个 TCP 首部,就组成了 TCP 报文。 一共四个 TCP 报文,发送到另外一个端。 另外一端收到数据包,然后再剔除 TCP 首部,组装起来。 等到四个数据包都收到了,就能还原出来一个完整的 HTML 文档了
那么这里就存在一个问题,我们是怎么加首部的呢,首部里面蕴含了什么重要的信息呢,不同数据段的首部信息是一样的吗?是否存在某些规律?
要解决这些疑问,我们首先看sequence number
sequence number标识的是本报文传输的数据的第一个字节的序号,例如此报文传输的数据大小为1024,对应的序号为0-1023,那么sequence number就是0,如果下一个报文对应的序号是1024-2047,那么sequence number就是1024
Acknowledgemt Number:表示期望收到对方下一个报文段的序号值,用于发送确认
比如对方给你传输了0-1023序号的报文,那么你发送过去确认报文的number就应该是1024,对方收到后就知道哦,原来0-1023的数据你都正常接收了,那这次我就从1024序号的报文开始发送。
标志位 TCP Flags
标志位,一共有 6 个,分别占 1 位,共 6 位 。 每一位的值只有 0 和 1,分别表达不同意思。
我们一般见得最多的就是 ACK SYN FIN确认号
ACK:当ACK=1的时候 ,确认号有效
SYN: 当 SYN=1的时候,表面这是一个请求连接报文段
FIN:当 FIN = 1 时,表示此报文段的发送方的数据已经发送完毕,并要求释放 TCP 连接。
|