网络层
IP 提供了无连接的、尽力而为的数据报交付服务。
尽力而为是指不保证数据报能够成功到达目的地。当缓冲区满时,IP 通常直接将后续的数据丢弃
无连接指 IP 协议将所有的数据报当作独立的单元处理
IPv4
IP 分组是由首部和数据部分组成,其中固定长度为 20B , 变长部分最长为 40B ,因此,一个 IP 的分组头部长度为 20 ~ 60B。其头部组成如下:
IP 头部字段的解释如下:
头部长度:单位为 4B。因此头部长度最大为 \(4B\times(2^4-1)=60B\)
总长度:单位为字节。IP 数据报的总长度。因此 IP 数据报最大长度为 \(1B\times(2^16-1)=65535B\)
当一个 IPv4 数据报被分片时,每个分片自身仍然是一个独立的 IP 数据报。总长度反应每个分片的长度。
标识:用于分片
TTL:路由器在转发时将此值减小一,减小到 0 时丢弃
TTL 大小 [
1122
] 建议值为 64,但是 128 抑或是 256 也不少见
标志:3 位,最高位不用,其次两位分别是
DF (Don’t Fragment)
、MF (More Fragment)
。片偏移:
单位为 8B
,每个分片的数据部分长度一定为 8B 的整数倍。协议:用来表示该分组的上层协议是什么,
6 为 TCP
,17 为 UDP
。校验和: IP 的校验和只计算 IPv4 的头部校验和
由于 IP 头部大小一般为 20B ,故对于一个 IPv4 的数据报而言,其第一个字节一般为 0x45 |
数据报的长度受 MTU (Maximum Transmission Unit)
所限制。以太网的 MTU 为 1500B,大多数广域网不超过 576B。当数据报的总长度大于 MTU 后,若 DF = 0 ,则进行分片,否则丢弃数据报并发送 ICMP 差错报文。被分片的数据报在目的主机进行组装,若被分片的分组不是最后一个,则 MF = 1 。
需要注意的是:
分片不会在中间路径上被组装
被分片后数据报数据部分长度为 8B 的整数倍
被分片的数据报的最后一片 MF = 0,其他均为 1
TCP/IP 头部数据 在传输的时候按照大端序进行传输,因此大端序也被称为 网络字节序
IP 地址分类
IPv4 地址长度为 32B,按照 点分十进制
记法,每 8 位放到一起,共分 4 组。IP 地址分为 网络号
和 主机号
两部分,将 IP 地址与其子网掩码进行按位与可以获得 网络号
。网络号的相同的 IP 被划分到一个子网下。 IP 地址分为 5 类:
分类 | 范围 | 子网掩码 |
A | 1~126 | 255.0.0.0 |
B | 128~191 | 255.255.0.0 |
C | 192~223 | 255.255.255.0 |
D | 224~239 | 组播地址,不用于标识主机 |
E | 240~255 | 保留地址,不使用 |
对于整个互联网而言,网络号不得相同。对于子网而言,主机号不得相同。
以下地址为特殊地址:
地址 | 作用 |
主机号全为 0 | 代表本子网 |
主机号全为 1 | 本子网的广播地址 |
127.0.0.1 | 主机本身。用于本地回环测试 |
0.0.0.0 | 本网络上的本主机。在向其他主机发送报文,但是不知道自己 IP 地址时在源 IP 填此地址 |
255.255.255.255 | 整个网络的广播地址,由于路由器的隔离,也代表本子网的广播地址 |
以下地址被划分为 私有地址
。公网上路由器不转发目的地址为私有地址的分组:
分类 | 地址 |
A 类 | 10.0.0.0 ~ 10.255.255.255 |
B 类 | 172.16.0.0 ~ 172.16.255.255 |
C 类 | 192.168.0.0 ~ 192.168.255.255 |
IP地址聚合
无类域间路由选择( CIDR (Classless Inter-Domain Routing)
)是一种 地址聚合
规范,而不是 子网划分
规范。
CIDR 提供了两种服务:
子网掩码
前缀聚合
NAT
网络地址转换( NAT (Network Address Translation)
)
一个典型的 NAT 表为:
WAN 端 | LAN 端 |
138.76.29.7:5001 | 192.168.0.2:2233 |
138.76.29.7:5060 | 192.168.0.3:1234 |
此时,将本地 192.168.0.2:2233 上的数据报中的源地址和源端口改为 138.76.29.7:5001。
NAT 路由器在将分组转发到公网或者将公网分组转发到内网时才会更改源地址和源端口。而普通路由器在任何时候都不会更改分组内容 |
DHCP
DHCP (Dynamic Host Configuration Protocol)
申请 IP 地址有四个步骤:
发送报文类型 | 报文内容 |
DHCP 服务器发现 | src = 0.0.0.0:68 |
dest = 255.255.255.255:67 | |
yiaddr = 0.0.0.0 | |
DHCP 服务器提供 | src= 服务器 IP : 67 |
dest = 255.255.255.255:68 | |
yiaddr = 服务器提供的 IP | |
DHCP请求报文 | |
DHCP ACK 报文 |