IP包、TCP报文、UDP数据段格式的汇总

一、IP包格式

IP数据包是一种可变长分组,它由首部和数据负载两部分组成。首部长度一般为20-60字节(Byte),其中后40字节是可选的,长度不固定,前20字节格式为固定。数据负载部分的长度一般可变,整个IP数据包的最大长度为65535B。

1、版本号(Version)

长度为4位(bit),IP v4的值为0100,IP v6的值为0110。

2、首部长度

指的是IP包头长度,用4位(bit)表示,十进制值就是[0,15],一个IP包前20个字节是必有的,后40个字节根据情况可能有可能没有。如果IP包头是20个字节,则该位应是20/4=5。

3、服务类型(Type of Service  TOS)

长度为8位(bit),其组成:前3位为优先级(Precedence),后4位标志位,最后1位保留未用。优先级主要用于QoS,表示从0(普通级别)到7(网络控制分组)的优先级。标志位可分别表示D(Delay更低的时延)、T(Throughput 更高的吞吐量)、R(Reliability更高的可靠性)、C(Cost 更低费用的路由)。

TOS只表示用户的请求,不具有强制性,实际应用中很少用,路由器通常忽略TOS字段。

4、总长度(Total Length)

指IP包总长度,用16位(bit)表示,即IP包最大长度可以达216=65535字节。在以太网中允许的最大包长为1500B,当超过网络允许的最大长度时需将过长的数据包分片。

5、标识符(Identifier)

长度为16位,用于数据包在分段重组时标识其序列号。将数据分段后,打包成IP包,IP包因走的路由上不同,会产生不同的到达目地的时间,到达目地的后再根据标识符进行重新组装还原。该字段要与标志、段偏移一起使用的才能达到分段组装的目标。

6、标志(Flags)

长度为3位,三位从左到右分别是MF、DF、未用。MF=1表示后面还有分段的数据包,MF=0表示没有更多分片(即最后一个分片)。DF=1表示路由器不能对该数据包分段,DF=0表示数据包可以被分段。

7、偏移量(Fragment Offset)

也称段偏移,用于标识该数据段在上层初始数据报文中的偏移量。如果某个包含分段的上层报文的IP数据包在传送时丢失,则整个一系列包含分段的上层数据包的IP包都会要求重传。

8、生存时间(TTL)

长度为8位,初始值由操作系统设置,每经过一个路由器转发后其值就减1,减至0后丢弃该包。这种机制可以避免数据包找不到目地时不断被转发,堵塞网络。

9、协议(Protocol)

长度为8位,标识上层所使用的协议。

10、首部校验和(Header Checksum)

长度为16位,首部检验和只对IP数据包首部进行校验,不包含数据部分。数据包每经过一个中间节点都要重新计算首部校验和,对首都进行检验。

11、源IP地址(Source IP)

长度为32位,表示数据发送的主机IP。

12、目的IP地址(Destination IP)

长度为32位,表示数据要接收的主机IP。

13、选项字段(Options)

长度为0-40字节(Byte),主要有:安全和处理限制(Security)、记录路径(Record Route)、时间戳(Timestamps)、宽松源站选路(Loose Source Routing)、严格的源站选路(Strict Source Routing)等。

二、TCP报文

TCP报文由首部和数据两部分组成。首部一般由20-60字节(Byte)构成,长度可变。其中前20B格式固定,后40B为可选。

因为,TCP报文还得传给下层网络层,封装成IP包,而一个IP包最大长度为65535,同时IP包首部也包含最少20B,所以一个IP包或TCP包可以包含的数据部分最大长度为65535-20-20=65495B。

TCP报文中数据部分是可选的,即TCP报文可以不包含数据(同理IP包也可以不包含数据)。不含数据的TCP报文通常是一些确认和控制信息类的报文,如TCP建立连接时的三次握手和TCP终止时的四次挥手等。

1、源端口号(Source Port)

长度为16位,指明发送数据的进程。

2、目的端口号(Destination Port)

长度为16位,指明目的主机接收数据的进程。

3、序号(Sequence Number)

也称为序列号,长度为32位,序号用来标识从TCP发送端向接入端发送的数据字节流进行编号,可以理解成对字节流的计数。

4、确认号(Acknowledgement Number)

长度为32位,确认号包含发送确认的一端所期望收到的下一个序号。确认号只有在ACK标志为1时才有效。

5、首部长度

长度为4位,用于表示TCP报文首部的长度。用4位(bit)表示,十进制值就是[0,15],一个TCP报文前20个字节是必有的,后40个字节根据情况可能有可能没有。如果TCP报文首部是20个字节,则该位应是20/4=5。

6、保留位(Reserved)

长度为6位,必须是0,它是为将来定义新用途保留的。

7、标志(Code Bits)

长度为6位,在TCP报文中不管是握手还是挥手还是传数据等,这6位标志都很重要。6位从左到右依次为:

    • URG:紧急标志位,说明紧急指针有效;
    • ACK:确认标志位,多数情况下空,说明确认序号有效;
    • PSH:推标志位,置位时表示接收方应立即请求将报文交给应用层;
    • RST:复位标志,用于重建一个已经混乱的连接;
    • SYN:同步标志,该标志仅在三次握手建立TCP连接时有效
    • FIN:结束标志,带该标志位的数据包用于结束一个TCP会话。

    8、窗口大小(Window Size)

    长度为16位,TCP流量控制由连接的每一端通过声明的窗口大小来提供。

    9、检验和(Checksum)

    长度为16位,该字段覆盖整个TCP报文端,是个强制性的字段,是由发送端计算和存储,到接收端后,由接收端进行验证。

    10、紧急指针(Urgent Pointer)

    长度为16位,指向数据中优先部分的最后一个字节,通知接收方紧急数据的长度,该字段在URG标志置位时有效。

    11、选项(Options)

    长度为0-40B(字节),必须以4B为单位变化,必要时可以填充0。通常包含:最长报文大小(MaximumSegment Size,MSS)、窗口扩大选项、时间戳选项、选择性确认(Selective ACKnowlegement,SACK)等。

    12、数据

    三、UDP数据段

    UDP数据段格式比较简单,如下:

    UDP数据报由首部和数据两部分组成,其中首部只有8B(字节)。

    1、源端口号(Source Port)

    长度为16位,指明发送数据的进程。

    2、目的端口号(Destination Port)

    长度为16位,指明目的主机接收数据的进程。

    3、长度

    长度为16位,该字段值为报头和数据两部分的总字节数。

    4、检验和(Checksum)

    长度为16位,UDP检验和作用于UDP报头和UDP数据的所有位。由发送端计算和存储,由接收端校验。

    5、数据

    时间: 2024-10-11 21:51:57

    IP包、TCP报文、UDP数据段格式的汇总的相关文章

    TCP和UDP数据包大小限制

    1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP或UDP包{Data}}}     不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后

    使用Python计算IP、TCP、UDP校验和

    1.1 ip校验和的计算 Ip校验是针对ip头部的,即仅校验ip头部,而对于ip数据部分的校验,则交由相应的四次协议来保证, ip 头部中校验和字段为16bit. 计算原理如下: 1.把校验和字段设置为0 2.计算ip头部中所有16bit的字之和 3.将2中得到的和按位取反,得到校验和. 1.2 tcp校验和的计算原理 对于ip层协议来说,其校验和只要计算ip头即可,那相对的,对于四层协议来说,其校验和则需要计算四层头部与四层数据. tcp校验需要将ip伪首部.tcp报头.tcp数据分为16位的

    (转)iOS 各种网络编程总结--进程、线程、Socket、HTTP、TCP/IP、TCP和UDP

    ######################################################### 进程与线程 进程和线程都是由操作系统分配和调度的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性. 进程是一块包含了某些资源的内存区域.操作系统利用进程把它的工作划分为一些功能单元.进程中所包含的一个或多个执行单元称为线程(thread).进程还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更

    Sendip 命令行发包工具,支持IP、TCP、UDP等

    Sendip是一个linux平台的命令行发数据包工具,目前(2018年2月)支持的协议有ipv4.ipv6.icmp.tcp.udp.bgp.rip.ntp,作者表示其他协议将会后面支持,当他有空写的时候.Sendip很强大,它支持自定义头部和数据(也就是IP层以上的整个包),没有过多的限制,所以连源IP都可以随意写,而且里面也提供了一些默认的选项,可以择需而发,非常方便.又因为它是命令行的,还支持从文件中直接读取整个packet发送,所以适合用脚本批量测试.它只是个发包工具,对于发出去的包,收

    网络中TCP、IP、MAC、UDP的头部格式信息

    TCP头部格式 字段名称 长度(比特) 含义 TCP头部(20字节~) 发送方端口号 16 发送网络包的程序的端口号 接收方端口号 16 网络包的接收方程序的端口号 序号(发送数据的顺序编号) 32 发送方告知接收方该网络包发送的数据相当于所有发送数据的第几个字节 ACK号(接收数据的顺序编号) 32 接收方告知发送方接收方已经收到了所有数据的第几个字节.其中ACK是acknowledge的缩写 数据偏移量 4 表示数据部分的起始位置,也可以认为表示头部的长度 保留 6 该字段为保留,现在未使用

    TCP/IP协议栈与数据包封装+TCP与UDP区别

    ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用.如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比示意图. TCP/IP参考模型的层次结构 TCP/IP协议栈是美国国防部高级研究计划局计算机网(Advanced Research Projects Agency Network,ARPANET)和其后继因特网使用的参考模型.ARPANET是由美国国防部(U.S.Department of Defense,Do

    TCP、UDP、IP报头结构体分析

    TCP数据段格式  TCP是一种可靠的.面向连接的字节流服务.源主机在传送数据前需要先和目标主机建立连接.然后,在此连接上,被编号的数据段按序收发.同时,要求对每个数据段进行确认,保证了可靠性.如果在指定的时间内没有收到目标主机对所发数据段的确认,源主机将再次发送该数据段. 下图为TCP头部结构: ●源.目标端口号字段:各占16比特.TCP协议通过使用"端口"来标识源端和目标端的应用进程.端口号可以使用0到65535之间的任何数字,但是这些端口号已经被分为公认端口.注册端口和动态/私有

    初入网络系列笔记(2)TCP和UDP

    一.借鉴说明,本博文借鉴以下博文 1.BlueTzar,TCP/IP四层模型, http://www.cnblogs.com/BlueTzar/articles/811160.html 2.叶剑峰,漫谈TCP, http://www.cnblogs.com/yjf512/p/5909031.html 3.bizhu,TCP和UDP的区别(转), http://www.cnblogs.com/bizhu/archive/2012/05/12/2497493.html 4.任智康,TCP/IP.Ht

    以太网帧、TCP与UDP段以及IP数据报格式总结

    传输层及其以下的机制由内核提供,是操作系统的一部分,应?层由?户进程提供应?层数据通过协议栈发到?络上时,每层协议都要加上?个数据?部(header),称为封装.不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在?络层叫做数据报(datagram),在链路层叫做帧(frame). 1.以太网帧格式 ?源地址和?的地址是指?卡的硬件地址(也叫MAC地址),长度是48位,是在?卡出?时固化的.Linux下可以?ifconfig命令看?下,"HWaddr 00:15:F2:14:9