计算机网络基础---网络层
网络层
网络层的主要任务:
分组转发
路由选择
网络互连的设备
物理层: 集线器
数据链路层:网桥,交换机
网络层:路由器
网络层以上:网关
概述
因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。
使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。
与IP协议配套使用的4个协议
- 地址解析协议 ARP(Address Resolution Protocol)
- 网际控制报文协议 ICMP(Internet Control Message Protocol)
- 网际组管理协议 IGMP(Internet Group Management Protocol)
IP协议
ip地址
IP地址的组成: 网络部分,主机部分
计算机的IP地址也有两部分组成,一部分为网络标识,一部分为主机标识,同一网段的计算机网络部分相同,路由器连接不同网段,负责不同网段之间的数据转发,交换机连接的是同一网段的计算机。
计算机在和其他计算机通信之前,首先要判断目标IP地址和自己的IP地址是否在一个网段,这决定了数据链层的目标MAC地址是目标计算机的还是路由器接口的MAC地址。
ip地址的结构
IP地址用32位二进制来表示,也就是32比特,换算成字节,就是4个字节。
这些位通常被分割为4个部分,每一部分8位二进制,中间使用符号“.”分开,
分成4部分的二进制地址,10101100.00010000.00011110.00111000,
IP地址经常被写成十进制的形式,于是,上面的IP地址可以表示为“172.16.30.56”。
IP地址的这种表示法叫做“点分十进制表示法”
子网掩码的作用
利用子网掩码和ip地址求网络号和主机号。(方法下面说)
子网掩码(Subnet Mask)又叫网络掩码、地址掩码,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。
子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
ip地址的分类
IP地址是由32位二进制数字构成,采用“点分十进制”方法表示的唯一地址。
通常区分如下: 1 五类IP 2 特殊用途的IP 3 私有IP
IPV4简单粗暴地把IP地址分为五类。分类方法如下图所示:
各类地址的特点
A: 0.0.0.0-127.255.255,其中段0和127不可用,可用地址范围1.0.0.0.-127.255.255.255
B: 128.0.0.0-191.255.255.255,其中可用地址范围128.0.0.0-191.255.255.255
C: 192.0.0.0-223.255.255.255其中可用地址范围192.0.0.0-223.255.255.255
D: 224.0.0.0-239.255.255.255其中可用地址范围224.0.0.0-239.255.255.255,用作广播地址
E: 240.0.0.0-255.255.255.255,其中段255不可用,用作保留使用
其中除了段0和段127之外,还有一些IP地址因为有其他的用途,是不可以用作普通IP的。还有一部分被用作私有IP地址。
特殊的地址:
127.0.0.1本地环回地址
169.254.0.0 表示如果没有路由器分配地址或者没有自己制定地址,就是默认地址
保留的私网地址:
私有地址(private address)也叫专用地址,它们不会在全球使用,只具有本地意义。 A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255 B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255 C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255
表示企业或者学校的私有网段,比如10.212.63...
不能通过ip地址找到(远程控制)
IP地址的编址方式
分类,子网划分,无分类
1:分类:
IP 地址 ::= {< 网络号 >, < 主机号 >} 也就是上面所说的ABCDE类地址
2:子网划分:
为什么要进行子网划分:
一个C类地址空间仅能容纳254台主机,对于许多组织来说网络太小。
因此要申请B类地址,然而一个B类地址空间有太大了能够容纳65534台主机,
导致大量的地址空间浪费。例如对一个拥有1000台主机的组织显然要申请B类地址,
但是会导致6400多个地址浪费,所以提出了子网划分。
通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。
IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}
利用ip地址和子网划分求网络地址,或者判断两个ip是否在同一个局域网类似的问题
1 要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就在同一子网,否则,不在同一子网。 2 例:假定选择了子网掩码255.255.254.0,现在分别将上述两个IP地址分别与掩码做与运算,如下图所示: 3 211.95.165.24 11010011 01011111 10100101 00011000 4 255.255.254.0 11111111 11111111 111111110 00000000 5 与的结果是: 11010011 01011111 10100100 00000000 6 7 211.95.164.78 11010011 01011111 10100100 01001110 8 255.255.254.0 11111111 11111111 111111110 00000000 9 与的结果是: 11010011 01011111 10100100 00000000 10 11 可以看出,得到的结果(这个结果就是网络地址)都是一样的,因此可以判断这两个IP地址在同一个子网。 12 13 14 15 16 17 例如:有一个C类地址为:192.9.200.13,按其IP地址类型,它的缺省子网掩码为:255.255.255.0,则它的网络号和主机号可按如下方法得到: 18 19 第1步,将IP地址192.9.200.13转换为二进制11000000 00001001 11001000 00001101 20 21 第2步,将子网掩码255.255.255.0转换为二进制11111111 11111111 11111111 00000000 22 23 第3步,将以上两个二进制数逻辑进行与(AND)运算,得出的结果即为网络部分。“11000000 00001001 11001000 00001101”与“11111111 11111111 11111111 00000000”进行“与”运算后得到“11000000 00001001 11001000 00000000”,即“192.9.200.0”,这就是这个IP地址的网络号,或者称“网络地址”。 24 25 第4步,将子网掩码的二进制值取反后,再与IP地址进行与(AND)运算,得到的结果即为主机部分。如将“00000000 00000000 00000000 11111111(子网掩码的取值)反”与“11000000 00001001 11001000 00001101”进行与运算后得到“00000000 00000000 00000000 00001101”,即“0.0.0.13”,这就是这个IP地址主机号(可简化为“13”)。 26 27 28 29 主机位中有3位被划为“网络标识号”占用,因网络标识号应全为“1”,所以主机号对应的字节段为“11100000”。转换成十进制后为224,这就最终确定的子网掩码。如果是C类网,则子网掩码为255.255.255.224;如果是B类网,则子网掩码为255.255.224.0;如果是A类网,则子网掩码为255.224.0.0。
注意,外部网络看不到子网的存在。
3:无分类编址
无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。
IP 地址 ::= {< 网络前缀号 >, < 主机号 >}
CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。
CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。
一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网 。
在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。
ip数据报的格式
版本: 占4位, 指协议的版本是IPV4还是IPV6, 目前用IPV4
首部长度:
因为一个IPv4的数据报包含一些可选项(包含在IP数据报的首部中),
所以首部长度并不是固定的,所以我们需要用“首部长度”这4比特来确定数据报中的数据部分是从哪里开始的。
如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充
区分服务:
用来获得更好的服务,一般情况下不使用
总长度:
包括首部长度和数据部分长度,单位为字节。指的是分片后的每一个分片的首部长度和数据部分长度。
标识,标志,片偏移
该三个字段和IP数据报分片有关(下面会细讲)
标识:
在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符(计数器)
片偏移:
和标识符一起,用于发生分片的情况。便于找到分组后的相对位置。片偏移的单位为 8 字节
课本140页例题4-3
生存时间:
TTL(Time To Live)他的存在是为了防止无法交付的数据报在互联网中不断兜圈子。
以路由跳数为单位,当TTL为0时就丢弃数据报(从路由器R1到R2,再到R3,然后有转发回R1)
协议:
该字段仅在一个IP数据报到达其最终目的时才会用到,
指出携带的数据应该上交给哪个协议进行处理,例如:ICPM,TCP, UDP。
首部检验和:
用于帮助路由器检测收到的IP数据报中的比特错误
源地址/目的地址:
当源主机产生一个数据报的时候, 它在源IP字段中插入它的IP地址,在目的IP地址字段中插入其最终目的地的地址
数据部分
是IP数据报最后的也是最重要的字段,
大多数情况下,IP数据报中的数据字段含有要交付给目的地的运输层报文段(TCP或UDP),
在少数情况下,也能承载其他类型的数据,例如ICMP报文。
IP数据报分片和重新组装
什么是分片
IP协议在传输数据报时会将数据报文分成若干片进行传输,
并在目标系统中进行重组。这个过程就是分片。
为什么要分片
由于数据链路层的数据帧要求数据字段不超过1500字节,所以当IP数据报加上数据帧的头部后(数据链路层的传输单位:数据帧)
大于1500字节就要分成许多片传输
重新组装:
重新组装成功进行的依据——标志, 标识和片偏移
- 怎么识别哪些数据报是来源于同一个初始数据报?
- 怎么确定当前接收的数据报是初始数据报的最后一个片? (如何确定接收完成)
- 怎么确保接收的小数据报能够以正确的顺序组装?
- 当发送主机创建一个数据报时, 发送主机会在该报文的标识字段中写入标识号, 标示号是一个每发送一次数据报就增加1的数字, 这为每个初始数据报提供了唯一标识
- 当路由器分片的时候,每个小数据报(片)的报文里除了附加初始数据报的源/目的主机地址外,还会附加初始数据报的标识号
网络层的协议
ARP协议:
ARP地址解析协议(Address Resolution Protcol)
网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。
因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变
ARP 实现由 IP 地址得到 MAC 地址。
每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。
如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,
此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,
随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。
(ARP发送广播)
网际控制报文协议 ICMP
ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议。
ICMP 报文分为差错报告报文和询问报文。
利用该协议的两个常用的应用
Ping
ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。
Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。
Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。
Traceroute
Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。
Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。
虚拟专用网VPN
Vpn工作的流程。当两个私有网络想要进行相互访问时。(在家里想要访问学校的网络)
需要一个中间的服务器。公网也不能访问私网地址。
23.23.2.20是一个公网其中10.0.0.8是一个个人私网地址(A),10.0.0.2是一个企业的私网地址(B)。
当A想要访问B时,需要B搭建一个服务器,让A拨通这个服务器后然后,通过这个服务器来访问B。
当A拨通服务器后,将两个私网地址(目的和源地址10.0...2 或者10..8)当做数据包,
这个数据包的源地址和目的地址是(个人网的公网地址23...20, 服务器地址23...2 )
给服务器,这时A就能连上B了
由于 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
私网A想要访问公网B,一般来说是能访问,但是不能接受数据,因为A是一个私网地址,
在任何一个局域网中都存在该网段,所以用NAT网络地址转换,
在NAPT转换表中存在公网地址就是该私网地址的全球IP
A通过该表后,用全球IP加端口号去访问B,然后就能回来了
路由器分组转发流程:
- 从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。
- 若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付;
- 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;
- 若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器;
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;
- 报告转发分组出错。
因特网路由选择协议--- RIP,OSPF,BGP
内部网关协议IGP:AS(自治系统)内使用的路由选择协议,主要有RIP,OSPF
外部网关协议EGP:AS之间使用的,主要有BGP
RIP:路由信息协议,分布式基于距离向量路由选择协议
OSPF:开放最短路径优先,分布式链路状态路由算法
BGP:边界网关协议,路径向量路由选择
内部网关协议RIP
RIP 是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。 RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。 距离向量算法: 对地址为 X 的相邻路由器发来的 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加 1; 对修改后的 RIP 报文中的每一个项目,进行以下步骤: 若原来的路由表中没有目的网络 N,则把该项目添加到路由表中; 否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目;否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。 若 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16。 RIP 协议实现简单,开销小。但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。
内部网关协议OSPF
开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的。
开放表示 OSPF 不受某一家厂商控制,而是公开发表的;最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。
OSPF 具有以下特点:
向本自治系统中的所有路由器发送信息,这种方法是洪泛法。
发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。
只有当链路状态发生变化时,路由器才会发送信息。
所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。
外部网关协议BGP
BGP(Border Gateway Protocol,边界网关协议)
AS 之间的路由选择很困难,主要是由于:
互联网规模很大;
各个 AS 内部使用不同的路由选择协议,无法准确定义路径的度量;
AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。
BGP 只能寻找一条比较好的路由,而不是最佳路由。
每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。