TCP协议报文段的解析

1. 由应用程序产生应用进程,应用进程产生进程端口号,端口号提供相应服务。

2.TCP发送进程以字节流的形式传递数据,而接收进程也把数据作为字节流来接收,类似于假想的管道

3.UDP发送进程发送的数据报文都是独立的,一次UDP不是面向流协议。

4.缓存:数据流向的每一个方向上都有两种缓存:发送缓存,接收缓存

5.在传输层想IP层发送数据是要以报文分组为单位,而不是按字节流来发送,TCP协议把若干字节构成一个分组,我们可以把这样的分组成为报文段,这种报文段的长度是不定的,可以是几个字节,也可以是几千个字节

6.字节号:

以字节为单位

字节号的定义范围为:0~(2^32 -1)

编号机制:随机

举例:加入随机好正好是1057,而要发送6000个字节,那么字节编号范围:1057~ 7056

7序号:

以字节为基础,TCP给每一个报文段指派一个序号

每个报文段的序号就是在这个报文段中第一个字节数据的序号。

举例:

    比如TCP要传输6000个字节的文件。第一个字节的编号是10001.如果数据用5个报文段来发送,前四个报文段个携带1000字节的数据,最后一个报文段携带2000个数据:

报文段1 –> 序号:10001 (字节号范围: 10001~ 11000)

报文段1 –> 序号:11001 (字节号范围: 11001~ 12000)

报文段1 –> 序号:12001 (字节号范围: 12001~ 13000)

报文段1 –> 序号:13001 (字节号范围: 13001~ 14000)

报文段1 –> 序号:10001 (字节号范围: 14001~ 16000) 

TCP报文段格式及解析

  1. 源端口和目的端字段---各占两个字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
  2. 序号字段---占4个字节。TCP连接中传输的数据流中的每一个字节都边上一个编号,序号字段的值则是指本报文所发送的数据第一个字节的序号。
  3. 确认字段---占4个字节,是期望收到对方的下一个报文段的数据的第一个字节的序号
  4. 收不长度---占4bit,它指出TCP首部共有四个字节,首部长度可以在20 ~ 60字节之间。因此,这个字段的值可以在5 (5 x 4 =20 )至 15(15 x 4 =60 )之间。
  5. 保留字段---占6bit,保留为今后使用,但目前应置为0
  6. 紧急URG---当URG =1 ,表名紧急指针字段有效,它告诉系统此报文段中有紧急数据,应当尽快传送(相当于高优先级的数据)。
  7. 确认比特ACK---只用当ACK = 1 是确认号字段才有效,当ACK = 0 时,确认好无效。
  8. 推送比特PSH(push)---接收TCP收到推送比特置1的报文段,就尽快地交付给应用进程,而不再等到整个缓存都填满了后再向上交付。
  9. 复位比特RST(ReSeT)---当RST =1 时 ,表明TCP连接中出现最严重差错,(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

10.同步比特SYN---同步毕业SYN置为1,就表示这是一个连接请求或连接接收报文。

11.终止比特FIN(FINAL)---用来释放一个连接,当FIN = 1 时,表名此报文段的发送端的数据已发送完毕,并要求释放运输连接。

12.窗口字段---占2字节。窗口字段用来控制对方发送的数据量,单位是字节。TCP连接的一端根据设置的缓存空间的大小确定自己的接收窗口的大小,然后通知对方以确定对方的发送窗口的上限。

13.检验和---占2字节。检验和字段检验的范围包括首部和数据这两部分,在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。(TCP协议必填,UDP可有可无)

14.紧急指针字段---占16bit.紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。

15.选项字段---长度可变。TCP只规定了一种选项,即最大报文段的长度MSS(Maximum Segment Size)。MSS告诉对方TCP:“我的缓存所能接受的报文段的数据字段的最大长度是MSS个字节”

MSS(Maximum Segment Size):最大报文段长度

MTU(Maxium Transmission Unit):最大传输单元

MSS = MTU – 20BYTE(IP首部) – 20BYTE(TCP首部)

16.填充字段---这是为了使整个首部长度是4字节的整数倍。(目前基本用不到)

原文地址:https://www.cnblogs.com/Lovis/p/10061046.html