将网络互连起来要使用一些中间设备,根据中间设备所在的层次划分:
- 物理层使用的中间设备叫转发器(repeater),集线器是多网口的转发器。
- 数据链路层使用的中间设备叫网桥或桥接器(bridge),交换机是多网口的网桥。
- 网络层使用的中间设备叫路由器(router)。
- 在网络层以上使用的中间设备叫网关(geteway)。
- 当中间设备是转发器或网桥时,这仅仅是把一个网络扩大了,而从网络层的角度看,这仍然是一个网络。
现在主要使用无分类编址(CIDR),IP地址分类早已成为历史,稍微了解一下
分类 | 前缀 | 网络号位数 | 主机号位数 |
---|---|---|---|
A类 | 0 | 8 | 24 |
B类 | 10 | 16 | 16 |
C类 | 110 | 24 | 8 |
D类 | 1110 | ||
E类 | 11110 |
- A类:IP 地址范围为 000.0.0.0 ~ 127.255.255.255。
- B类:IP 地址范围为 128.0.0.0 ~ 191.255.255.255。
- C类:IP 地址范围为 192.0.0.0 ~ 223.255.255.255。
- D类:IP 地址范围为 224.0.0.0 ~ 239.255.255.255。
- E类:IP 地址范围为 240.0.0.0 ~ 255.255.255.254。
私有地址和保留地址
A类地址
- 私有地址范围为 10.0.0.0~10.255.255.255。
- 保留地址范围为 127.0.0.0~127.255.255.255。
B类地址
- 私有地址范围为 172.16.0.0~172.31.255.255。
- 保留地址为 169.254.X.X。
C类地址
- 私有地址范围为 192.168.0.0~192.168.255.255。
其中D类地址主要用于多播。
我们知道一个网络号中有很多主机号。我们要给一个主机发数据,路由器只是查找网络号,找到目标网络号,然后交付目标主机。
这里我个人理解为 D 类地址的网络号是 32 位。主机号0位。所以每个D类地址都代表一组主机,所以用于多播。
地址解析协议 ARP
- 每一台主机都有一个ARP高速缓存,里面记录了本局域网内IP地址和MAC地址的对应关系。ARP高速缓存有一个过期时间。比如 10~20 分钟。
- 给局域网内的主机发消息的时候就查找ARP缓存。找到了直接拿出MAC地址使用。如果找不到,就发送一个ARP请求分组。
- ARP请求分组的的目标 MAC地址 为 ff:ff:ff:ff:ff:ff ,在局域网内的每一台主机都能数到这个分组,他们看看自己的IP地址是不是和请求分组询问的IP地址一致。如果不一致就不理睬。如果一致就通过单播告诉源主机自己的mac地址。同时把对方的MAC地址也写入自己ARP缓存。源主机收到回应后也把对方MAC写入缓存。
ARP 分组格式,长度单位:字节
字段 | 硬件类型 | 协议类型 | 硬件地址长度 | 协议地址长度 | op | 发送端MAC | 发送端IP | 目的MAC | 目的IP |
---|---|---|---|---|---|---|---|---|---|
长度 | 2 | 2 | 1 | 1 | 2 | 6 | 4 | 6 | 4 |
ARP 请求/应答分组固定 28 字节。前面加上 14 字节的MAC帧首部即构成总长度 42 字节的ARP分组。
字段 | 长度 | 说明 |
---|---|---|
硬件地址类型 | 2 | 硬件地址不止以太网一种,如果是以太网设置为 1 |
协议类型 | 2 | 映射的协议地址类型,要对IPv4进行映射,值为 0x0800 |
硬件地址长度 | 1 | MAC地址长度为 6 字节,值为 6 |
协议地址长度 | 1 | IP地址长度为 4 字节,值为 4 |
op | 2 | 操作类型。1 是 ARP请求;2 是ARP应答;3 是RARP请求;4 是RARP应答 |
发送端MAC地址 | 6 | 和MAC帧源MAC地址一致 |
发送端IP地址 | 4 | 发送端的IP地址 |
目的MAC地址 | 6 | 目的MAC地址 |
目的IP地址 | 4 | 目的IP地址 |
IP数据报的格式
IP数据报有 20 字节的固定首部。我按照自己的理解分成每 4 个字节一块,并给每一块取了一个名字,只是为了方便记忆。
分区 | 长度 | 字段 | 字段 | 字段 | 字段 |
---|---|---|---|---|---|
总体概况 | 4 | 版本 4b | 首部长度 4b | 区分服务 1B | 总长度 2B |
分片相关 | 4 | 标识 2B | 标志 3b | 片偏移 13b | |
交付相关 | 4 | 生存时间 1B | 协议 1B | 首部校验和 2B | |
原地址 | 4 | 源IP地址 4B | |||
目的地址 | 4 | 目的IP地址 4B | |||
选项 | 4n | 长度可变,为4字节的整数倍,不足填0,实际很少使用,很多路由器都不考虑可选部分 |
字段说明
字段 | 长度 | 说明 |
---|---|---|
版本 | 4b | IP协议版本,如果是IPv4值为4 |
首部长度 | 4b | IP首部的长度,单位4B,最大值15说明IP数据报头部长度最大60字节 |
区分服务 | 1B | 用来获得更好的服务,很少使用 |
总长度 | 2B | 首部和数据总长度,单位是字节,最大值 65535 即 64KB ,一般都用不到这么大,一般 MTU 才1500 |
标识 | 2B | 标识一个IP数据报,用于分片后的组装 |
标志 | 3b | 第1位保留;第2位 DF,只有DF=0才允许分片;第3位MF,MF=1表示后面还有分片 |
生存时间 | 4b | TTL (Time To Live) ,每经过一个路由器就减 1,到0就丢弃。数值表示能经过多少个路由器 |
协议 | 1B | 携带数据使用的协议,目标主机通过该字段得知把数据交给谁 |
首部校验和 | 2B | 只校验首部,为了减少计算量,通过二进制反码求和计算校验和 |
源IP地址 | 4B | 注意源IP地址在前面 |
目的IP地址 | 4B | 注意目的IP地址在后面 |
片偏移 本报文携带的数据部分在源报文中数据部分的数据偏移。数据报分片后还可能再进行分片。
协议字段值
协议名 | ICMP | IGMP | TCP | EGP | IGP | UDP | IPv6 | ESP | OSPF |
---|---|---|---|---|---|---|---|---|---|
协议字段值 | 1 | 2 | 6 | 8 | 9 | 17 | 41 | 50 | 89 |
EGP 外部网关协议 IGP 内部网关协议
路由器转发的过程,依次进行如下操作。
- 从数据报的首部中提取出目的主机IP地址 D,得出目的网络 N。
- 如果 N 就是本路由器直接相连的某个网络,则进行 直接交付。
- 如果路由表中有针对 N 的特定主机路由。则交给特定主机路由。
- 如果有默认路由,则交给默认路由。
- 报告转发出错。
划分子网
- 子网掩码和IP地址进行 & 操作,得到网络号。
- 路由器是根据 网络号 转发的分组的。不然路由表庞大。
- 使用子网划分后,路由表必须包含以下三项内容:目的网络地址、子网掩码 和 下一跳地址。
划分子网路由转发的过程,依次进行如下操作。
- 提取目的IP地址 D。
- 判断是否是直接交付。对直接相连的每个网络进行检查,用子网掩码和 D 进行 & 操作。结果和网络地址相等,直接交付。
- 对路由器中的每一行 (目的网络地址,子网掩码,下一跳地址),用子网掩码和 D 进行 & 操作,结果和目的网络地址相同,则交给下一跳路由器。
- 如果有默认路由则交给默认路由。
- 报告转发出错。
无分类编址CIDR
- 128.14.35.7/20 在IP地址后面加上掩码的位数。
- 在路由查找时选择最长网络前缀。
ICMP报文
报文格式
字段 | 类型 | 代码 | 校验和 | 取决于类型 | 数据部分 | |
---|---|---|---|---|---|---|
长度 | 1 | 1 | 2 | 4 | 长度取决于类型 | 数据部分取决于类型 |
- 检验和字段用来检验整个ICMP报文。
- 前 4 个字节是固定格式
- 接下来的 4 个字节取决于类型。
- 数据部分取决于类型
不同类型报文的类型值
ICMP报文种类 | 类型值 | ICMP报文的类型 | 说明 |
---|---|---|---|
差错报告报文 | 3 | 终点不可达 | 主机或路由器不能交付时向源点发送 |
差错报告报文 | 4 | 源点抑制达(Source quench) | 由于拥塞导致丢包时向源点发送,让源点发慢点 |
差错报告报文 | 5 | 改变路由(Redirect) | 告诉源主机有更好的路由 |
差错报告报文 | 11 | 时间超过 | TLL为0或者没有在规定时间内收到完整数据报 |
差错报告报文 | 12 | 参数问题 | 路由器或主机收到的数据报头部有字段值错误 |
询问报文 | 8 或 0 | 回送(Echo)请求或回答 | 测试是否可达和了解有关状态 |
询问报文 | 13 或 14 | 时间戳(Timestamp)请求或回答 | 时钟同步 和 测量时间 |
- 差错报告报文的数据部分为 IP数据报首部 + 8字节数据部分。
以下情况下不发送ICMP差错报告报文
- ICMP差错报告报文不发送
- 分片的数据报后续报片不发送
- 多播地址不发送
- 特殊地址不发送。
路由选择协议
- 内部网关协议IGP:在一个自治系统内部使用的路由选择协议,具体的协议有多种,如RIP和OSPF等。
- 外部网关协议EGP:当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。目前使用的协议就是BGP。
RIP 工作原理
- 仅和相邻路由器交换信息。
- 按固定的时间间隔交换路由信息,例如,每隔30秒。
IP多播
- 能够运行多播协议的路由器称为多播路由器。
- 在因特网上进行多播就叫做IP多播。IP多播所传送的分组需要使用多播IP地址。
- 多播地址只能用于目的地址,而不能用于源地址。
- 多播组的标识符就是D类IP地址。地址范围是 224.0.0.0 到 239.255.255.255。
- 其中有一些保留地址,全球范围都可使用的多播地址是 224.0.1.0 至 238.255.255.255。
专用地址 (private address)
这些地址是专用地址,只能在内部使用。在因特网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发
- 10.0.0.0到10.255.255.255 (或记为10.0.0.0/8,它又称为24位块)
- 172.16.0.0到172.31.255.255 (或记为172.16.0.0/12,它又称为20位块)
- 192.168.0.0到192.168.255.255 (或记为192.168.0.0/16,它又称为16位块)
网络地址转换NAT (Network Address Translation)
- 路由器 内部地址:端口号 映射成 外部地址:端口号。
- 使用端口号的NAT也叫做网络地址与端口号转换 NAPT (Network Address and Port Translation)。