IP协议:互联网协议,用于实现数据不可靠面向无连接的通信,实现三层数据封装与IP寻址(包含ip地址),数据包内容相关标识解析如下:

版本号version:

表示ip协议版本,目前有4和6版本,网卡在接收到数据包的时候,会按此版本号来进行ip-v4,或ip-v6进行数据解包,如果版本号不对,那么数据将无法正常解包,就导致数据丢失。

头部长度/总长度 Header Length-20bytes / Total Length- 67:

头部长度(也就是ip头)默认为20个字节,最大是60字节,有了这两个值,就能清楚的知道数据量,在解包的时候也方便的进行处理,避免拆错导致数据丢失,另外由于头部长度在某些数据包里面也会有所变化不是默认的20字节,所以也就不能直接按20字节直接拆。

结论:头部长度是为了解包用,而总长度是为了可以计算数据量之用。

DSCP/Tos:服务质量技术,用于实现流量标记

dscp/tos也叫区分服务符(如:0x00\0x11……),就是ip数据包,也是有vip的概念,当流量大比较拥堵的时候,dscp为高级别的ef,就会优先处理,为低级别00时,就会等待迟些再处理

TLL生存时间 :

ping命令会显示这个值,不同的操作系统的这个值也都会不一样,ttl有以下特性:

1、每经路由一“跳”,TTL减一,路由器在接收到数据包时,就会将ttl减一后再转发;

2、当路由器收到一个ttl=0的数据包时,则会宣告此数据包死亡并丢弃;

3、本质是为了数据包的“环路”问题,当数据在传输的时候可能某些情况会导致一直在两个路由器中来回转发(A路由发给B路由,B路由又发回A路由),这样就进入了死循环。

有了ttl之后,就能避免数据包占用宽带及硬件资源消耗。

类型值|协议号|端口号:

都是用于标志上层协议,方便接收方实现数据的解封装,也称为协议之间的“分用”

主要让接收者能用适当的协议或程序来打开数据包,比如ip传输层如果没有protocol=6的这个标识指明为tcp协议,那么就可能用udp进行解包,而导致数据包错误解封,同理在tcp的下一层,如果没有port端口指明80,那么就有可能用telnet程序对80这个数据包进行处理而出现错误,无法正常处理。

头部检验和header checksum _status:

通过检验和(奇偶算法),可以让接收方确认数据有没有被改,验证是否为原始完整的数据包。以太网协议会在数据包后面加入fcs(冗余检验码)来实现此功能,抓包是没有显示出来的,当检验和不一样的时候,数据就会直接丢弃。

源目IP地址:

用于标记源ip及目标ip

分片原理-标志|标识|偏移位:

MTU:最大传输单元(以太网1500bytes,物理层硬件原因,有些路由会自动拆包转发)

标识:identification-用于数据分片时,标记数据包的唯一值,当一个数据包拆分成多个分片的时候,其标志id是一样的,如0x6149(0)

标志:flags-记录是否有分片,用于接收方明确数据是否完全接收了。flags共有3位,分别是RB(保留位,暂没作用),DF(不要分片位)当DF为1时为不要分片,表示告知数据途径设备不要分片。MF(分片位)为0表示没有分片,1表示有分片,如果接收到的数据分片检测到MF位为1就代表着数据还没有接收完成

偏移:fragment offset-记录每个 分片距离ip头部的位置,用于接收方在接收到数据后能有序重新组装,每个数据分片发送到达的时间会不一样,在接收方接收到数据后,有可能跟发送时的顺序是不一样的,有可能是按4-2-1-3的分片接收到了。这个时候按4213的分片重组肯定是不对的,那么就可以依据偏移量进行有序重组数据包,保证数据包的正常组装。