文章目录
网际协议IP
一、虚拟互连网络
–指利用路由器进行网络互连和路由选择
- 利用IP协议可以使得各种异构的网络看起来是一个互连网络,可以在这个虚拟的连网络中进行数据报的传送
- 使用IP协议的虚拟互连网络成为IP网
- 在IP网上使用TCP协议,就成为了现在的互联网(Internet)
例:分组在互联网(使用TCP/IP协议的虚拟互连网络)中传送:
二、IP地址的编址方法
要使得分组能够在互联网中传输,就必须使得每个主机(路由器)有一个唯一的标识符—IP地址
1、分类的IP地址
-最基本的编址方法,每个IP地址由网络号、主机号组成
(1)IP地址是一种分等级的地址结构
- IP地址管理机构只分配网络号给单位,单位自行分配其地址号
- 路由器仅根据网络号来转发分组,转发至某一网络
(2)IP地址实际上标志着主机和一条链路的接口
- 一个路由器连接至多个局域网,因此路由器至少有两个IP地址
(3)用转发器、网桥连接起来的若干局域网依然是一个网络
- 这些网络具有同样的网络号
(4)分配到网络号的网络:局域网、广域网都是平等的
(5)各类IP地址
(6)几种特殊IP地址
网络号 | 主机号 | 源地址 使用 | 目的地址 使用 | 代表的意思 |
---|---|---|---|---|
0 | 0 | 可以 | 不可 | 在本网络上的本主机(见 6.6 节 DHCP 协议) |
0 | host-id | 可以 | 不可 | 在本网络上的某台主机 host-id |
全 1 | 全 1 | 不可 | 可以 | 只在本网络上进行广播(各路由器均不转发) |
net-id | 全 1 | 不可 | 可以 | 对 net-id 上的所有主机进行广播 |
127 | 非全 0 或全 1 的任何数 | 可以 | 可以 | 用作本地软件环回测试之用 |
主机号为全1代表在网络上进行广播;网络号和主机号都为0代表本网络上的本主机;网络号为0,主机号为A代表本网络上的主机号为A的主机;
2、子网的划分
两级IP地址到三级IP地址
在IP地址的主机字段抽出一部分作为子网号字段,使得两级IP变为三级IP
- 划分子网是一个网络内部的事情,对外依然呈现一个未划分子网的网络
- 其他网络发送到本单位的某个主机的IP数据报,依然只根据网络号来转发,本网络的路由器收到IP数据报后,根据其子网号找到目的子网
- 减少了IP地址的浪费、使得网络的组织更加灵活和便于管理。
子网掩码
利用IP数据报的首部的IP地址于子网掩码相与,就能得出IP地址中的子网部分
在一个网络中(A,B,C三种网络的一种),当路由器R1收到其他网络发往本网络的数据报时,将其路由表的子网掩码与该IP地址相与,得到目的子网的地址,再根据其下一跳来进行转发
假设H1给H2发送数据,在划分子网的情况下的分组转发算法如下:
首先H1检查目的网络是否在本子网内,用H1所在的子网掩码与上H2的IP地址,是就直接交付,否则交给路由器R1;
R1收到后,查找自己的路由表,将目的网络地址(H2)与子网掩码相与得到正确的子网号以及下一跳。
3、构成超网
无分类编址CIDR
-Classless Inter-Domain Routing 无分类域间路由选择
- CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念
- CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”
- 128.14.32.0/20 表示的地址块共有 212 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。
路由聚合-构成超网
-
一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合
-
前缀长度不超过 23 位的 CIDR 地址块都包含了多个 C 类地址。
- 这些 C 类地址合起来就构成了超网。
最长前缀匹配
在使用CIDR时,路由表中的每个项目由网络前缀和下一跳组成,当根据目的网络查找时,可能由多个目的网络前缀满足这个目的网络,此时应遵从最长前缀匹配原则。
例如:
收到的分组的目的地址 D = 206.0.71.130
路由表中的项目:
目的网络前缀 下一跳
206.0.68.0/22 1
206.0.71.128/25 2
此时两个目的网络前缀都满足目的地址D的前缀,但根据最长前缀匹配,选择 206.0.71.128/25 2这一项目。
使用二叉树查找路由表
当路由表中的项目数特别大时,为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索
三、IP地址与硬件地址
IP地址与硬件地址介绍
IP地址:在网络层及以上各层使用的地址,逻辑地址,其在IP数据报的首部
硬件地址:数据链路层和物理层使用的地址,在MAC帧的首部
从网络层来看,分组是根据IP地址进行转发的,而在链路层和物理层来看,数据是根据MAC地址转发的。
地址解析协议ARP
ARP协议的必要
通信时需要有两个地址,IP地址、MAC地址。
因为最终数据都要放在链路层和物理层进行传输,所以需要地址解析协议ARP根据一个主机(或路由器)的IP地址,得到其MAC地址,以便于能在物理层中转发。
每个主机(或)路由器都有两个地址
ARP协议的特点
-
解决的是同一个局域网上的主机和路由器的IP地址到MAC地址的映射问题
-
如果所要找的目的主机不在本局域网,则通过路由表找到去网该目的网络的下一条路由器A,通过ARP找到某一个路由器(A)的硬件地址,将分组发至该路由器A,由路由器A完成剩下的工作
-
IP地址到MAC地址的映射是自动进行的,知道其IP地址就可以通信,其地址的映射由计算机软件完成。
-
主机A给本局域网主机B发送IP数据包时,先检查ARP高速缓存中有无B的IP地址和MAC地址的映射关系
-
有,将MAC地址填入MAC帧首部
-
没有,向本局域网内广播发送一个ARP请求分组(广播),主机B收到后,发出ARP相应分组,主机A将主机B的IP地址和MAC地址的映射写入ARP高速缓存,同时B也将A的映射关系填入自己的ARP高速缓存。
-
ARP高速缓存
< IP address;MAC address;TTL >
TTL(Time To Live)地址映射有效时间
存放最近获得的 IP 地址到 MAC 地址的绑定,以减少 ARP 广播的数量。
四、IP数据报的格式
1、IP数据报的格式
- IP数据报由首部个数据两部分组成,
- 其中首部存放上层协议号、源地址、目的地址等信息;数据部分存放数据多种上层协议报文,如TCP、UDP、ICMP、IGMP、OSPF(RIP存放在TCP报文里)等
- IP数据报首部的固定长度为20字节,在IP数据报首部的固定长度后面是可选字段,可变。
2、IP数据报首部各字段
版本:占4位,代表IP协议的版本,IPv4、IPv6
首部长度:占4位,一个单位代表4字节,因此当其为最大值1111时,代表首部长度为60字节(最大首部长度)
区分服务:占8位
总长度:16位,IP数据报的总长度,一个单位代表一个字节,当其为FFFF时,IP数据报最大长度为65535字节(216-1),当然IP数据报的长度不能超过链路层最大传送单元MTU。
标识:占16位,没产生一个数据报,此字段加1,当IP数据报的长度大于MTU时,会将IP数据报分割,此标识字段被复制到分割后的各个IP数据报。接收时,只有相同标识字段的IP数据报才能合并
标志:3位,目前前两位有意义,最低位MF=1代表后面“还有分片”的数据报,中间位DF=0代表允许分片
片偏移:8位,指出当前分片IP数据报在原来长的IP数据报中的位置
生存时间:占8位,TTL,每经过一个路由器就减去一定的时间,防止无用的数据报在网络中长时间存在,当TTL为0时,丢弃这个数据报。现在利用跳数代替时间。
协议:指出IP数据报数据部分使用何种协议(例如TCP、UDP、OSPF、ICMP)等,以便主机知道将数据报交给上层的哪个进程、哪个端口。
首部检验和:占16位,只检验IP数据报首部
源地址、目的地址:IP地址
这里我们以抓取一个IP数据报来观察(wireshark抓取TCP包,wireshark貌似不能直接抓取IP数据报,故只能抓取TCP协议,因为TCP协议是基于IP协议的,所以也能观察到IP数据报):
抓取一帧分析:
在IP层上方的是链路层协议、下方是TCP协议,IP协议的各个字段在下面的一串二进制中是颜色较深的那部分,可以看到起协议号是0100 (IPv4),首部长度为0101(5),即为20字节。
五、IP层转发分组的流程
假如利用目的主机的IP地址来制作路由表,则项目数特别大。因此根据目的主机所在网络进行转发,来确定下一跳路由器,转发到目的网络时,路由器再根据其子网掩码进行转发。
特定主机路由:即为特定的目的主机指明一个路由,方便网络测试。
默认主机路由:在未找到去往目的网络的路由时,路由器将数据报交由默认路由处理
1、路由器分组转发算法
- 提取目的主机的IP地址,得到目的网络地址
- 首先判断目的网络是否与本路由器直接相连,相连则直接转发,否则3
- 判断是否有去往目的网络的特定路由,有则交由特定路由指定的下一跳地址,否则4
- 判断路由表中是否有去往目的网络的路由,有则交付该路由指定的下一跳,否则5
- 判断是否有默认路由,有就交给默认路由,否则6
- 报告分组错误
2、路由器将数据报交给下一跳的过程
- IP数据报中没有地方来申明下一跳地址,因此路由器得到下一跳的IP地址时,不将其填入IP数据报
- 路由器将下一跳的IP地址交给下层的网络接口软件
- 网络接口软件利用ARP协议,进行广播得到下一跳的硬件地址,并将其放在MAC帧的首部
- 链路层根据首部的MAC地址找到下一跳路由器,并交付给该路由器下一跳,否则5
- 判断是否有默认路由,有就交给默认路由,否则6
- 报告分组错误