网络基础 — IP地址数据报格式和TCP协议段格式的浅析

时间:2021-08-12 10:33:28

                                  IP地址数据报格式和TCP协议段格式的浅析






IP地址数据报格式

                                                                                                                                          

IP地址数据报格式: 


网络基础  — IP地址数据报格式和TCP协议段格式的浅析

接下来我们一次了解它格式里面每一项的含义,注意这里我们只讨论IPv4的情况.


版本号:这4位表明了数据报采用的协议版本。通过版本号路由器可以确定如何解释IP数据报的剩余部分。


首部长度:因为IPv4数据报可包含一些可选项(包含在数据报首部中),故需要用这4位来确定IP数据报中的数据部分实际从哪里开


始。


服务类型:服务类型使不同类型的IP数据报能互相区分开来。如:将实时数据报(IP电话等)与非实时流量区分开。



数据报长度:IP数据报总长度(首部+数据),以字节计。该字段长度为16位,所以IP数据报理论最大长度为65 535字节。然而,数


据报很少有超过1500字节的。


16位标识:当发生IP分片后,被接受后用于重新组装数据,主要功能是判断数据碎片是来自于那个数据.


3位标志:这里的3位标识,有3个位,其一用来存储这个碎片后面有没有数据,有这位就是1,没有就是0.其二用来保留字段.其三在


分片的时候,会查看这里里面存储该数据是否准许被分片.


片偏移:在数据被分片后,存储该碎片的偏移量,也就是表示碎片的先后顺序.


8位生存时间:Time-To-Live,TTL字段用来确保数据报不会永远在网络上循环。每经过一台路由器时,该字段值减一,若字段减为


0,则该数据报必须被丢弃。


8位协议:该字段仅在一个IP数据报到达其最终目的地时才会用到。该字段值指明了IP数据报的数据部分应交给哪个运输层协议。


16位首部检验和:首部检验和用于帮助路由器检测收到的IP数据报中的比特错误。首部检验和事这样计算的:将首部中的每两个字


节当做一个数,用反码对这些数求和。该和的反码存放在检验和字段中。路由器要对每个收到的IP数据报计算其首部检验和,根据


数据首部中携带的检验和与计算得到的检验和是否一致,来检验是否出错。路由器一般丢弃检测出错误的数据报。


32位源和目的IP地址:当源主机产生一个数据报时,它在源IP字段中插入它的IP地址,在目的IP地址字段中插入其最终目的地的地


址。通常由源主机经DNS查找决定目的地址。


选项:选项字段允许扩展IP首部。IPv6不再采用。


数据:数据字段包含要交付给目的地的运输层报文段(TCP或UDP)。数据字段也可以承载其他类型的数据(ICMP报文段等)







TCP协议

                                                                             


TCP协议的段格式:

网络基础  — IP地址数据报格式和TCP协议段格式的浅析


16位源端口号:标识发送报文的计算机端口或进程。一个 TCP 报文段必须包括源端口号,使目的主机知道应该向何处发送确认报
文。

16位目的端口号:标识接收报文的目的主机的端口或进程

32位序号:用于标识每个报文段,使目的主机可确认已收到指定报文段中的数据。当源主机用于多个报文段发送一个报文时,即使
这些报文到达目的主机的顺序不一样,序列号也可以使目的主机按顺序排列它们。在 SYN 标志未置位时,该字段指示了用户数据区
中第一个字节的序号;在 SYN 标志置位时,该字段指示的是初始发送的序列号。

32位确认序号:目的主机返回确认号,使源主机知道某个或几个报文段已被接收。如果 ACK 控制位被设置为 1,则该字段有效。确
认号等于顺序接收到的最后一个报文段的序号加 1,这也是目的主机希望下次接收的报文段的序号值。返回确认号后,计算机认为
已接收到小于该确认号的所有数据。

4位首部长度: TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,即首部长度。

保留位:由跟在数据偏移字段后的 6 位构成, 全部为 0 。

URG:此位置 1,表明紧急指针字段有效,它告诉系统此报文段中有紧急数据,应尽快传送

ACK:仅当 ACK = 1 时确认号字段才有效,TCP 规定,在连接建立后所有传达的报文段都必须把 ACK 置 1。

PSH:当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况
下,TCP 就可以使用推送(push)操作,这时,发送方 TCP 把 PSH 置 1 ,并立即创建一个报文段发送出去,接收方收到 PSH = 
的报文段,就尽快地(即“推送”向前)交付给接收应用进程,而不再等到整个缓存都填满后再向上交付。

RST:
置1时重建连接。如果接收到RST位时候,通常发生了某些错误。


SYN:
仅在三次握手建立 TCP 连接时有效。当 SYN = 1 而 ACK = 0 时,表明这是一个连接请求报文段,对*同意建立连接,则

在相应的报文段中使用 SYN = 1 和 ACK = 1。因此,SYN 置 1 就表示这是一个连接请求或连接接受报文。

FIN:用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放运输连接。

16位窗口大小:此字段用来进行流量控制,这个值是本机期望一次接收的字节数,即发送数据的窗口大小。

16位校验和:源主机和目的主机根据 TCP 报文段以及伪报头的内容计算校验和。在伪报头中存放着来自 IP 报头以及 TCP 报文段
长度信息。与 UDP 一样,伪报头并不在网络中传输,并且在校验和中包含伪报头的目的是为了防止目的主机错误地接收存在路由的
错误数据报。

16位紧急指针:仅在 URG = 1 时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据),即指出了紧
急数据的末尾在报文中的位置,注意:即使窗口为零时也可发送紧急数据。

如果 URG 为 1 ,则紧急指针标志着紧急数据的结束。其值是紧急数据最后 1 字节的序号,表示报文段序号的偏移量。例如,如果

报文段的序号是 1000,前 8 个字节都是紧急数据,那么紧急指针就是 8 。紧急指针一般用途是使用户可中止进程。



最后还有一个很重要的问题? URG和PSH之间到底有什么区别?

他们之间虽然看起来都紧急的数据处理位,但是只是处理方法不同。URG的紧急数据仅在报文内,而PSH的紧急数据还在接受缓冲
区内