目录
概述
一、IP 地址解析
1. 分类
2. 子网划分
3. 无分类
4.IPv6 地址解析
二、IP 数据报格式
三、路由控制
四、路由选择协议
4.1 内部网关协议 RIP
4.2 内部网关协议 OSPF
4.3 外部网关协议 BGP
五、IP 协议相关技术
5.1 ARP 地址解析协议
5.2 ICMP 网际控制报文协议
5.2.1 Ping
5.2.2 Traceroute
5.3 NAT 网络地址转换
六、IP 多播
七、全局地址与私有地址
与 IP 协议配套使用的还有三个协议:
发送数据至最终目标地址:
一跳表示同一个数据链路中的源节点到目的节点的范围。当 IP 包到达路由器时,路由器首先查找其目标地址,从而再决定下一步应该将这个包发往哪个路由器,然后将包发送出去。这个过程会重复多次,直到找到最终的目标地址将数据包发往这个节点。
IP 属于面向无连接型
IPv4 地址由32位正整数表示,8位一组,分4组,每组以 . 隔开,再将每组数转换为十进制数。
由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。
IP 地址 ::= {< 网络号 >, < 主机号 >}
主机标识不能设置为全为0和全为1,全部为0的只有在标识对应的网络地址或 IP 地址不可获知的情况下才使用,全部为1的为广播地址。
广播的 IP 包在数据链路层实现发送时,同理也是将 MAC 地址都变为1,即FF:FF:FF:FF:FF:FF
通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。
IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}
要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。
注意,外部网络看不到子网的存在。子网掩码与网络内的任意一个 IP 地址相与后,得到的就是这个 IP 地址所在的网络地址。
无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。
IP 地址 ::= {< 网络前缀号 >, < 主机号 >}
CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。
一个 CIDR 地址块中有很多地址,例如将202.244.160.1到202.144.167.254合并为一个网络,实际是将8个C类地址合并成一个网络。
一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网 。
在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。
IPv6 地址长度为128位,以每16比特为一组,分为8组,每组用 : 隔开进行标记。如果出现连续的0时还可以将这些0省略,并用两个冒号 :: 隔开。但是,一个 IP 地址中只允许出现一次两个连续的冒号。
首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 4 字节的长度 。因为首部固定长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
区分服务 : 用来获得更好的服务,一般情况下不使用。
总长度 : 包括首部长度和数据部分长度。
生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。
标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。
路由控制表的形成方式有两种:
路由控制表中记录着网络地址与下一步应该发送至的路由器的地址。当存在多条匹配记录时,选择位数最长匹配的一条。
默认路由:一般标记为 0.0.0.0 或者 default,任何一个地址都能与之匹配,当找不到匹配记录时,就按照默认路由的下一跳指示发送。
环回地址:在同一台计算机上的程序之间进行网络通信时使用的一个默认地址 127.0.0.1,等同于使用主机名 localhost。使用这个 IP 或者主机名时数据包不会流向网络。
路由分组转发流程:
路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。
互联网可以划分为许多较小的自治系统 记为AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议。
可以把路由选择协议划分为两大类:
RIP 是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。
RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。
距离向量算法:
RIP 协议实现简单,开销小。但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。
开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的,最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。
OSPF 具有以下特点:
所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。
BGP(Border Gateway Protocol,边界网关协议)
AS 之间的路由选择很困难,主要是由于:
BGP 只能寻找一条比较好的路由,而不是最佳路由。
每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。
网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。
ARP 实现由 IP 地址得到 MAC 地址
每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。
如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。
产生的原因(IP 协议的不足):
ICMP封装在 IP 数据报中,更有效地转发 IP 数据报和提高交付成功的机会,但是不属于高层协议。
ICMP 报文分为 差错报告报文(通知出错的原因) 和 询问报文 (用于诊断的查询报文)。
Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。
Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。
Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。
在以前,NAT 将本地 IP 和全球 IP 一一对应,为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把传输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT。
NAT 转换表会在 NAT 路由器上自动生成。在 TCP 的情况下,建立 TCP 连接首次握手时的 SYN 包一经发出就会生成这个表。
由于广播会将数据发给所有终端主机,由主机 IP 之上的一层判断是否有必要接受数据,会给那些毫无关系的网络或者主机带来影响,造成网络上很多不必要的流量,而且广播无法穿透路由到达不同网段。
多播可以穿透路由器,实现只给必要的组发送数据包。
随着互联网的普及,IP 地址不足的问题日趋显著。将私有 IP 地址与 NAT 技术结合的方法,实现了 全局 IP 地址要在整个互联网范围内保持唯一,但私有地址只要在同一个域里保证唯一即可,在通信时,NAT 可将私有 IP 转换为全局 IP 以实现和外部互联网进行通信。