文章目录
概念
网络层主要讨论内容:网络互连问题。
网络层提供的两种服务
根据可靠交付让网络层负责还是让端系统负责,分为两种服务。
-
虚电路服务
用面向连接的方式,就像打电话一样,交换数据前线建立连接(建立一条虚电路)。 -
数据报服务
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
因为TCP/IP体系下网络层提供的都是数据报服务,所以可靠交付是上层负责。
网际协议IP
与IP协议一起的还有下面几个协议
- 地址解析协议ARP(Address Resolution Protocol)
- 网际控制报文协议ICMP(Internet Control Message Protocol)
- 网际组管理协议IGMP(Internet Group Management Protocol)
关系如下:
中间设备的名称
1.物理层:转发器;
2.数据链路层:网桥/桥接器(交换机);
3.网络层:路由器;
4.网络层以上:网关(但因为历史原因,TCP/IP的文献曾经把网络层的路由器叫网关)
IP数据报格式
版本 : 有 4(IPv4)和 6(IPv6)两个值;
首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为固定部分长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
区分服务 : 用来获得更好的服务,一般情况下不使用。
总长度 : 包括首部长度和数据部分长度。
标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。
生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
协议:指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
首部检验和:因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。
IP地址编址方式
分类
由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。
IP 地址 ::= {< 网络号 >, < 主机号 >}
A类网络:1.xxx.xxx.xxx-126.xxx.xxx.xxx (0表示该网络,127表示本地网络环回测试)
B类网络:128.1.xxx.xxx-191.255.xxx.xxx(前面网络地址不能为全0)
C类网络:192.0.1.xxx-223.255.255.xxx
特点:
1.IP地址是一种分等级的地址结构,网络号+主机号;
2.IP地址是以太主机或路由器和一条链路的接口,一个路由器至少连两个网络,所以路由器只收有2个ip地址。
子网划分
通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。
IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}
要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。
注意,外部网络看不到子网的存在。
无分类
无分类编址 CIDR (Classless Inter-Domain Routing)特点:
1)消除了传统 A 类、B 类和 C 类地址以及划分子网的概念
2)使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。
IP 地址 ::= {< 网络前缀号 >, < 主机号 >}
CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。
CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。
例如:/20地址块的地址掩码为 11111111 11111111 11110000 00000000(20个连续的1)
一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网 。
在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。
地址解析协议ARP
ARP解决的问题:
知道一个机器(主机或者路由器)的IP地址,需要找出其对应的硬件地址(MAC地址),使用ARP协议。
和ARP相对应的有RARP协议,知道自己的MAC地址,找到RARP协议(DHCP协议中有这个功能)
ARP协议具体过程:
网络层使用的是IP地址,但在网络的链路上传输数据帧时,还是要用到MAC地址。
每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。
1.如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组;
2.主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。
为什么需要ARP协议,而不是直接使用MAC地址进行通信?
全球不同的网络使用不同的硬件地址。要使这些异构网络相互通信需要用户进行复杂的硬件地址转换工作。
但使用IP就让问题简单了,有IP的双方就像连在一个网络上,中间过程不可见。
网际报文控制协议ICMP
概念
ICMP(Internet Control Message Protocol) 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议。
ICMP分类
ICMP 报文分为差错报告报文和询问报文。
应用
ping:
Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。
Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。
traceroute(Windows 下:tracert)
Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。
先开始TTL为1,到了某个路由器上,路由器丢弃报文,发送ICMP时间超过差错报告报文。
然后TTL增加,为2,为3…,直到到达目的主机,目的主机最后另外处理。
Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,最后由目的主机发送终点不可达差错报告报文。
虚拟专用网VPN
应用对象:
一个很大的机构的许多部门分布的范围很广(世界各地),这些部门要交换信息,有两种方式:
1)租用电信公司的通信线路,成本高,无法承受。
2)利用共用的互联网作为本机构各专用网之间的通信载体,这种专用网叫VPN(Virtual Private Network)。
由于 IP 地址的紧缺,一个机构能申请到的 IP 地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的 IP 地址(专用地址)。
有三个专用地址块:
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
VPN 使用公用的互联网作为本机构各专用网之间的通信载体。专用指机构内的主机只与本机构内的其它主机通信;虚拟指好像是,而实际上并不是,它有经过公用的互联网。
下图中,场所 A 和 B 的通信经过互联网,如果场所 A 的主机 X 要和另一个场所 B 的主机 Y 通信,IP 数据报的源地址是 10.1.0.1,目的地址是 10.2.0.3。数据报先发送到与互联网相连的路由器 R1,R1 对内部数据进行加密,然后重新加上数据报的首部,源地址是路由器 R1 的全球地址 125.1.2.3,目的地址是路由器 R2 的全球地址 194.4.5.6。路由器 R2 收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为 10.2.0.3,就交付给 Y。
网络地址转换NAT
NAT的应用场景:
专用网内部的一些主机已经分配到了本地IP地址(本专用网内使用的专用地址),但又想和互联网上的主机通信(不需要加密),采取什么措施?
网络地址转换(Network Address Translation)需要在专用网连接到互联网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。使用本地地址的主机在和外接通信时,通过NAT路由器转换成全球IP地址,才能与互联网连接。
但这样的一个问题,外部主机如何访问专用网内的主机?NAPT!
使用端口号的NAT叫做网络地址与端口号转换NAPT(Network Address and Port Translation),不使用端口号的NAT叫做传统的NAT。
当一个外部的数据包想发到专用网内的主机时,NAPT从IP数据包部分找出传输层的端口号,根据不同的端口号,从NAPT表中找到正确的目的主机,然后将数据发给专用网内部的主机。
路由器的结构
路由器从功能上可以划分为:路由选择和分组转发。
分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。
路由器分组转发流程
转发和路由选择的区别
转发:路由器根据转发表把收到的IP数据报从路由器合适的端口发送出去,转发只关系到一个路由器。
路由选择:涉及到很多路由器,然后根据网络状态生成路由表。
路由表总是用软件实现,但转发表可用特殊的硬件实现。
转发流程
1.从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。
2.若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付;
3.若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;
4.若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器;
5.若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;
报告转发分组出错。
路由选择协议
互联网把路由选择协议划分为2大类:
1)内部网关协议IGP(Interior Gateway Protocol) RIP和OSPF协议
2)外部网关协议EGP(External Gateway Protocol) BGP协议
内部网关协议RIP
RIP(Routing Information Protocol)是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,最大优点是简单。
上面距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。
RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。
距离向量算法:
1)当前路由器地址为 X,它 的相邻路由器发来 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加 1;
2)对修改后的 RIP 报文中的每一个项目,进行以下步骤:
若原来的路由表中没有目的网络 N,则把该项目添加到路由表中;
否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目;否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。
3)若 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16。
RIP 协议实现简单,开销小。但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。
RIP协议是以Bellman-Ford最短路径算法为原型的。
内部网关协议 OSPF
开放最短路径优先(Open Shortest Path First)用了Dijkstra的最短路径算法SPF。
OSPF 具有以下特点:
- 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。
- 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。
- 只有当链路状态发生变化时,路由器才会发送信息。
所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。
OSPD直接使用IP数据包传送(IP数据包的首部字段值为89)。
外部网关协议
BGP(Border Gateway Protocol,边界网关协议)
内部网关协议和外部网关协议的区别主要是什么?
IGP主要是设法使数据报在一个AS中尽可能有效地从源站传送到目的站;
EGP的环境有两点不同:1)互联网规模很大;2)各个 AS 内部使用不同的路由选择协议,无法准确定义路径的度量;3)AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。
BGP 只能寻找一条比较好的路由,而不是最佳路由。
每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。
参考
1.GitHub@CyC2018
2.计算机网络-谢希仁