【网络层】IP因特网协议解析

文章目录

    • IP报文结构
      • 分片
      • [TTL:time to live 生存时间 (生命值)](#TTL:time to live 生存时间 (生命值))
      • [Protocol 协议](#Protocol 协议)

网络层位于数据链路层与传输层之间。网络层中包含了许多协议,其中最为重要的协议是IP协议。网络层提供IP路由功能。

IP报文结构

  • 版本version: 标明IP报文的版本( v4 或 v6)IPV4是0100,IPV6是0110,大小否是四个字节(半位)
  • 头部长度header length: IPv4头部长度(最小为20B,最大为60B)。IPV6中不存在这个字段,其头部长度固定为40字节,IPV4的两倍。
  • 总长度total length: 头部长度和数据长度

分片

当数据包的大小超过数据链路层的MTU就需要分成多份数据包传输

标志 identification: 用来标识同一个数据包。大小16位,在三层把流量区分开来,同一种流量在网络层的标识符就是相同的,用于流量分片。(分片之后依靠该字段重组)
标识符 flags :

  • 保留 :未使用
  • 分段:置位表示不能分片 (遇到超过MTU的直接丢弃)1代表数据未分片,为0则未分片
  • 更多分段:置位标识还有分片(未置位表示这是最后一个分片)

片偏移 fragment offset: 说明该数据包在重组后的位置。分片偏移,大小13位,用来重排序。第一个分片数据报文偏移为0,第二个为第一个数据报文的大小,以此类推,第n个为前n-1个数据报文的大小之和。

电脑命令行运行:ping 192.168.122.156 -l 1600 使用wireshark抓包

IPv4分包信息解析:
IPV4头部长度 Header Length: 20 bytes
总长度为1500 : ICMP大小+IPV4头部长度=1480+20=1500
更多分段为Set: 表示后面有分段
片偏移 fragment offset为0: 表示这个数据是从0开始
上层协议为 ICMP,但是上层显示只有数据没有ICMP头部信息,数据大小为1480字节。


ICMP reply包解析IP头部:
IPV4头部长度 Header Length: 20 bytes
总长度: 548, ICMP大小+IPV4头部长度=528+20=548
更多分段: 为0,表示后面没有分段,这是最后一个分段
片偏移 fragment offset: 为1480,表示这个数据是从1480开始

[2 IPv4 Fragments (2008 bytes): #159425(1480), #159426(528)] 这字段里有标出有哪些分段:
第一段帧159425的负载大小为1480字节,等于ICMP最大负载长度(1480字节)
第一段帧159426的负载大小为528字节,等于ICMP负载长度(520字节) + ICMP首部长度(8字节)
分片前 ICMP报文长度为2000字节 = 1480字节 + 520 字节

从抓包信息可知,分片段的ICMP没有首部。

注:ping过大的包,有些设备是不会回复,显示超时。原因在于中间设备或者服务器都会有ping保护机制的,防止数据包过大过快的现象


TTL:time to live 生存时间 (生命值)

Time to Live大小8位,用于设置一个数据报文可经过的路由器的数量上限,可路由的次数,IP数据报文防环的底线,单位为s对应生存跳数,而不是跳数。最大生命值有255,64,128等值。

  • 防止数据包在网络中无休止的传递(防环)
  • 每经过一次路由(路由转发)TTL值就会减1
  • 当TTL值=0,丢弃数据包,并告诉源地址

利用TTL特性,可以实现路由跟踪技术,排错的重要方法之一

  • 相关命令:ping -I
  • tracert命令

    tracert会一次发送3个igmp echo request报文
    中间有很多 * 和超时,是因为有些服务器接收到太多ICmp包不做回应,或者是做了防ping处理不回复。
    通过ip地址我们就能清晰的看到这个包是通过哪些路由设备到达jd服务器。

搭建拓扑观察 TTL防止环路

AR1 配置

system-view

interface GigabitEthernet 0/0/0

ip address 10.0.0.1 24

q

ip route-static 8.8.8.8 32 10.0.0.2
AR2 配置

system-view

interface GigabitEthernet 0/0/0

ip address 10.0.0.2 24

q

ip route-static 8.8.8.8 32 10.0.0.1

实验验证:AR1 命令行 tracert -d 8.8.8.8 会发现环路

查看抓包信息

最后ttl 递减到0后,ICMP中Type值为11,Code为0


Protocol 协议

标识上一层的协议号(0-255)8为大小,用于识别封装的协议是否为一种传输层协议。

协议号
1.ICMP 因特网控制报文协议
2.IGMP 因特网组报文协议
6.TCP 传输控制协议
17.UDP 用户数据报协议
41.IPV6 因特网v6
47.GRE 通用路由封装协议
89.OSPF 开放式最短路径优先
103.PIM 协议无关报文
112.VRRP 虚拟路由冗余协议

首部检验和: 占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
源地址: 占32位。
目的地址: 占32位。
可选字段: 0~40B,用来支持排错、测量以及安全等措施。
填充: 全0,把首部补成4B的整数倍。

相关推荐
假客套几秒前
2024 同一个网段,反弹shell四种方法【linux版本】bash、python、nc、villian反弹shell图解步骤
linux·运维·服务器·网络安全·反弹shell
迈威通信43 分钟前
迈威通信助力海上探测,守护蓝色疆域
网络·自动化·能源
小丑西瓜6661 小时前
MySQL库操作
linux·服务器·数据库·mysql
荒川之神1 小时前
RHEL/CENTOS 7 ORACLE 19C-RAC安装(纯命令版)
服务器·数据库·oracle
黑龙江亿林等保3 小时前
云ECS服务器:哈尔滨三级等保的云计算解决方案
运维·服务器·云计算
爱吃喵的鲤鱼5 小时前
linux 用C语言编写自己的myshell
linux·运维·服务器·c语言·算法
涔溪7 小时前
HTTP TCP三次握手深入解析
网络·tcp/ip·http
憨子周7 小时前
2M的带宽怎么怎么设置tcp滑动窗口以及连接池
java·网络·网络协议·tcp/ip
三菱-Liu8 小时前
三菱MR-J4-B伺服连接器和信号排列
网络·驱动开发·硬件工程·制造·mr
WeeJot嵌入式8 小时前
网络安全:挑战、策略与未来趋势
网络