IP
- IPv4(Internet Protocol)数据报首部格式
- 版本
- 首部长度
- 可变部分
- 区分服务
- 总长度
- 标识、标志、片偏移
- 生存时间
- 协议
- 首部检验和
- 源IP地址和目的IP地址
- NAT 机制(**N**etwork **A**ddress **T**ranslator)网络地址转换
- NAT将数据的转发由**私网**转向**公网**
- NAT将数据的转发由**公**网转向**私**网
- CIDR
- 数据帧格式
IPv4(Internet Protocol)数据报首部格式
版本
版本:占4bit,表示IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4
首部长度
与TCP中的首部长度含义相同,表示IP数据报 首部 的长度。该字段的取值同样以 4字节 为单位
- 最小十进制取值为5(0101),表示IP数据报首部只有20字节的固定部分
- 最大十进制取值为15(1111),表示IP数据报首部包含20字节的固定部分和最大40字节的可变部分
可变部分
-
可选字段
主要功能用来:支持排错、测量及安全等措施。但这也增加了每一个路由器处理IP数据报的开销,实际上可选字段很少被使用。
-
填充
使得添加功能后的数据报能够被4整除(因为首部长度是以4字节为单位的)
区分服务
区分服务:占8bit,用来获得更好的服务。但实际上一直未被使用过
每一位代表1个服务,分别是:3位优先权字段(已弃用);4位TOS字段;1位保留字段(必须置为0)
4位TOS字段分别为:
最小延时
该数据报在传输过程中,会追求延时时间最小的路线。也就是从发送到接收的一个最小时间最大吞吐量
单位时间内,传输的数据(进出),尽可能的多最高可靠性
IP并非像TCP一样提供强可靠性,但内部也有一些机制来减少丢包的概率最小成本
成本:指硬件设备上的开销
总长度
总长度:占16bit,表示IP数据报的总长度(首部+数据载荷)
标识、标志、片偏移
这三个字段共同用于IP数据报分片
数据分片:
每一种数据链路层协议都规定了帧的数据载荷的最大长度(帧的数据载荷部分长度是有上限的),称为最大传输单元 MTU。
例如:以太网的数据链路层就规定 MTU = 1500 字节
如果某个IP数据报的总长度超过了 MTU,则无法封装成帧,需要将原IP数据报分片为更小的IP数据报,再将各分片后的IP数据报封装成帧。分成多个IP数据报,每个IP数据报携带一个TCP数据报的部分数据
标识:占16bit,标识分片数据报是否属于同一个数据报。即:哪几个IP数据报的载荷应该组合在一起。
标志:占3bit,每个bit都有不同的含义:
DF位:1 表示该数据报不允许分片;0 表示允许分片
MF位:1 表示 “后面还有分片”;0 表示“这是最后一个分片”
保留位:必须置0
片偏移:占13bit,指明分片数据报的数据载荷部分偏移了多少。即:描述了分片数据报的先后顺序。片偏移以8个字节为单位
注:上述的 “拆包” 过程都是 系统内核 自动完成的,程序员通过软件无法干预。
生存时间
生存时间(TTL):占8bit,现在以 “跳数” 为单位,每经过一个路由器转发该IP数据报,TTL值就 -1,若 不为0 则转发;若 为0 则丢弃该包
这个字段的作用:防止因为路由环路,导致该数据报在路由环路中永久兜圈
注:TTL一般设置为 32/64,32其实就够用了
协议
协议:占8bit,指明该IP数据报携带的是何种协议数据
假设协议字段 = 6,说明该IP数据报的数据载荷部分是TCP报文段
首部检验和
首部检验和:占16bit,用于检测IP数据报的首部在传输过程中是否出现差错。比CRC检验码简单,称为 “因特网检验和“。(只校验首部,数据载荷部分并不需要,因为像TCP协议已经自带了校验流程)
注:IP数据报每经过一个路由器,路由器都要重新计算首部检验和
源IP地址和目的IP地址
源IP地址 和 目的IP地址:各占32bit,标明源主机的IP地址和接收端的IP地址
NAT 机制(Network Address Translator)网络地址转换
NAT将网络IP地址分为了两大类:私网IP 和 公网IP
私网IP段有3个:
-
10.0.0.0 ~ 10.255.255.255
-
172.16.0.0 ~ 172.31.255.255
-
192.168.0.0 ~ 192.168.255.255
其余的就都是公网IP了
公网上的设备IP都是唯一的,私网IP只需要保证局域网内部IP不重复即可
所以这就导致:
不同局域网内的设备,彼此间无法访问(因为IP地址会重复冲突)
局域网设备访问公网,就需要对局域网设备的 IP 进行地址转换(NAT的核心)
公网设备无法主动访问局域网设备(同样的还是因为IP会冲突)
NAT将数据的转发由私网转向公网
进行如图所示的替换,本质上就是让一个公网IP能够对应多个设备,从而起到节省IP地址的效果。
注:只有网关路由器才会进行替换,普通路由器也可能是局域网的一部分。
NAT将数据的转发由公网转向私网
网关路由器内部会维护一个表,在私网主机发送数据包时,这个表就会记录该数据包的各种信息(如替换前的源IP地址、替换后的IP地址、目的IP地址、源端口号、替换后的端口号、目的端口号),当服务器发送数据过来时,网关路由器就会根据这些信息对照,找到对应的主机转发。
路由器会读取IP地址和端口号,所以说路由器是工作在网络层和传输层的设备
注:如果多台主机访问的服务器是同一个服务器,才会替换端口号
CIDR
127.* ;作为本地环回测试地址
主机号 为 “全 0” 的地址是网络地址(代表整个网络本身,又称为 “网段”)
主机号 为 “全 1” 的地址是广播地址
注:往广播地址上发消息,那么该广播地址对应的局域网中所有的设备都能收到该消息,但所发送的数据必须是UDP的。(本质上是无连接)
数据帧格式
-
目的地址和源地址:指MAC地址
IP地址侧重全局的转发(从起点到终点)
MAC地址侧重局部的转发(相邻的设备)
-
类型:表示载荷数据的含义
-
ARP:ARP协议能够通过 IP地址 获取到设备的 MAC地址,在路由器/交换机中构建一个转发表
-
RARP:通过 MAC地址 获取到 IP地址
-
帧长度限制:以太网数据载荷长度最小46字节,最大1500字节(最大传输单元称为 “MTU”)