【计算机网络笔记】- 4.网络层概述
文章目录
- 1.网络层提供的两种服务
- 2.虚拟互联网
- 3.IP层次结构
- 4.地址解析协议 ARP 和逆地址解析协议 RARP
- 5.IP地址和硬件地址(MAC地址)
- 6.IP 数据报的格式
- 7.IP 层转发分组的流程
- 8.网际控制报文协议 ICMP
- 9.因特网的路由选择协议
- 10.内部网关协议 RIP (Routing Information Protocol)
- 11.内部网关协议 OSPF (Open Shortest Path First)
- 12.外部网关协议 BGP
- 13.路由器
- 14.虚拟专用网 VPN 和网络地址转换 NAT
1.网络层提供的两种服务
网络层关注的是如何将分组从源端沿着网络路径送达目的端。
在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接"还是“无连接”)曾引起了长期的争论。争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统?
两种服务:网络层应该向运输层提供怎样的服务?
- 虚电路服务
- 数据报服务
虚电路服务
虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照路由发方式传送,而并不是真正建立了一条物理连接。
请注意,电路交换的电话通信是先建立了一条真正的连接。因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。
H1发送给H2的所有分组都沿着同一条虚电路传送,如果电路上出现问题,数据就不能成功发送,数据只能按照规定的路线发送。
可以不需要标出地址
数据报服务
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接。每一个分组(即IP数据报)独立发送,与其前后的分组无关(不进行编号)。
网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
尽最大努力交付的好处:
- 由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)
- 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)。
- 采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
- 因特网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。
需要在数据包中标明源地址和要发送到的地址。
H1发送给H2的分组可能沿着不同路径传送
虚电路与数据报服务的比较
2.虚拟互联网
网络间互连的设备
中间设备又称为中间系统或中继(relay)系统。
- 物理层中继系统:转发器(repeater)。
- 数据链路层中继系统:网桥或桥接器(br idge)。
- 网络层中继系统:路由器(router)。
- 网络层以上的中继系统:网关(gateway)。(现认为网关就是路由器的接口)
路由器
当中继系统是转发器或网桥时,一般并不称之为网络互连,因为这仅供通信一个网络扩大了,而这仍然是一个网络。
网关由于比较复杂,目前使用得较少。
互联网都是指用路由器进行互连的网络。
由于历史的原因,许多有关TCP/IP 的文献将网络层使用的路由器称为网关。
一般路由器网关会默认设置路由器接口第一个地址。
网络互连的问题
互连在一起的网络要进行通信,会遇到许多问题需要解决,如:
- 不同的寻址方案
- 不同的最大分组长度
- 不同的网络接入机制
- 不同的超时控制
- 不同的差错恢复方法
- 不同的状态报告方法
- 不同的路由选择技术
- 不同的用户接入控制
- 不同的服务( 面向连接服务和无连接服务)
- 不同的管理与控制方式
数据包在互联网中的传播
互联网与虚拟互联网
虚拟互联网络
所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用IP 协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络。
使用IP 协议的虚拟互连网络可简称为IP网。
使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的各具体的网络异构细节。
IP协议
网际协议IP 是TCP/IP体系中两个最主要的协议之一。与IP 协议配套使用的还有四个协议:
- 地址解析协议ARP (Address Resolution Protocol)
- 逆地址解析协议RARP (Reverse Address Resolut ion Protocol)
- 网际控制报文协议ICMP (Internet Control Message Protocol)
- 网际组管理协议IGMP (Internet Group Management Protocol)
网络层四个协议的关系(层次)
3.IP层次结构
层次化IP地址
网络地址
网络地址( 也可以称为网络号)唯一指定了每个网络。同一网络中的每台计算机都共享相同的网络地址,并用它作为自己IP地址的一部分。
二进制与十进制间的关系
IP地址的分类(类别划分)
按照IP地址高位特征0、10、110、1110、11110,将IP地址分为A类、B类、C类、D类和E类。下面介绍A类、B类、C类、D类和E类地址二进制特征,以及各类网络的网络数量和可用的主机地址数量
A类地址
, IP地址方案的设计者指定,在一个A类网络地址中,其第一字节的第一位必须一直是0,或是被设置为off。
这就意味着一个A类地址,它的第一个字节的取值必须是介于0和127之间的。
一个A类网络的第一个八位位组的取值在0到127之间,并且它不可以比这个取值范围更大或更小(0和1 27在A类地址中是不合法的,
第一个字节被用来表示网络地址而其后面的3个字节被用来表示结点地址。A类地址的格式是:
网络.结点.结点.结点
例如,在IP地址49.22.102.70中,49就是网络地址,而22.102.70就是结点地址。在这个指定网络上的每一台机器都要使用这个网络地址49。
B类地址
在B类地址中,RFC要求其第一个字节的第一位必须一直被置为on,但是第二位也必须一直被置为off,如图3-4所示,如果将其他6位全部都置为off,然后再置为on,
将可以得到B类网络的地址取值范围:
1 0000000 = 128
10111111 = 191
)B类网络它的首字节定义在128到191之间。
在一个B类网络地址中,其前面两个字节是被用来表示网络地址的,而剩下的两个字节是用来表示结点地址的。它的格式是:
网络.网络.结点.结点
例如,在IP地址I 72.16. 30.56中,网络地址是172.16,而其结点地址是30.56。
C类地址
对于C类网络,RFC要求它的第一个八位位组的前面两位要一直被置为on,但是第三位决不可以是on。进行同前面两类地址一样的处理,即将二进制转换到十进制,从而找出它的范围。下面就是一个C类网络地址的范围:
1 1000000 = 192
11011111 = 223
如果见到一个IP地址起始于192并直到223,便可以认定它是一个C类地址。
一个C类网络地址的前3个字节用来表示网络号,只有一个字节被用来表示结点地址。它的格式是:
网络.网络.网络.结点
在IP地址为192.168.100.102的示例中,它的网络地址是192.168.100,而它的结点地址是102。
D类和E类地址
介于224和255之间的地址被保留用做D类和E类网络。
D类是用于多播( 也称为组播)的地址(224到239),希望读者能够记住多播地址的范围,因为有些病毒除了在网络中发送广播还有可能发送多播数据包,你使用捕包工具排除网络故障,你必须能够断定捕获的网络中的数据包是多播还是广播。
而E类(240到255) 用于科学实验,
在本书中并不讨论D类和E类网络地址。
127是计算机的本地环回地址。指代主机本机。类似于java中的this。
路由器不同接口必须在不同的网段,即不同接口连接的网络号必须不同(222.1.5,222.1.4,222.1.3)
几个特殊的地址(保留IP地址)
有些IP地址被保留用于某些特殊目的,网络管理员不能将这些地址分配给结点。
下面列出了这些被排除在外的地址,并说明了为什么要保留。
- 整个IP地址设置为1的地址它不被路由但会被送到相同物理网络段上的所有主机,IP地址的网络字段和主机字段全为1就是地址255.255.255.255.
- 节点地址全0的地址特指某个网段比如192.168.10.0,指的是192.168.10.0网络地址。
- 节点地址全为1的地址网络广播会被路由,并会发送到专门网络上的每台主机,IP地址的网络字段定义这个网络,主机字段通常全为1,如192.168.10.255.
- 127.0.0.1被保留用于环回测试,指向本地节点,任何计算机都可以用该地址访问自己的共享资源或网站,并且允许该节点发送测试数据包给自己而不产生网络流量。
一、0.0.0.0
严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。它表示的是这样一个集合:所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一律送进去。如果你在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由。
二、255.255.255.255
限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机。如果翻译成人类的语言,应该是这样:“这个房间里的所有人都注意了!”这个地址不能被路由器转发。
三、127.0.0.1
本机地址,主要用于测试。用汉语表示,就是“我自己”。在Windows系统中,这个地址有一个别名“Localhost”。寻址这样一个地址,是不能把它发到网络接口的。除非出错,否则在传输介质上永远不应该出现目的地址为“127.0.0.1”的数据包。
四、224.0.0.1
组播地址(D类地址),注意它和广播的区别。从224.0.0.0到239.255.255.255都是这样的地址。224.0.0.1特指所有主机,224.0.0.2特指所有路由器。这样的地址多用于一些特定的程序以及多媒体程序。如果你的主机开启了IRDP(Internet路由发现,使用组播功能)功能,那么你的主机路由表中应该有这样一条路由。
五、169.254.x.x
如果你的主机使用了DHCP功能自动获得一个IP地址,那么当你的DHCP服务器发生故障,或响应时间太长而超出了一个系统规定的时间,Wingdows系统会为你分配这样一个地址。如果你发现你的主机IP地址是一个诸如此类的地址,很不幸,十有八九是你的网络不能正常运行了。
六、10.x.x.x、172.16。x。x~172.31。x。x、192.168。x。x
私有地址,这些地址被大量用于企业内部网络中。一些宽带路由器,也往往使用192.168.1.1作为缺省地址。私有网络由于不与外部互连,因而可能使用随意的IP地址。保留这样的地址供其使用是为了避免以后接入公网时引起地址混乱。使用私有地址的私有网络在接入Internet时,要使用地址翻译(NAT),将私有地址翻译成公用合法地址。在Internet上,这类地址是不能出现的。
对一台网络上的主机来说,它可以正常接收的合法目的网络地址有三种:本机的IP地址、广播地址以及组播地址。
七、127.0.0.1与localhost的区别
相信有人会说是本地ip,曾有人说,用127.0.0.1比localhost好,可以减少一次解析。
看来这个入门问题还有人不清楚,其实这两者是有区别的。
localhost也叫local ,正确的解释是:本地服务器
127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器)
localhot(local)是不经网卡传输!这点很重要,它不受网络防火墙和网卡相关的的限制。
127.0.0.1是通过网卡传输,依赖网卡,并受到网络防火墙和网卡相关的限制。
一般设置程序时本地服务用localhost是最好的,localhost不会解析成ip,也不会占用网卡、网络资源
自动私有IP地址169 254.0.0
169.254.X.x实际上是自动私有IP地址。
在Windows 2000以前的系统中,如果计算机无法获取IP地址,则自动配置成“IP地址: 0.0.0.0” 、“子网掩码: 0.0.0.0”的形式,导致其不能与其它计算机进行通信。
而对于Windows 2000以后的操作系统则在无法获取IP地址时自动配置成“IP地址:169.254.X.X”、子网掩码: 255.255.0.0” 的形式,这样可以使所有获取不到IP地址的计算机之间能够通信。
私有ip地址
创建IP寻址方案的人创建了私有IP地址。
这些地址可以被用于私有网络,在Internet上的路由器上没有到私有网络的路由表。
这个设计主要是为了满足广泛需要的安全目的,同时也很有效地节省了宝贵的IP地址空间。
如果每个网络上的每台主机都必须有真正可路由的IP地址我们将在几年前用尽可用的IP地址。但通过使用私有IP地址,ISP、公司和家庭用户只需要一个或几个公网地址来将他们的网络连接到Internet。
由于他们可以在自己的网络内部使用私有IP地址并运行良好,所以使用私有IP是很经济的。
以下列出保留的私有IP地址
- A类10.0.0.0–10.255.255.255保留了一个A类网络
- B类172.16.0.0–172.31.255.255保留了32个B类网络
- C类192.168.0.0–192.168.255.255保留了256个C类网络
如果你负责为一个公司规划网络是,到底是用哪一类私有地址呢?
- 如果公司目前有7个部门,每个部门不超过200个计算机,你可以考虑是用保留的C类私有地址。
- 如果你负责给石家庄教委规划网络,石家庄市教委和石家庄市的所有几百所中小学的网络连接,网络规模较大,你应该选择保留的A类私有网络地址,最好用10.0.0.0网络地址并带有/24的子网掩码,可以有65536个网络可供你使用,并且每个网络允许带有254台主机
子网掩码
子网掩码(subnet mask)又叫网络掩码、地址掩码,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
如果一台计算机的IP地址配置为172.16.122.204,子网掩码为255.255.0.0。将其IP地址和子网掩码都写成二进制,进行与运算,即1和1与运算得1,0和1或1和0做与运算都得0。这样经过IP地址和子网掩码做完与运算后,主机位不管是什么值都归零,网络位的值保持不变,这样就得到该计算机所处的网段为172.16.0.0。
子网掩码的作用
子网掩码很重要,配置错误会造成计算机通信故障。计算机和其他计算机通信时,首先断定目标地址和自己是否在一个网段,先用自己的子网掩码和自己的IP地址进行与运算得到自己所属的网段,再用自己的子网掩码和目标地址进行与运算计算机目标地址所属的网段。
如果不在同一个网段则使用网关的MAC地址封装数据帧,这会将数据帧转发给路由器即网关。如果相同则直接使用目标IP地址的MAC地址封装数据帧,直接把数据帧发给目标IP地址。
A类网络缺省子网掩码: 255.0.0.0
B类网络缺省子网掩码: 255.255.0.0
C类网络缺省子网掩码: 255.255.255.0
子网划分
CRID
CIDR (无类域间路由,Classless Inter-DomainRouting)是一个在Internet. 上创建附加地址的方法,这
些地址提供给Internet服务提供商(ISP) ,再由ISP分配给客户。
CIDR将路由集中起来,使- -个IP地址段代表主要骨干提供商服务的几千个IP地址段,从而减轻Internet路由器的路由表。
所有发送到这些地址的信息包都被送到网通或电信等ISP
C类网络等分成两个子网
一个网段的情况:
虽然路由器可以使用该网段的任何可用的IP地址,为了避免该网段计算机的地址和路由器的地址神突,一般将路由器设置为该网段的第一个可用的IP地址或最后一个可用的IP地址。
现在将192.1 68.0.0255.255.255.0这个C类地址划分成两个网段。
等分成4个子网
假如公司有4个部门,每个部门有50台计算机,现在使用192.168.0.0/24这个C类网段,从安全考虑你打算每个部门的计算机放置到独立的网段,这就要求你将1 92.1 68.0.0/24这个C类网络划分为4个网段,如何划分子网呢?
等分为8个子网
如果想把一个C类网络等分成8个子网,子网掩码需要往右移3位,才能划分出8个子网,第8位、第7位和第6位都变成网络位。
点到点网络的子网掩码最好是252
划分子网的规律
从255开始除2
超网
某企业有一个网段,该网段有200台计算机,使用192.168.0.0, 255.255.255.0网段。 后来计算机数量增加到400台计算机,由于某种屏幕广播软件的应用,屏幕广播软件不能跨网段,这些计算机必须在一个网段。
在该网络中添加交换机,可以扩展该网段的规模,IP地址不够用,再添加一个C类地址,192.168.1.0
255.255.255.0。这些计算机物理上在- -个网段,但是IP地址没在一-个网段,即逻辑上不在一-个网段。如果想让这些计算机能够通信,可以在路由器的接口添加这两个C类网络的地址作为这两个子网的网关。
在这种情况下,A计算机到B计算机通信,必须通过路由器转发,如图,这样两个子网能够通信,本来这些计算机物理上在一个网段,还需要路由器转发,效率不高。
如何让两个子网的计算机划分在一个网段呢?
如图所示,将192.168.0.0和192.168.1.0 两个C类网络合并。将IP地址第3个字节和4字节写成二进制,可以看到将子网掩码往左移动1位,网络部分就一样了,这两个网段就在一个网段了 。
合并后的网段子网掩码为: 255.255.254.0, 可用地址为192.168.0.1——192.168.1.254, IP地址的配置如图所示。
合并网络的规律
以上讲了合并两个C类网络192.168.0.0 ,255.255.255.0和192.168.1.0,255.255.255.0子网掩码往左移一位,可以合并为192.168.0.0 255.255.254.0.
- 向左移动1位子网掩码可以合并0、1网络,也可以合并2、3网络,也可以合并4、5网络,也可以合并6、7网络。
- 通过向左移动2位子网掩码可以将连续的0、1、2、3网络合并成-一个网络,也可将连续的4、5、6、7网络合并成一个网络。
- 通过向左移动3位子网掩码,可以将0、1、2、3、4、5、6、7网络合并成一个网络,如图所示。
这个 ISP 共有 64 个 C 类网络。如果不采用 CIDR 技术,则在与该 ISP 的路由器交换路由信息的每一个路由器的路由表中,就需要有 64 个项目。但采用地址聚合后,只需用路由聚合后的 1 个项目 206.0.64.0/18 就能找到该 ISP。
4.地址解析协议 ARP 和逆地址解析协议 RARP
地址解析协议 ARP
不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。
ARP 高速缓存的作用
为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。
当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便了。
ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
ARP协议的重点内容
如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址。
使用 ARP 的四种典型情况
发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
什么不直接使用硬件地址进行通信?
由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使s这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。
连接到因特网的主机都拥有统一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为调用 ARP 来寻找某个路由器或主机的硬件地址都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。
逆地址解析协议 RARP
逆地址解析协议 RARP 使只知道自己硬件地址的主机能够知道其 IP 地址。
这种主机往往是无盘工作站。 因此 RARP协议目前已很少使用。
5.IP地址和硬件地址(MAC地址)
两个主机之间的通信过程
1.交换机基于数据帧的MAC地址转发数据帧,路由器基于数据包的IP地址转发数据包
2.数据包在传输过程不变,过网络设备数据帧要用新的物理层地址重新封装
3.MAC地址决定了数据帧下一跳哪个设备接收,而IP地址决定了数据包的起点和终点
6.IP 数据报的格式
- 一个 IP 数据报由首部和数据两部分组成。
- 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
- 在首部的固定部分的后面是一些可选字段,其长度是可变的。
首部20固定字节
1. IP 数据报首部的固定部分中的各字段
版本
版本——占 4 位,指 IP 协议的版本。目前的 IP 协议版本号为 4 (即 IPv4)
首部长度
首部长度——占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节)因此 IP 的首部长度的最大值是 60 字节。
区分服务
区分服务——占 8 位,用来获得更好的服务。在旧标准中叫做服务类型,但实际上一直未被使用过。
1998 年这个字段改名为区分服务。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段 。
可以用来区分数据包的重要程度,比如再打电话的时候下载文件。此时打电话占用的数据包就就比下文件的重要,当打电话和下文件的数据包同时到来时,会先处理打电话需要的数据包。
总长度
总长度——占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。总长度必须不超过最大传送单元 MTU。
标识
标识(identification) 占 16 位,它是一个计数器,用来产生数据报的标识。
没产生一个数据包加一,注意此处产生的数据包是指由网络层产生的数据包,不包括在物理层发送时因为大于MTU而被分片的,一个数据包被分片后,其每个分片的标识和源数据包相同,不会自增。
标识是方便接收端要按照原有数据拼接数据包中的数据。
标志(flag)
标志(flag) :占 3 位,目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)。
- MF=1 表示后面“还有分片”。MF = 0 表示最后一个分片。
标志字段中间的一位是 DF (Don’t Fragment) 。
- 只有当 DF = 0 时才允许分片。
片偏移
片偏移(12 位)指出:较长的分组在分片后,某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
IP 数据报分片
把首部去掉。只对数据包之中的数据进行分割。
生存时间TTL
生存时间(8 位)记为 TTL (Time To Live):数据报在网络中可通过的路由器数的最大值。
TTL的初始值不固定,但是经过一个路由器TTL,值减一,当路由器识别的TTL=0的时候,路由器就会丢弃该数据包。
设置TTL的目的是,防止一个数据包在路由器间进行循环传播。
ping命令就可以看到TTL
在ping后面加i可以指定TTL的大小
协议
协议(8 位)字段指出此数据报携带的数据使用何种协议,以便目的主机的 IP 层将数据部分上交给哪个处理过程
指网络层上层使用的协议
协议号对应的协议(部分)
首部检验和
首部检验和(16 位)字段只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
生成校验和的方式:
源地址和目的地址
源地址和目的地址都各占 4 字节
2. IP 数据报首部的可变部分
- IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
- 选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。
- 增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。
- 实际上这些选项很少被使用。
通过抓包抓到的数据包首部信息
7.IP 层转发分组的流程
能正常方式数据的必要条件
- 数据路由路 由器在不同网段转发数据包
- 网络畅通的条件能去能回
- 沿途的路由器必须知道到目标网络下一跳给哪个接口
- 沿途的路由器必须知道到源网络下一跳给哪个接口
➢如图所示,,计算机PC0 pingPC1,网络要想通,要求沿途的路由器Router0、Router1、 Router2和Router3都必 须有到192.168.1.0/24网段的路由,这样数据包才能到达PC1.
➢PC1要回应数据包给PC0,沿途所有的路由器必须有到192.168.0.0/24网络的路由,这样数据包才能回来。
路由器的路由表可以通过路由器的协议自动学习来进行记录,也可以通过网络管理员来设置静态的路由表,现在我们来讲一下静态路由
静态路由
- 路由器可采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间。
- 这种转发方式在一个网络只有很少的对外连接时是很有用的。
- 默认路由在主机发送 IP 数据报时往往更能显示出它的好处。
- 如果一个主机连接在一个小网络上,而这个网络只用一个路由器和因特网连接,那么在这种情况下使用默认路由是非常合适的。
添加静态路由的方法:
要注意
- IP 数据报的首部中没有地方可以用来指明“下一跳路由器的 IP 地址”。
- 当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件。
- 网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。
分组转发算法
- (1) 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
- (2) 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。
- (3) 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
- (4) 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。
- (5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
- (6) 报告转发分组出错。
8.网际控制报文协议 ICMP
- 为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。
- ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。
- ICMP 不是高层协议,而是 IP 层的协议。
- ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。
ICMP报文格式
通过抓包获得的ICMP报文的格式:
ICMP报文的类型
ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。
ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。
ICMP 差错报告报文共有 5 种
- 终点不可达
- 源点抑制(Source quench)
- 时间超过
- 参数问题
- 改变路由(重定向)(Redirect)
ICMP 差错报告报文的数据字段的内容
不应发送 ICMP 差错报告报文的几种情况
- 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
- 对具有多播地址的数据报都不发送 ICMP 差错报告报文。
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
ICMP 询问报文有两种
- 回送请求和回答报文
- 时间戳请求和回答报文
请求报文
请求报文的具体内容:
请求报文会在内容部分加上a-i
ICMP返回报文:
返回报文会把请求报文的数据返回。
以上请求和返回的ICMP报文会在Ping时使用。
- PING 用来测试两个主机之间的连通性。
- PING 使用了 ICMP 回送请求与回送回答报文。
- PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP。
下面的几种 ICMP 报文不再使用
- 信息请求与回答报文
- 掩码地址请求和回答报文
- 路由器询问和通告报文
9.因特网的路由选择协议
有关路由选择协议的几个基本概念
1.理想的路由算法
- 算法必须是正确的和完整的。
- 算法在计算上应简单。
- 算法应能适应通信量和网络拓扑的变化,这就是说,要有自适应性。
- 算法应具有稳定性。
- 算法应是公平的。
- 算法应是最佳的。
最佳路由
- 不存在一种绝对的最佳路由算法。
- 所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。
- 实际的路由选择算法,应尽可能接近于理想的算法。
路由选择是个非常复杂的问题
- 它是网络中的所有结点共同协调工作的结果。
- 路由选择的环境往往是不断变化的,而这种变化有时无法事先知道。
从路由算法的自适应性考虑
静态路由选择策略——即非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。
动态路由选择策略——即自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。
2. 分层次的路由选择协议
因特网采用分层次的路由选择协议。
- 因特网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需的带宽就会使因特网的通信链路饱和。
- 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到因特网上。
自治系统 AS(Autonomous System)
- 自治系统 AS 的定义:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。
- 现在对自治系统 AS 的定义是强调下面的事实:尽管一个 AS 使用了多种内部路由选择协议和度量,但重要的是一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。
因特网有两大类路由选择协议
- 内部网关协议 IGP (Interior Gateway Protocol) 即在一个自治系统内部使用的路由选择协议。目前这类路由选择协议使用得最多,如 RIP 和 OSPF 协议。
- 外部网关协议EGP (External Gateway Protocol) 若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议 EGP。在外部网关协议中目前使用最多的是 BGP-4。
自治系统和内部网关协议、外部网关协议
- 自治系统之间的路由选择也叫做域间路由选择(interdomain routing),
- 在自治系统内部的路由选择叫做域内路由选择(intradomain routing)
这里要指出两点
- 因特网的早期 RFC 文档中未使用“路由器”而是使用“网关”这一名词。但是在新的 RFC 文档中又使用了“路由器”这一名词。应当把这两个属于当作同义词。
- IGP 和 EGP 是协议类别的名称。但 RFC 在使用 EGP 这个名词时出现了一点混乱,因为最早的一个外部网关协议的协议名字正好也是 EGP。因此在遇到名词 EGP 时,应弄清它是指旧的协议 EGP 还是指外部网关协议 EGP 这个类别。
10.内部网关协议 RIP (Routing Information Protocol)
最早的动态路由协议
工作原理
- 路由信息协议 RIP 是内部网关协议 IGP中最先得到广泛使用的协议。
- RIP 是一种分布式的基于距离向量的路由选择协议。
- RIP 协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。
“距离”的定义
- 从一路由器到直接连接的网络的距离定义为 1。
- 从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。
- RIP 协议中的“距离”也称为“跳数”(hop count),因为每经过一个路由器,跳数就加 1。
- 这里的“距离”实际上指的是“最短距离”,
- RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”。
- RIP 允许一条路径最多只能包含 15 个路由器。
- “距离”的最大值为16 时即相当于不可达。可见 RIP 只适用于小型互联网。
- RIP 不能在两个网络之间同时使用多条路由。RIP 选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
RIP 协议的三个要点
- 仅和相邻路由器交换信息。
- 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
- 按固定的时间间隔交换路由信息,例如,每隔 30 秒。
动态路由表的建立过程
- 路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为1)。
- 以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
- 经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
- RIP 协议的收敛(convergence)过程较快,即在自治系统中所有的结点都得到正确的路由选择信息的过程。
距离向量算法
收到相邻路由器(其地址为 X)的一个 RIP 报文:
- (1) 先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。
- (2) 对修改后的 RIP 报文中的每一个项目,重复以下步骤:
若项目中的目的网络不在路由表中,则把该项目加到路由表中。
否则
若下一跳字段给出的路由器地址是同样的,则把收到的项 目 替换原路由表中的项目。
否则
若收到项目中的距离小于路由表中的距离,则进行更新,
否则,什么也不做。 - (3) 若 3 分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为16(距离为16表示不可达)。
- (4) 返回。
RIP协议的报文格式
RIP的报文由首部和路由部分组成。
- RIP2 报文中的路由部分由若干个路由信息组成。每个路由信息需要用 20 个字节。地址族标识符(又称为地址类别)字段用来标志所使用的地址协议。
- 路由标记填入自治系统的号码,这是考虑使RIP 有可能收到本自治系统以外的路由选择信息。再后面指出某个网络地址、该网络的子网掩码、下一跳路由器地址以及到此网络的距离
RIP 协议的优缺点
- RIP 存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。
- RIP 协议最大的优点就是实现简单,开销较小。
- RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
- 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。
- R1 收到 R2 的更新报文后,误认为可经过 R2 到达网1,于是更新自己的路由表,说:“我到网 1 的距离是 3,下一跳经过 R2”。然后将此更新信息发送给 R2。
- R2 以后又更新自己的路由表为“1, 4, R1”,表明 “我到网 1 距离是 4,下一跳经过 R1”。
这就是好消息传播得快,而坏消息传播得慢。网络出故障的传播时间往往需要较长的时间(例如数分钟)。这是 RIP 的一个主要缺点。
这样不断更新下去,直到 R1 和 R2 到网 1 的距离都增大到 16 时,R1 和 R2 才知道网 1 是不可达的。
11.内部网关协议 OSPF (Open Shortest Path First)
OSPF 协议的基本特点
- “开放”表明 OSPF 协议不是受某一家厂商控制,而是公开发表的。
- “最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法SPF
- OSPF 只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。
是分布式的链路状态协议。
OSPF协议的过程
- 向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
- “链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。
- 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
每次交换相邻路由表的nr最终所有路由器都会得到一个自治域中所有路由的信息,然后根据该信息自动计算本机与其他路由表的距离(这一点与RIP不同,OFPS协议另一半是自动计算生成的,而RIP协议的路由表是通过与相邻路由表交换信息得到)
OSPF 的区域(area)
为了使 OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干个更小的范围,叫作区域。
每一个区域都有一个 32 位的区域标识符(用点分十进制表示)。
区域也不能太大,在一个区域内的路由器最好不超过 200 个。
OSPF 划分为两种不同的区域
- 划分区域的好处就是将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。
- 在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。
- OSPF 使用层次结构的区域划分。在上层的区域叫作主干区域(backbone area)。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。
OSPF 直接用 IP 数据报传送
- OSPF 不用 UDP 而是直接用 IP 数据报传送。
- OSPF 构成的数据报很短。这样做可减少路由信息的通信量。
- 数据报很短的另一好处是可以不必将长的数据报分片传送。分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。
OFPS的特点
- OSPF 对不同的链路可根据 IP 分组的不同服务类型 TOS 而设置成不同的代价。因此,OSPF 对于不同类型的业务可计算出不同的路由。
- 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫作多路径间的负载平衡。
- 所有在 OSPF 路由器之间交换的分组都具有鉴别的功能。
- 支持可变长度的子网划分和无分类编址 CIDR。
- 每一个链路状态都带上一个 32 位的序号,序号越大状态就越新。
- OSPF 还规定每隔一段时间,如 30 分钟,要刷新一次数据库中的链路状态。
- 由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF 协议要比距离向量协议 RIP 好得多。
- OSPF 没有“坏消息传播得慢”的问题,据统计,其响应网络变化的时间小于 100 ms。
OFPS协议的报文格式
OSPF 的五种分组类型
类型1,问候(Hello)分组。
类型2,数据库描述(Database Description)分组。
类型3,链路状态请求(Link State Request)分组。
类型4,链路状态更新(Link State Update)分组,
用洪泛法对全网更新链路状态。
类型5,链路状态确认(Link State Acknowledgment)
分组。
OFPS的基本操作
12.外部网关协议 BGP
BGP 是不同自治系统的路由器之间交换路由信息的协议。
BGP 较新版本是 2006 年 1 月发表的 BGP-4(BGP 第 4 个版本),即 RFC 4271 ~ 4278。
可以将 BGP-4 简写为 BGP。
因特网的规模太大,使得自治系统之间路由选择非常困难。对于自治系统之间的路由选择,要寻找最佳路由是很不现实的。
当一条路径通过几个不同 AS 时,要想对这样的路径计算出有意义的代价是不太可能的。
- 比较合理的做法是在 AS 之间交换“可达性”信息。
- 自治系统之间的路由选择必须考虑有关策略。
因此,边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
BGP 发言人(BGP speaker)
每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“ BGP 发言人” 。
一般说来,两个 BGP 发言人都是通过一个共享网络连接在一起的,而 BGP 发言人往往就是 BGP 边界路由器,但也可以不是 BGP 边界路由器。
BGP 交换路由信息
一个 BGP 发言人与其他自治系统中的 BGP 发言人要交换路由信息,就要先建立 TCP 连接,然后在此连接上交换 BGP 报文以建立 BGP 会话(session),利用 BGP 会话交换路由信息。
使用 TCP 连接能提供可靠的服务,也简化了路由选择协议。
使用 TCP 连接交换路由信息的两个 BGP 发言人,彼此成为对方的邻站或对等站。
BGP 发言人和自治系统 AS 的关系
BGP 所交换的网络可达性的信息就是要到达某个网络所要经过的一系列 AS。
当 BGP 发言人互相交换了网络可达性的信息后,各 BGP 发言人就根据所采用的策略从收到的路由信息中找出到达各 AS 的较好路由。
BGP 发言人交换路径向量
自治系统 AS2 的 BGP 发言人通知主干网的 BGP 发言人:“要到达网络 N1, N2, N3 和 N4 可经过 AS2。”
主干网还可发出通知:“要到达网络 N5, N6 和 N7 可沿路径(AS1, AS3)。”
BGP协议的特点
BGP 协议交换路由信息的结点数量级是自治系统数的量级,这要比这些自治系统中的网络数少很多。
每一个自治系统中 BGP 发言人(或边界路由器)的数目是很少的。这样就使得自治系统之间的路由选择不致过分复杂。
BGP 支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
在BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销方面都有好处。
BGP-4 共使用四种报文
(1) 打开(OPEN)报文,用来与相邻的另一个BGP发言人建立关系。
(2) 更新(UPDATE)报文,用来发送某一路由的信息,以及列出要撤消的多条路由。
(3) 保活(KEEPALIVE)报文,用来确认打开报文和周期性地证实邻站关系。
(4) 通知(NOTIFICATION)报文,用来发送检测到的差错。
在 RFC 2918 中增加了 ROUTE-REFRESH 报文,用来请求对等端重新通告。
BGP协议的报文格式
13.路由器
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。也就是说,将路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。
下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。
路由器的结构
“转发”和“路由选择”的区别
“转发”(forwarding)就是路由器根据转发表将用户的 IP 数据报从合适的端口转发出去。
“路由选择”(routing)则是按照分布式算法,根据从各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由。
路由表是根据路由选择算法得出的。而转发表是从路由表得出的。
在讨论路由选择的原理时,往往不去区分转发表和路由表的区别,
输入端口对线路上收到的分组的处理
数据链路层剥去帧首部和尾部后,将分组送到网络层的队列中排队等待处理。这会产生一定的时延。
输出端口将交换结构传送来的分组发送到线路
当交换结构传送过来的分组先进行缓存。数据链路层处理模块将分组加上链路层的首部和尾部,交给物理层后发送到外部线路。
分组丢弃
若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。
路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因。
14.虚拟专用网 VPN 和网络地址转换 NAT
虚拟专用网VPN
本地地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向因特网的管理机构申请。
全球地址——全球唯一的IP地址,必须向因特网的管理机构申请。
RFC 1918 指明的专用地址(private address)
10.0.0.0 到 10.255.255.255
172.16.0.0 到 172.31.255.255
192.168.0.0 到 192.168.255.255
这些地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信。
专用地址只能用作本地地址而不能用作全球地址。在因特网中的所有路由器对目的地址是专用地址的数据报一律不进行转发。
用隧道技术实现虚拟专用网
内联网 intranet 和外联网 extranet(都是基于 TCP/IP 协议)
由部门 A 和 B 的内部网络所构成的虚拟专用网 VPN 又称为内联网(intranet),表示部门 A 和 B 都是在同一个机构的内部。
一个机构和某些外部机构共同建立的虚拟专用网 VPN 又称为外联网(extranet)。
远程接入VPN(remote access VPN)
有的公司可能没有分布在不同场所的部门,但有很多流动员工在外地工作。公司需要和他们保持联系,远程接入 VPN 可满足这种需求。
在外地工作的员工拨号接入因特网,而驻留在员工 PC 机中的 VPN 软件可在员工的 PC 机和公司的主机之间建立 VPN 隧道,因而外地员工与公司通信的内容是保密的,员工们感到好像就是使用公司内部的本地网络。
总结
VPN技术的要点是:先要在本地的内联网中,申请VPN的端口让外网可以访问该IP,然后如果想要使用该内联网,就先要登录内联网开放出来的VPN,然后通过VPN来访问内联网资源,在这个过程中IP地址会被封装两次,一次封装的是内网要访问的资源的IP,然后把封装好的数据包当成数据信息进行二次封装,此时封装的是VPN公开在公网的地址。
网络地址转换 NAT (Network Address Translation
可以这么理解:VPN解决的是一个内联网如何与外网访问的问题,而NET技术则是解决了一台电脑由多个虚拟机时虚拟机与外网连接的问题。
网络地址转换 NAT 方法于1994年提出。
需要在专用网连接到因特网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球地址 IPG。
所有使用本地地址的主机在和外界通信时都要在 NAT 路由器上将其本地地址转换成 IPG 才能和因特网连接。
网络地址转换的过程
内部主机 X 用本地地址 IPX 和因特网上主机 Y 通信所发送的数据报必须经过 NAT 路由器。
NAT 路由器将数据报的源地址 IPX 转换成全球地址 IPG,但目的地址 IPY 保持不变,然后发送到因特网。
NAT 路由器收到主机 Y 发回的数据报时,知道数据报中的源地址是 IPY 而目的地址是 IPG。
根据 NAT 转换表,NAT 路由器将目的地址 IPG 转换为 IPX,转发给最终的内部主机 X。
参考:
韩老师讲高校《计算机网络原理》https://www.bilibili.com/video/BV1Tb411x7CE