LWIP的IP协议笔记
IP协议简介
IP协议是TCP/IP协议族的基石,它为上层提供无连接、不可靠的服务
无连接:指IP通信双方都不长久的维持对方的任何信息。这表示上层协议每次发送数据,都需要明确指出对方的IP地址
不可靠:指IP协议不能把IP数据报准确到达接收端,只是会尽最大努力。一旦发送失败,就通知上层协议,而不会试图重发
描述:总路线主机H1 到 主机H2
目的地址IP2 就是主机H2的地址
源地址IP1 就是主机H1的地址
传输 路径 | 网络层 写入IP数据报首部地址 | 数据链路层 写入MAC帧首部地址 | ||
源地址 | 目的地址 | 源地址 | 目的地址 | |
H1->R1 | IP1 | IP2 | HA1 | HA3 |
R1->R2 | IP1 | IP2 | HA4 | HA5 |
R2->H2 | IP1 | IP2 | HA6 | HA2 |
为什么需要MAC地址和IP地址?
①数据传输过程中,源IP地址和目标IP不变
②路由器根据目标IP地址的网络号进行路由
IP地址分为A、B、C、D、E类地址
总结:
MAC地址用来数据转发,而IP地址用来确认路标
mac的作用则是实现直连的两个设备之间的通信,而IP则负责在没有智联的两个网络之间进行通信传输;
IP分片
MTU最大1500字节;
当数据传输大于1500字节的时候就需要数据分片
一、抓取 IP协议的内容
Wireshark抓包工具
可以看到每个数据包的所有bit
并可以分析数据
二、IP协议字段解析
version | 版本 |
header length | 头⻓度 |
differentiated service field | 差分服务区域 |
total length | 总⻓度 |
identification | 标识位 |
flags | 标志位 |
fragment offset | 偏移量 |
time to live | ⽣存周期 |
Protocol | 上层协议 |
Header checksum | 校验和 |
Source | 源IP地址 |
destination | ⽬的IP地址 |
数据包框图
三、IP协议处理分片
3.1、MTU是什么最⼤传输单元,
默认是1500字节
指的是⼀个数据包从⽹卡发出时,最⼤的total length的⻓度
如果⼤于1500字节就会进⾏分⽚
3.2、理解identification 、flags 、fragment offset 这些字段 的作用
1,identification 字段:
⽤来标识⼀个分⽚ ,例如:4000字节(不包含首部的4000字节)需要分⽚,分成1500, 1500, 1060,三⽚ ,这些数据包的identification字段都是⼀致的
多出来的60 是多的三个包控制段3*20
2,flags 字段:
Reserved bit | 保留位,暂时没作⽤ |
Don’t fragment | DM位,该位置1,说明该数据包不能被分⽚(⽤来测试接⼝的MTU⼤⼩的) |
More fragment | FM位,如果是最后⼀个分⽚,就⽤0来表示,不是最后⼀个分⽚就⽤1来表示 |
3,fragment offset 字段:
fragment offset也叫偏移量,偏移的计算是payload部分payload指的是去掉⼆层头部和三层头部后的内容1500字节的分⽚,指的是IP+payload的⼤⼩
加上E2,整个数据包抓包看到的⼤⼩是1514字节 ,这点不用理会
下图的数据包,是首部20字节加数据3980的4000字节
888:标识符
0/1:尾部识别
185/370:是整个大包的数据偏移量 185是从3980数据的第185个开始的字节