- 第4章 网络层
- 网络层提供的两种服务
- 网际协议IP
- 虚拟互连网络
- 分类的IP地址
- IP地址与硬件地址
- 地址解析协议ARP
- IP数据报的格式
- IP层转发分组的流程
- 划分子网和构造超网
- 划分子网
- 无分类编址CIDR(构造超网)
- 最长前缀匹配
- 网际控制报文协议ICMP
- ICMP的应用
- 互联网的路由选择协议
第4章 网络层
网络层提供的两种服务
第一种: 虚电路服务
第二种: 数据报服务
虚电路服务面向连接,由网络提供可靠传输的服务.
数据报服务无连接,不提供服务质量的承诺,可靠性由网络主机中的运输层负责.
为何这样选择?
计算机网络与电信网络不同,计算机网络的端系统是有智能的计算机,计算机有很强的差错处理能力,因此把可靠传输的责任交给端系统是一个正确的决定.它使网络造价大大降低,运行方式灵活,能够适应多种应用.
网际协议IP
网际协议IP又称为Kahn-Cerf协议.
虚拟互连网络
虚拟互联网络(internet)
物理网络的异构性仍然是客观存在的,但是利用IP协议就可以使这些网络在网络层上看起来好象是一个统一的网络.
互联网(Internet)就是一种虚拟互联网络.
分类的IP地址
IP地址与硬件地址
这个例子很好的表示了IP地址和物理地址在分组传输过程中的区别.
- IP层抽象的互联网上只能看到IP数据报,IP数据报的源地址和目的地址始终不变.:face
- 路由器只根据目的站的IP地址的网络号进行路由选择.
- 在局域网的链路层,只能看见MAC帧,MAC帧在不同局域网传输过程中的源地址和目的地址一直在改变.
所以这体现了IP层上下的区别,IP层只要提供目的地址就好了,但下面的数据链路层要考虑的就多了😅
- IP层抽象的互联网屏蔽了下层复杂的细节.
地址解析协议ARP
ARP高速缓存(ARP cache)是主机用来存储本局域网的各主机和路由器的IP地址到硬件地址的映射表.
如果ARP高速缓存中没有想要的映射,则会发生上图的过程:
-
主机A欲向主机B发送IP数据报.但是ARP缓存中没有找到主机B的IP地址到物理地址的映射.
-
A广播一个ARP请求分组,B接收到请求后,发现请求IP地址正是自己,则单播一个ARP响应分组给发送端,其他不相关的主机则忽略这个请求.
-
A收到B的响应分组后,就在其ARP高速缓存中写入B的IP地址到硬件地址的映射.
-
A根据B的硬件地址,装填MAC帧,传递给物理层运输.
ARP缓存中的每个映射都有生存时间,因为IP地址和硬件地址对应关系有可能改变,比如,主机更换了网络适配器,那么硬件地址就变了.
IP数据报的格式
IP层转发分组的流程
直接交付代表怎样的过程?
将目的主机地址通过ARP转换为物理地址,把数据报封装成MAC帧,发送此帧.
IP数据报中没有指明"下一跳路由器的IP地址",那么待转发的数据报是怎么找到下一跳路由器的呢?
路由器就像一个指挥,每到下一跳地址(遇见了一个路由器),路由器就会根据路由表告知数据报下一跳去哪,直到找到目的地址
上图是路由器的分组转发算法.
划分子网和构造超网
划分子网
使用子网时分组的转发
区别就是现在路由表新增一栏子网掩码.
- 目的地址和该行的子网掩码进行按位与操作
- 比对目的网络地址.
无分类编址CIDR(构造超网)
CIDR(Classless Inter-Domain Routing)
无分类,或者再细分?
区别:
原来只有ABC类,在分配时,只能在8,16,24位中选择.
CIDR取消了分类,在分配时可以选择任意位数作为地址块.
斜线记法:
CIDR表示IP地址的方法是128.14.35.7/20.
20表示网络前缀的长度,20位之后都是主机号.
优点:
这种编制方式符合直觉并且简单,之前ABC类地址分类本就是一种限制极大的设计.
构造超网就是减轻了每一层的负担,但增加了层数,举例来说,256=4x64,这样便减轻了上层负担.
最长前缀匹配
举例来说,如果从A国发往B国某省某市一条信息,显而易见,如果国省市都出现在A国的路由表中,最终将有多个匹配结果,所以理想情况下应当选择最长前缀匹配,直接发往B市,减少路由器中转次数.
CIDR的遗憾就是它是后来者,如果IP地址按照地理位置分配,那就可以大大压缩路由器中的项目数,比如国家最上层路由器的路由表中只需要存所有国家的IP前缀即可,但现实是一个国家的IP前缀并不统一.
如何进行最长前缀匹配也是一个关键的问题
常用的是二叉线索(binary trie).
网际控制报文协议ICMP
ICMP(Internet Control Message Protocol)
ICMP的应用
-
ping
ping(Packet InterNet Groper)
PING使用的正是ICMP回送(Echo)请求与回送回答报文.
PING是应用层直接使用网络层ICMP的一个例子,它没有通过运输层的TCP或UDP.
突然就懂了ping的原理,好神奇.
-
traceroute
通过TTL实现,发送一连串的IP数据报,TTL从1开始递增,所以途径的每个节点都会给发送端发送一个ICMP时间超过差错报告报文,而目的主机会发送ICMP终点不可达差错报告报文.
这样我们就得到了从主机到目的主机的路由路径.
但是实测中发现baidu和sina都无法得到目的主机发回的报文,具体原因可以参考能ping通traceroute不通
但是我想到一个方法🤓
既然ping命令可以设置ttl(生存时间)
那我只要找到能ping通的最小ttl,不就知道经过了多少路由器吗🤔
归纳:
那么如果路径上有1个路由器,最小ttl是2.
A---->路由器(ttl-1)---->B
现在最小ttl是18,可以得知路径上有17个路由器🤓
验证:
参考这个文章之后,能ping通traceroute不通
得知linux的traceroute
默认使用udp,并不是我们刚才所学的原理,可以用--icmp
参数指定它使用icmp报文.
发现路径上的路由器确实是17个.
GPT对这些IP地址的解释:
路由器 | 作用 | 地址类型 | 网络范围 |
---|---|---|---|
192.168.1.1 |
本地网关(家庭/办公路由器) | 私有 IP | 局域网(LAN) |
10.30.0.1 |
ISP 内部网络设备 | 私有 IP | 运营商内部网络 |
111.45.201.57 等 |
公网路由器 | 公网 IP | 互联网骨干网 |
总之验证成立!
互联网的路由选择协议
未完待续