TPC/IP协议格式

IP 格式

IP (Internet Protocol)格式

  • 4位版本号:标识了数据包的IP版本号。除了IPv4与IPv6以外,其他的版本号仅作为“历史产物”而存在;
  • 4位首部长度:头部长度,表示IP报头的长度,单位为32位字长,即4字节。IP报头的长度范围为20字节-60字节。
  • 8位服务类型:用来指定特殊的数据包处理方式。服务类型字段实际上被划分为两个子字段:3位优先权和5位ToS (Type of Service)。最几年,这个服务类型字段被作为区分服务(Diffserv)的一部分被重新定义:开始的6位现在构成区分代码点(DiffServ Code Point,DSCP),可定义64个不同的服务类型;后2位作为显示拥塞通知(Explicit Congestion Notification, ECN),这些位可用于拥塞信号(ECN=11)。
  • 16位总长度:数据包总长度,单位为字节。接收者用IP数据包总长度减去IP报头长度,就可以确定数据包的有效载荷的大小。IP数据包的最大长度是65535字节。
  • 16位标识符:通常与标记字段(Flag)、片偏移字段一起用于数据包的分段。如果数据包原始长度超过数据包所要经过的数据链路的最大传输单元(MTU),那么必须将数据包分段为更小的数据包,每个小的数据包打上相同的标识。
  • 3位标记(Flag)第1位没哟使用;第2位为不分段位(DF),DF被置1,表示路由器不能对数据包分段(如果数据包由于不能被分段而未能被转发,那么路由器将丢弃该数据包,并想源点发送错误消息。这一功能可以在网络上用于测试MTU值);第3位表示还有更多的分段(MF)位,一个数据包的最后一个分段MF位被置为0,其他分段均被置为1.
  • 13位分段偏移(Fragment Offset):单位为8个八位组(即8字节),用于分段起始点相对报头起始点的偏移量。由于分段到达时可能错顺序,所以分段偏移字段可以使接收者按照正确的顺序重组数据包(如果一个分段在传输中丢失,则必须在网络中同一点对整个数据包重新分段并重新发送)。
  • 8位生存时间(Time To Live, TTL):最初创建数据包时TTL即被设定为某个特定的值(建议缺少值为64),数据没过一个路由器,TTL值降低(减1)。当TTL值为0时,路由器将数据包丢弃并向元点发送错误信息 [1]
  • 8位协议(Protocol):协议字段指定了数据包中信息的类型。主机到主机或传输层协议的“地址”或协议号。当前已分配了100多种不同的协议号,如ICMP、IGMP、TCP、UDP、GRE、IGRP与OSPF等。
  • 16位报头校验和(Header Checksum):校验和不计算被封装的数据。报头检验和包含一个16位二进制补码和,这是数据包的发送者计算得到的。接收者将连同原始校验和重新进行16位二进制补码计算。如果数据包传输中没有发生错误,那么结果应该是16位全为1。由于TTL逐渐较低,所以每个路由器都必须重新计算校验和。
  • 32位源地址(Source Address):数据包的源点IP地址。
  • 32位目的地址(Destination Address):数据包的目的地IP地址。
  • 可选项(Options):主要用于测试,常用的可选项包括:松散源路由选择、严格源路由选择、记录路由、时间戳等。
  1. 像Linux中的traceroute命令这样的一些跟踪工具使用的是TTL字段。如果路由器被告知需要追踪到达的主机地址是202.112.154.27的路径,路由器将发送3个数据包,其中TTL值被设置为1;第一台路由器将会把TTL值减小到0,而且在丢弃数据包的时候向源点发送错误信息。源点路由器通过阅读错误信息从而得知发送错误信息的路由器的地址,即为路径上的第1台路由器;再一次被路由器发送的数据包的TTL值被设置为2,第一台路由器将TTL值减小到1,第2台路由器将TTL值减1后为0,此时源点路由器将会收到第2台路由器发送的错误信息。一次类推,直到目的地被发现。最终,沿着网络路径所有的路由器都会被标识出来。

TCP格式

TCP(Transmission Control Protocol)使用了三种机制在无连接的服务之上,实现了面向连接的服务:

  • 使用序列号对数据包进行标记。
  • 使用确认、校验和定时系统提供可靠性。
  • 使用窗口机制调整数据包的流量。
  • 16位源端口(Source Port)与16位目的端口(Destination Port):为封装的数据指定源于目的应用程序。RFC1700描述了所有常用的和不常用的端口号。应用程序的端口号与应用程序所在主机的IP地址统称为套接字(socket)。在网络中套接字唯一地标识每一个应用程序。
  • 32位序列号(Sequence Number):序列号确定了发送方发送的数据流中被封装的数据所在位置。例如,如果本段数据的序列号为1343,且数据长度为512个八位组,则下一个数据段的序列号应该为1343 + 512 + 1 = 1856
  • 32位确认号(Acknowledge Number):确认号确定了源点下一代希望从目标接收的序列号。如果主机收到的确认号与它下一次打算发送的序列号不符,那么主机将获悉丢失的数据包。
  • 4位报头长度(Header Length):单位为32位字。由于可选字段的长度可变,所以这一字段标识出数据的起点。
  • 6位保留(Reserved):通常设置为0。
  • 8位标记(Flag):包含8个1位的标记,用于流与连接控制。它们从左到右分别是:拥塞窗口减少(Congestion Window Reduced, CWR)、ECN-Echo(ECE)[2]、紧急(URG)、确认(ACK)、弹出(PSH)、复位(RST)、同步(SYN)与结束(FIN)。
  • 16位窗口大小(Wiindow Size): 主要用于流控。窗口大小指明了自确认号指定的八位组开始,接收方在必须停止传输并等待确认之前发送方可以接收的数据段的八位组长度。
  • 16位校验和(Checksum):包括报头与被封装的数据。
  • 16位紧急指针(Urgent Pointer):此字段仅当URG标记置位时才被使用。这个16位数被添加到序列号上用于指明紧急数据的结束。
  • 可选项(Options): 用于指明TCP发送进程要求的选项。为保证报头的长度是32个八位组的倍数,所以使用0填充该字段的剩余部分。

2. ECE用于回传拥塞指示(即指示发送者应减少信息发送量),CWR用于确认接收到了拥塞指示回应。

udp格式

User Datagram Protocol格式

  • 16位源端口(Source Port)与16位目的端口(Destination Port):与TCP一样。
  • 16位UDP长度: 单位为八位组,整个段长度。
  • 16位校验和: 可选。不使用时,此字段全部设置为0。

Was this helpful?

0 / 0

发表回复 0