上一篇对输入URL后的操作流程以及数据封装(解封)过程做了一个整理,但其中还有很多细节值得我们去学习。比如说,在各个层有哪些具体的协议,这些协议又以何种方式实现何种功能?
在这篇文章中,我先对网络层的一些重要知识点进行提炼整理,上一篇的框图中进行标注过的就不再详细说明。
IP地址(分类的IP地址和无分类域间路由选择CIDR)
(1)分类的IP地址:
A类 网络号8位,第1位固定为1,可指派网络号个数为2^7-2(除去全0和127),主机号24位,可指派主机号个 数为2^23-2(除去全0和全1),全0表示网络地址,全1表示该网络上的所有主机。
B类 网络号16位,第1、2位固定为10,主机号16位
C类 网络号24位,第1、2、3位固定为110,主机号8位
为了增加IP地址的灵活性,采用子网划分将二级地址扩展为三级地址,三级IP地址 = <网络号>,<子网号>,<主机号>
通过将子网掩码与IP地址进行按位与,可以获得子网号。
(2)无分类编址CIDR
IP地址:: = {<网络前缀>,<主机号>}
斜线记法:形如 128.14.35.7/20
网络层如何保证IP数据报的转发效率和交付成功率?
网际控制报文协议ICMP,允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP作为IP数据报的数据部分进行传送,格式如下:
Bits 160-167 168-175 176-183 184-191
160 Type Code 校验码(checksum)
192 Rest of Header(取决于ICMP报文类型)
ICMP报文
ICMP报文有2种,即ICMP差错报告报文和ICMP询问报文,常用类型如下:
ICMP报文种类 | 类型的值 | ICMP报文类型 |
---|---|---|
差错报告报文 | 3 | 终点不可达 |
11 | 时间超过 | |
12 | 参数问题 | |
5 | 重定向 | |
询问报文 | 8或0 | 回送(Echo)请求或回答 |
13或14 | 时间戳(Timestamp)请求或回答 |
ICMP的应用:PING(Packet Internet Grouper) 和 traceout
PING并未通过传输层的TCP/UDP,而是使用了ICMP的回送请求和回送回答报文。
traceout可以侦测源主机到目的主机之间的路由情况,而ping不能完全的记录下所经过的路由器。从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报(因为使用了非法的端口号),通过逐步递增设置TTL(存活时间),以获得每个路由器返回的ICMP时间超过差错报告报文,从而得到经过的路由器的IP地址和到达其中每一个路由器的往返时间,最后当数据报到达目的主机时,目的主机会因为UDP用户数据报中非法的端口号而返回ICMP终点不可达差错报告报文。
路由选择协议,即如何得到路由表中的路由?
首先需要明确一个概念,即自治系统(autonomous system, AS),自治系统表示一组在单一技术管理下的路由器。自治系统内使用的路由选择协议,称为内部网关协议,自治系统间的路由选择协议,称为外部网关协议。
内部网关协议(IGP)
常用的IGP有两种,分别是采用距离向量算法的路由信息协议RIP和采用链路状态算法的OSPF。下面从“和谁交换信息?”、“交换什么信息?”以及“在什么时间交换信息?”三个方面阐述。
(1)RIP:
- 仅和相邻路由交换信息
- 交换当前本路由器所知道的全部信息
- 按固定时间间隔交换
路由表形式如下所示:
目的网络 | 距离 | 下一跳路由器 |
---|---|---|
Net1 | 4 | R4 |
Net2 | 5 | R3 |
(2)OSPF:
- 采用洪泛法,向本自治系统中所有路由器发送信息
- 发送的是与本路由器相邻的所有路由器的链路状态
- 只有链路状态发生变化时才发送
所有路由器最终都能建立一个链路状态数据库,这个数据库实际上就是全网的拓扑结构图。
其中,RIP使用UDP进行传送,OSPF使用IP进行传送。
外部网关协议(EGP)
边界网关协议BGP是目前互联网路由的公认标准,它采用路径向量路由选择算法。每个AS都要选出一个BGP发言人,这个发言人可以是BGP边界路由器,也可以不是,然后发言人之间建立TCP连接,再交换BGP报文以建立BGP会话,最后利用BGP会话交换路由信息。交换信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找到到达各自治系统的较好路由。
BGP-4有4种报文:
OPEN(打开),用来与相邻的另一个BGP发言人建立关系,使通信初始化。
UPDATE(更新),用来通告某一路由的信息,以及列出要撤销的多条路由。
KEEPALIVE(保活),用来周期性地证实邻站地连通性。
NOTIFICATION(通知),用来发送检测到的差错。