计算机网络
1. 计算机网络-网络层
1.1 网络层介绍
1.1.1 网络层概念
-
网络层是OSI参考模型中的第三层,介于传输层和数据链路层之间,它在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,将数据设法从源端经过若干个中间节点传送到目的端,从而向运输层提供最基本的端到端的数据传送服务
1.1.2 网络层功能目的
1.2 相关概念
1.2.1 电路交换网络
(1)定义
- 以电路联接为目的的交换方式构成的网络是电路交换网络
- 比如:电话网
- 一般应用于电信网络
(2)电路交换特性
- 电路交换连接建立后,物理通路被通信双方独占,即使通信线路空闲,也不能供其他用户使用,因此通信效率低
- 电路交换的动作,就是在通信时建立(即联接)电路(真实的链路),通信完毕时拆除(即断开)电路
1.2.2 分组交换网络
(1)数据报网络
-
数据报网络不是面向连接的服务
-
数据报网络将数据分割为众多分组,每个分组独立经过网络中的转发设备进行发送,到达目的地时再重新排序组合还原,实现数据的交换
-
所传送的分组可能出错、丢失、重复和失序(即不按顺序到达终点),实际上该网络提供的是不可靠传输服务,需要上层去提供可靠传输服务
(2)虚电路网络
-
虚电路是面向连接的网络服务
-
虚电路组成
- 从源到目的的路径
- VC号,标识沿路径每条链路的号码
- 沿路径路由器中转发表中的项
-
虚电路网络与交换网络最大的不同是两个通信主机在虚电路网络通信时,会事先建立一条虚拟通道,所有分组将沿着这条通道有序可靠地传输,在通信时该链路可以为两通信主机服务,同时也可以为别的主机进行通信服务(电路交换中的物理线路是被单独占用的),因此该电路只是逻辑上的专用通信电路
-
虚电路提供了可靠的通信功能,能保证每个分组的正确到达,且分组保持原来顺序
1.2.3 虚电路服务与数据报服务的对比
虚电路网络 | 数据报网络 | |
可靠性 | 提供可靠服务,由用户主机来保证 | 提供不可靠服务,可靠性应当由上层来保证 |
连接的建立 | 需要建立连接 | 不需要,由实时的网络设备状况决定分组的转发 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均由该链路上的路由进行转发 | 每个分组独立地由实时的网络设备状况决定分组的转发 |
分组顺序 | 总是按照发送顺序到达终点 | 到达终点时不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
2. 网络层中的协议
2.1 网际层协议(Internet Protocol ,IP)
2.1.1 IP协议介绍
(1)IP协议概念
-
IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议。
-
设计IP的目的是提高网络的可扩展性:
(2)IP协议提供不可靠传输服务
- 根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据报传输服务
(3)IP协议包含的方面
- IP编址方案、分组封装格式及分组转发规则
(4)IP地址概念
- 在网络上用于标识网络设备的标识,为逻辑地址
2.1.2 IPv4地址
(1)IPv4地址表示
- IP地址为32位二进制数,通常被分割为4个“8位二进制数”,即4个字节
- IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数
(2)IPv4地址分类
-
IPv4地址分类的最基本编制方法:(IPv4地址::={<网络号>,<主机号>})
类别 最大网络数 IP地址范围 单个网段最大主机数 私有IP地址范围 A 126((2^7)-2) 1.0.0.1-127.255.255.254 16777214((2^{24})) 10.0.0.0-10.255.255.255(10/8) B 16384((2^{14})) 128.0.0.0-191.255.255.255 65534((2^{16})) 172.16.0.0-172.31.255.255(172.16/16) C 2097152((2^{21})) 192.0.0.0-223.255.255.255 254((2^8)) 192.168.0.0-192.168.255.255(192.168/16) -
D类IP地址在历史上被叫做多播地址(multicast address),即组播地址。在以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的最高位必须是“1110”,范围从224.0.0.0到239.255.255.255
-
特殊IP地址:
- 每一个字节都为0的地址(“0.0.0.0”)对应于当前主机;
- 主机号全为0的地址表示该网段网络号
- 主机号全为1的IP地址表示当前子网的广播地址;
- IP地址中凡是以“11110”开头的E类IP地址都保留用于将来和实验使用。
- IP地址中不能以十进制“127”作为开头,该类地址中数字127.0.0.1到127.255.255.255用于回路测试
- 如:127.0.0.1可以代表本机IP地址,用“http://127.0.0.1”就可以测试本机中配置的Web服务器。
- 网络ID的第一个6位组也不能全置为“0”,全“0”表示本地网络
(3)子网
- 引入子网掩码(NetMask),从逻辑上把一个大网络划分成一些小网络。子网掩码是由一系列的1和0构成,通过将其同IP地址做“与”运算来指出一个IP地址的网络号是什么
- 例如:如果主机A的IP:166.111.1.1,子网掩码为255.255.255.0,其网络号为:166.111.1.0;再比如如果主机A的IP:166.111.1.1,子网掩码为255.255.254.0,其网络号为:166.111.0.0;
- 这个掩码长度必须为8的整数倍(0,8,16,24)
- 对于传统IP地址分类来说
- A类地址的子网掩码:255.0.0.0
- B类地址的子网掩码:255.255.0.0
- C类地址的子网掩码:255.255.255.0
- 通过较长的子网掩码将一个网络划分为多个网络的方法就叫做划分子网(Subnetting)
(4)超网
- 超网(Supernetting)是同子网类似的概念,它通过较短的子网掩码将多个小网络合成一个大网络,即掩码的长度可以不是8的整数倍
- 例如,一个单位分到了8个C类地址:202.120.224(1110 0000).0 ~ 202.120.231(1110 0111).0,只要将其子网掩码设置为255.255.248(1111 1000).0,就能使这些C类网络相通,网络号均为202.120.224.0
- 掩码的长度为0~24位
(5)无分类间路由CIDR
-
无分类域间路由(CIDR,Classless Inter-Domain Routing)地址根据网络拓扑来分配,可以将连续的一组网络地址分配给一家公司,并使整组地址作为一个网络地址(比如使用超网技术),在外部路由表上只有一个路由表项。这样既解决了地址匮乏问题,又解决了路由表膨胀的问题
-
CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,可以更加有效的分配IP地址空间。CIDR使用各种长度的“网络前缀”来代替分类地址中的网络号和子网号,而不是像分类地址中只能使用1字节、2字节、3字节长的网络号。CIDR不再使用“子网”的概念而使用网络前缀,使用IP地址从三级编址又回到了两级编址,即无分类的两级编址
- (IP地址::={<网络前缀>,<主机号>})
- 表示方法:CIDR也使用“斜线记法”,即在IP地址后写上斜线“/”,然后写上网络前缀所占的位数(对应子网掩码中1的个数)
- 比如192.168.16.128,子网掩码为255.255.255.128,记为192.168.16.128/25
-
CIDR地址块:CIDR把网络前缀都相同的连续的IP地址组成“CIDR地址块”,一个CIDR地址块是由地址块的起始地址(即地址块中地址数值最小的一个)和地址块中的地址数来定义的。CIDR地址块也可用斜线记法来表示
-
由于一个CIDR地址块可以表示很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合通常称为路由聚合,它使得路由表中的一个项目可以表示原来传统分类地址的很多个路由。
-
-
CIDR还将整个世界分为四个地区,给每个地区分配了一段连续的C类地址,分别是:
- 欧洲(194.0.0.0~195.255.255.255)
- 北美(198.0.0.0~199.255.255.255)
- 中南美(200.0.0.0~201.255.255.255)
- 亚太(202.0.0.0~203.255.255.255)。
- 这样,当一个亚太地区以外的路由器收到前8位为202或203的数据报时,它只需要将其放到通向亚太地区的路由即可,而对后24位的路由则可以在数据报到达亚太地区后再进行处理,这样就大大缓解了路由表膨胀的问题
2.1.3 IPv4协议
(1)IPv4协议介绍
- 网际协议第4版(Internet Protocol version4,IPv4)是TCP/IP协议使用的数据报传输机制
(2)IPV4数据报格式
-
版本号(Version)
- 版本字段指定了IP数据报中使用的IP协议版本,占四位。
- IPV4:0100
-
首部长度(Header Length)
- 头部长度字段指示IP数据报头部的总长度,IP数据报头部的总长度以4字节为单位,该字段占4位
-
服务类型(Type of service)
- 前3bit字段:为优选权子字段,现在已经废弃,这个字段默认值是000,大部分IP首部中的ToS字段的8bit字段中,前三个子字段默认值是000,默认填充为000。但是在一些特定的场景,例如OSPF协议中网络设备之间交互OSPF相关数据,该字段是有用的
- 中间4bit字段:
- 这四个字段组合在一起,表示了该数据报对应的服务类别,这个应用层的服务类别是不同的。这里所说的服务类别,是指:
- 1000 -- minimize delay #最小延迟
- 0100 -- maximize throughput #最大吞吐量
- 0010 -- maximize reliability #最高可靠性
- 0001 -- minimize monetary cost #最小费用
- 0000 -- normal service #一般服务
- 最后1bit字段:这个1bit末尾,没有被使用,必须强制设置为0
-
总长度
- 指报头和数据之和的长度,单位是字节
- 总长度字段为16位,故IP数据报的最大长度为65535
- 每一种数据链路层都有其自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU。当IP数据报封装成链路层的帧时,此数据报的总长度不能超过对应MTU的值。若数据报长度超过对于MTU的值,就将数据报进行分片处理,此时数据报首部中的“总长度“字段是指分片后的每一个分片的报头长度和数据长度之和
-
标识
- 占16位。
- 用于主机接收到该分片时判断是属于哪个分组
- IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并赋给标识字段。当数据报进行分片处理后,每个分片的标识值都与原数据报的标识值相同,则在接收端具有相同标识值的分片就能最终正确的重装成为原来的数据报。
-
标志位
- 占3位,但目前只有两位有意义
- 最低位记为MF(More Fragment)
- MF=1即表示后面“还有分片”的数据包
- MF=0表示这已是若干数据包片中的最后一个
- 中间位记为DF(Do not Fragment),意思是“不能分片”
- 只有当DF=0时才允许分片
- 最低位记为MF(More Fragment)
- 标志位的作用为当主机接收到数据报不同的分片时,判断是否还有分片未到达,从而完成重组工作
- 占3位,但目前只有两位有意义
-
片偏移
-
占13位。表示每个数据报的分片在原数据报中的相对位置。
-
分片:
- 把一个数据报为了适合网络传输而分成多个数据报的过程称为分片,被分片后的各个IP数据报可能经过不同的路径到达目标主机
- 分片后的IP数据报,数据区是原IP数据报数据区的一个连续部分,头部是原IP数据报头部的复制,但与原来未分片的IP数据报头部有两点主要不同:标志和片偏移
-
重组:
-
当分了片的IP数据报到达最终目标主机时,目标主机对各分片进行组装,恢复成源主机发送时的IP数据报,这个过程叫做IP数据报的重组
-
目标端主机重组数据报的原理是:
(1)—根据“标识”字段可以确定收到的分片属于原来哪个IP数据报
(2)—根据“标志”字段的“片未完MF”子字段可以确定分片是不是最后一个分片
(3)—根据“偏移量”字段可以确定分片在原数据报中的位置
-
-
片偏移以8个字节为偏移单位,即每个分片的长度一定是8字节的整数倍
- 片偏移只是计算数据部分第一个字节相对于原数据部分的相对位置表示
- 例如上图:分片1的片偏移为0,分片2的片偏移为600/8=75,分片3的片偏移为(600+600)/8=150
-
-
生存时间(TTL)
- 占8位。表示数据报在网络中的寿命。最初以秒为TTL值为单位,现在以跳数为单位,每经过一个路由器进行转发,条数就减1,当跳数为0的时候,路由器就会丢弃该数据报,则目前的最大数据为255
-
协议
- 占8位。指出此数据报携带的数据是使用的何种协议(上层协议),以便于时目的主机的IP层知道应该讲数据报部分上交到哪个处理位置
- TCP对应协议字段值6
- UDP对应协议字段值17
- 占8位。指出此数据报携带的数据是使用的何种协议(上层协议),以便于时目的主机的IP层知道应该讲数据报部分上交到哪个处理位置
-
首部校验和
- 占16位,该字段只校验数据报的报头,不包含数据部分(考虑到性能开销,让上层去实现数据的校验)
- 校验首部的目的为:
- 一方面,IP首部属于IP层协议的内容,不可能由上层协议处理
- 另一方面,IP首部中的部分字段在点对点的传递过程中是不断变化的,只能在每个中间点重新形成校验数据,在相邻点之间完成校验
- 首部校验方法:
- 首先将该字段全部置为0
- 将IP首部以(16)位为一组
- 对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位),将得到的和的反码填入校验和字段
- 校验首部的目的为:
- 占16位,该字段只校验数据报的报头,不包含数据部分(考虑到性能开销,让上层去实现数据的校验)
-
源地址
- 占32位,发送端的IP地址
-
目的地址
- 占32位,接收端的IP地址
-
选项字段
- IP首部的可变部分就是一个可选字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目
- 增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用
2.2.4 IPv6协议
(1)IPv6协议介绍
-
Pv6是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写,是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议,其地址数量号称可以为全世界的每一粒沙子编上一个地址 [1] 。
-
由于IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍 [1] 。
-
互联网数字分配机构(IANA)在2016年已向国际互联网工程任务组(IETF)提出建议,要求新制定的国际互联网标准只支持IPv6,不再兼容IPv4。
[IP v6百度百科]([https://baike.baidu.com/item/IPv6/172297?fromtitle=IP V6&fromid=9050284&fr=aladdin#2](https://baike.baidu.com/item/IPv6/172297?fromtitle=IP V6&fromid=9050284&fr=aladdin#2))
(2)IPv6地址
- IPv6地址为(128)位,但通常写作8组,每组为四个十六进制数的形式
- 例如:
2001:0db8:85a3:08d3:1319:8a2e:0370:7344
- 例如:
- 如果某一组的前缀为0,可以将0省略
- 例如:
2001:0da8:0215:3c01:0001:02fa:00ad:83bb
将所有的前缀0省略,可以表示为:2001:da8:215:3c01:1:2fa:ad:83bb
- 例如:
- 如果某一组的四个数字都是0,可以将改组省略掉
- 例如:
2001:0db8:85a3:0000:1319:8a2e:0370:7344
等价于2001:0db8:85a3::1319:8a2e:0370:7344
- 如果出现多个组都为0的情况
- 例如:
- 如果多个连续组的全为0,可以将省略的冒号也给省略掉
2001:9da8:6215:0000:0000:0000:efad:83bb
将0和中间的冒号省略,可以表示为:2001:9da8:6215::efad:83bb
- 注意:非连续0分组不能同时省略
2.2 地址解析协议 ARP
2.2.1 ARP介绍
- 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议(工作在2层3层之间,但是属于3层协议)
- 当主机想要跟本网段主机通信时,必须得知道接收方的MAC地址才能转发到其设备上,ARP就是通过IP地址找到其MAC地址的协议
2.2.2 ARP工作过程
-
主机A的IP地址为10.1.1.1/24,MAC地址为00-01-02-03-04-AA;
-
主机B的IP地址为10.1.1.2/24,MAC地址为00-01-02-03-04-BB;
-
主机C的IP地址为10.1.1.3/24,MAC地址为00-01-02-03-04-CC;
-
当主机A要与主机C通信时,地址解析协议可以将主机C的IP地址(10.1.1.3)解析成主机B的MAC地址,以下为工作流程:
- 第1步:根据主机A上的路由表内容,IP确定用于访问主机C的转发IP地址是10.1.1.3。然后A主机在自己的本地ARP缓存中检查主机C的匹配MAC地址
- 第2步:如果主机A在ARP缓存中没有找到映射,它将询问10.1.1.3的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求
- 第3步:主机C确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中
- 第4步:主机C将包含其MAC地址的ARP回复消息直接发送回(单播)主机A
- 第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机C的IP和MAC地址映射更新ARP缓存,主机C的MAC地址一旦确定,主机A就能向主机C发送IP通信了
- 本机缓存是有生存期的(防止设备发生变动,不能及时更新),生存期结束后,将再次重复上面的过程,生存期默认值一般为20分钟
2.2.3 ARP缓存
(1)ARP缓存介绍
- ARP缓存是个用来储存IP地址和MAC地址的缓冲区,其本质就是一个IP地址-->MAC地址的对应表,表中每一个条目分别记录了网络上其他主机的IP地址和对应的MAC地址。每一个以太网或令牌环令牌环)网络适配器都有自己单独的表。当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询
(2)动态缓存与静态缓存
- 为使广播量最小,ARP维护IP地址到MAC地址映射的缓存以便将来使用。
- ARP缓存可以包含动态和静态项目。
- 动态项目随时间推移自动添加和删除。每个动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除;如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期
- 静态项目一直保留在缓存中,直到重新启动计算机为止
2.2.4 反向地址转换协议 RARP
(1)RARP介绍
- 反向地址转换协议(RARP)是局域网的物理机器从网关服务器的ARP表或者缓存上根据MAC地址请求IP地址的协议,其功能与地址解析协议相反。
- 与ARP相比,RARP的工作流程也相反。首先是查询主机向网路送出一个RARP Request广播封包,向别的主机查询自己的IP地址。这时候网络上的RARP服务器就会将发送端的IP地址用RARP Reply封包回应给查询者,这样查询主机就获得自己的IP地址了
- 现在RARP实际应用比较少,一般采用DHCP协议实现其功能
2.2.5 代理ARP
(1)代理ARP介绍
- 代理ARP(Proxy ARP,也被称作混杂ARP(Promiscuous ARP )工作在不同的网段间,其一般被像路由器这样的设备使用,用来代替处于另一个网段的主机回答本网段主机的ARP请求
(2)代理ARP工作过程
- 主机A需要与主机B通信时,目的IP地址与本机的IP地址位于不同网络,但是由于主机A未配置网关,所以它会将以广播形式发送ARP request报文,请求主机B的MAC地址。但是,广播报文无法被路由器转发,所以主机B无法收到主机A的ARP请求报文,当然也就无法应答。
- 在路由器上启用代理ARP功能,就可以解决这个问题。启用代理ARP后,路由器收到这样的请求,会查找路由表,如果存在主机B的路由表项,路由器将会使用自己的G0/0/0接口的MAC地址来回应该ARP request。主机A收到ARP reply后,将以路由器的G0/0/0接口MAC地址作为目的MAC地址进行数据转发
- 代理ARP协议使得子网化网络拓扑对于主机来说时透明的(或者可以说是路由器以一个不真实的B的MAC地址欺骗了源主机A)
2.2.6 免费ARP(gratuitous ARP)
(1)免费ARP介绍
- Gratuitous ARP也称为免费ARP,无故ARP。Gratuitous ARP不同于一般的ARP请求,它并非期待得到ip对应的mac地址地址),而是当主机启动的时候,将发送一个Gratuitous arp请求,即请求自己的ip地址的mac地址,用来测试本网段是否有主机已经使用本主机的IP地址
(2)免费ARP协议工作过程
- 主机发送一个包含Sender IP字段为自己主机IP和Target IP字段也为自己主机IP的广播请求报文,相当于请求自己IP地址对应的MAC地址
- 如果收到有效回应,则证明已经有设备使用本主机的IP,说明继续使用本主机IP可能会出现问题
- 如果没收到,证明可以正常使用本主机IP
(3)应用场景
-
验证IP是否冲突
- 一个主机可以这个免费ARP来确定同一个网络中,是否有其他设备使用了这个IP地址。若是发送者收到一个回答,表示网络中存在与自身IP同样的主机;若是没有收到应答,则表示本机所使用的IP与网络中其他主机并不冲突。
-
双机热备
- 很多系统采用双机热备机制,一个为主设备,一个为从设备,两者MAC地址不同(设为MAC1和MAC2),但是通过某种软件,让其对外的IP是相同的(设为IP)。正常情况下: 主设备正常工作,从设备空闲,网络中的客户机的ARP缓存条目为: MAC1--IP;但是当某个时刻主设备出故障,从设备就接管主设备的工作,且从设备立即广播免费ARP请求报文,让网络中的客户机及时更新ARP缓存表: MAC2--IP,这样客户机的业务不会收到影响
-
网关定期刷新
- 这个主要是用在网关设备(如路由器)上。网关定期发布免费ARP,告诉网内所有主机自己的IP--MAC对应关系,让网内主机定期收到这个免费ARP请求,进而重置ARP老化时间等
2.2.7 邻居发现协议 NDP
(1)NDP介绍
- 地址解析协议是IPv4中必不可少的协议,但在IPv6中将不再存在地址解析协议。在IPv6中,地址解析协议的功能将由NDP(邻居发现协议,Neighbor Discovery Protocol)实现,它使用一系列IPv6控制信息报文(ICMPv6)来实现相邻节点(同一链路上的节点)的交互管理,并在一个子网中保持网络层地址和数据链路层地址之间的映射。邻居发现协议中定义了5种类型的信息:路由器宣告、路由器请求、路由重定向、邻居请求和邻居宣告。与ARP相比,NDP可以实现路由器发现、前缀发现、参数发现、地址自动配置、地址解析(代替ARP和RARP)、下一跳确定、邻居不可达检测、重复地址检测、重定向等更多功能
(2)NDP与ARP的区别
- IPv4中地址解析协议是独立的协议,负责IP地址到MAC地址的转换,对不同的数据链路层协议要定义不同的地址解析协议。IPv6中NDP包含了ARP的功能,且运行于因特网控制信息协议ICMPv6上,更具有一般性,包括更多的内容,而且适用于各种数据链路层协议
- 地址解析协议以及ICMPv4路由器发现和ICMPv4重定向报文基于广播,而NDP的邻居发现报文基于高效的组播和单播
2.3 网际控制报文 ICMP
2.3.1 ICMP介绍
- ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,是一种面向无连接的协议,用于在IP主机路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用
2.3.2 ICMP报文格式
- ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文
- IP头部的Protocol值为1就说明这是一个ICMP报文,
- ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式
- 代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面
2.3.3 ICMP报文类型
ICMP报文主要包含以下几种:
(1)响应请求
- 我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。 [5]
(2)目标不可到达、源抑制和超时报文
-
这三种报文的格式是一样的,
-
目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,
- 例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”
- 常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。
-
源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。
-
无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。
- 超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。
-
(3)时间戳
- 时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文
2.3.4 ICMP的应用
(1) ping 命令使用 ICMP 回送请求和应答报文
- 在网络可达性测试中使用的分组网间探测命令 ping 能产生 ICMP 回送请求和应答报文。目的主机收到 ICMP 回送请求报文后立刻回送应答报文,若源主机能收到 ICMP 回送应答报文,则说明到达该主机的网络正常。
(2)路由分析诊断程序 tracert 使用了 ICMP时间超过报文
- tracert 命令主要用来显示数据包到达目的主机所经过的路径。通过执行一个 tracert 到对方主机的命令,返回数据包到达目的主机所经历的路径详细信息,并显示每个路径所消耗的时间
- linux系统下命令为traceroute
2.4 网际组管理协议 IGMP
2.4.1 IGMP介绍
(1)IGMP介绍
- Internet 组管理协议称为IGMP协议(Internet Group Management Protocol),是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。IGMP协议共有三个版本,即IGMPv1、v2 和v3
- 主机IP软件需要进行组播扩展,才能使主机能够在本地网络上收发组播分组。但仅靠这一点是不够的,因为跨越多个网络的组播转发必须依赖于路由器。路由器为建立组播转发路由必需了解每个组员在Internet中的分布,这要求主机必须能将其所在的组播组通知给本地路由器,这也是建立组播转发路由的基础。
- 主机与本地路由器之间使用Internet组管理协议(IGMP,Internet Group Management Protocol)来进行组播组成员信息的交互。在此基础上,本地路由器再你信息与她组播路由器通信,传播组播组的成员信息,并建立组播路由。这个过程与路由器之间的常规单播路由。这个过程与路由器之间的常规单播路由的传播十分相似 [1] 。IGMP是TCP/IP中重要标准之一,所有IP组播系统(包括主机和路由器)都需要支持IGMP协议
(2)组播协议
- 组播协议包括组成员管理协议和组播路由协议。
- 组成员管理协议用于管理组播组成员的加入和离开,组播路由协议负责在路由器之间交互信息来建立组播树。IGMP属于前者,是组播路由器用来维护组播组成员信息的协议,运行于主机和和组播路由器之间。IGMP 信息封装在IP报文中,其IP的协议号为2
3. 网络层中的设备
3.1 网关(Cateway)
3.1.1 网关设备介绍
- 网关(Gateway)设备又称网间连接器、协议转换器,是多个网络间提供数据转换服务的计算机系统或设备。可以说网关设备就是不同网之间的连接器,就是数据要从一个网到另外一个网时要经过“协商”的设备
- 事实上现在的网关已经不能完全归为一种网络硬件,而可以概括为能够连接不同网络的软件和硬件的结合产品
3.1.2 网关作用
-
在使用不同的通信协议、数据格式或语言时,甚至体系结构完全不同的两种系统之间,网关就是一个翻译器,网关对收到的信息要重新打包,以适应目的系统的需求,同时起到过滤和安全的作用。
网关工作在OSI/RM的传输层及以上的所有层次,它是通过重新封装信息来使它们能够被另一种系统处理的,为此网关还必须能够同各种应用进行通信,包括建立和管理会话、传输以及解析数据等
3.1.3 网关类型
(1)按连接网络划分
- 局域网/主机网关:局域网/主机网关主要在大型计算机系统和个人计算机之间提供连接服务
- 局域网/局域网网关:这种类型的网关与局域网/主机网关很类似,不同的是这种网关主要用于连接多个使用不同通信协议或数据传输格式的局域网
- 目前大多数网关都是属于这类网关。
- 因特网/局域网网关:这种网关主要用于局域网和因特网间的访问和连接控制。
(2)按产品功能划分:
- 数据网关:数据网关通常在多个使用不同协议及数据格式的网络间提供数据转换功能。
- 应用网关:应用网关是在使用不同数据格式的环境中,进行数据翻译功能的专用系统。
- 安全网关:安全网关是各种提供系统(或者网络)安全保障的硬件设备或软件的统称,它是各种技术的有机结合,保护范围从低层次的协议数据包具体应用。
3.2 路由器 Router
3.2.1 路由器介绍
-
路由器是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。
3.2.2 路由器作用
(1)基本功能:路由转发
- 路由器的主要工作就是为经过路由器的每个数据帧寻找一条最佳传输路径,并将该数据有效地传送到目的站点,即路由功能
(2)其它
- 现在一些路由器除了基本的路由功能外,还添加了额外功能,比如:
- 访问列表控制
- 三层交换机
- ...
3.2.3 路由分类
(1)静态路由
- 静态路由:静态路由是由网络管理员手工配置的路由信息。 除非网络管理员干预,否则静态路由不会发生变化
- 静态路由的特点:
- 小型网络拓扑来说配置简单,高效,可靠,转发效率高
- 手工配置,不需要自己进行路由学习,网络带宽与设备资源开销小
- 静态路由不能对网络的改变作出反映,网络管理员必需熟悉网络结构,一般用于网络规模不大、拓扑结构固定的网络中
(2)动态路由
- 动态路由:动态路由是网络中的路由器之间相互通信,传递路由信息,利用收到的路由信息更新路由器表的过程
- 动态路由的特点:
- 路由器之间能够通过路由协议进行实时的通信交换网络信息,从而改变自己的路由表等信息,从而达到比较好的网络传输效率
- 能够实时适应网络的变化,无需管理员过多干预
- 适用于拓扑复杂,规模大的网络
- 路由器之间在相互通信时以及接收到信息进行数据处理时,会消耗网络带宽资源与CPU计算资源
(3)直连路由
- 直连路由:路由器接口上配置的网段地址会自动出现在路由表中并与接口关联,这样的路由叫做直连路由
- 直连路由特点:
- 因为直连路由网络是直接连在本路由器上,当发现有通往该网络的分组时,便直接发送至该网络设备
(4)缺省路由
- 缺省路由:缺省路由是一个路由表条目,用来指明一些在下一跳没有明确地列于路由表中的数据单元该如何转发.对于在路由表中找不到明确路由条目的所有的数据包都将按照缺省路由指定的接口和下一跳地址进行转发
- 缺省路由:
- 运用缺省路由可以极大减少路由表条目
- 一旦配置不正确可能导致路由环路;可能导致非最佳路由
3.2.4 路由转发优先级
(1)一般情况(从上往下优先级递减)
- 直连路由优先级最高
- 人工设置的路由项,比如静态路由的优先级高于动态学习到的路由项
- 动态路由项
- 缺省路由项
实际上根据不同厂商生产的路由器,其优先级定义也不完全相同,而且大部分可以通过命令去手动定义优先级
3.2.5 路由表
(1)路由表介绍
- 在计算机网络中,路由表(routing table)或称路由择域信息库(RIB, Routing Information Base),是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的拓扑信息。
(2)路由表内容
- 网络号/目标地址(Network ID, Network number):就是目标地址的网络ID。
- 直连网络:直连网络的目标地址一般为本路由器的某个接口
- 非直连网络:非直连网络的目标地址一般为直连的能够到达目的地址的下一跳路由器的接口地址
- 子网掩码(subnet mask):用来判断IP所属网络号
- 下一跳地址/接口(Next hop / interface):就是数据在发送到目标地址的旅途中下一站的地址。其中interface指向next hop(即为下一个route)。一个自治系统(AS, Autonomous system)中的route应该包含区域内所有的子网,而默认网关Network id:
0.0.0.0
, Netmask:0.0.0.0
)指向自治系统的出口。 - 可能包含的信息
- 路由协议:凭借不同路由协议学习的路由表项的优先级也不同
- 花费(Cost):就是数据发送过程中通过路径所需要的花费。这个花费可以是带宽,路径长度(跳数),负载,可靠性,延迟等
- 路由的服务质量
- 路由中需要过滤的出/入连接列表(ACL)
3.2.6 路由器转发过程
当主机PC1向主机PC2发送数据包时:
(1)发送阶段
- 当PC1向PC2发送报文时,首先判断目的地址是否位于同一网络
- PC1将PC1的IPv4地址与PC1的掩码进行与操作,得到PC1的网络号
- PC1将PC2的IPv4地址与PC1的掩码进行与操作,得到PC2的网络号
- 如果发现PC2在PC1的所处网段中,会找ARP缓存对应的MAC地址直接发送至PC1设备;如果缓存没有对应项,则通过ARP协议寻找MAC地址
- 如果发现PC2不在PC1的所处网段中,会将IP数据报发送给网关,寻找网关地址过程与上相同
(2)路由器接收到数据报
-
当路由器R1接收到来自Fa0/0接口的以太网帧时,需要进行解封处理
-
检查目的MAC地址,是否与自己的Fa0/0接口相同,如果相同则将MAC帧存入缓存,进行下一步操作
-
识别以太网类型,如果数据部分为IPv4报文,进行以下操作
-
去除帧首部与尾部校验序列,得到IPv4数据报
-
-
查找转发接口
- 检查目的IPv4地址,分别于路由表的每一项先与掩码进行与操作,在将结果与网络号比较
- 如果是直连网络,直接选定表项对应的接口
- 如果是非直连网络,选定优先度的接口
- 如果找不到网络,选定默认转发接口
-
重新封装以太网帧,并发送
- 以路由器R1转发接口MAC地址为源MAC地址,下一跳接收设备地址为目的MAC地址,计算帧校验序列,封装以太网帧并从选定的接口发送出去
以上为路由器最基本的转发过程,现在路由器除上述功能之外,一般在中间还有解析数据用于过滤,或者一些加密处理等操作
4. 路由协议 Routing protocol
4.1 路由协议介绍
4.1.1 路由协议介绍
-
路由协议是一种指定数据包转送方式的网络协议
-
对于小型网络来说,静态路由是个很好的选择,但是随着网络规模的增长,靠人工维护这种路由转发关系会变得越来越困难,而且也无法处理对于网络设备的即时的增添;动态路由协议可以让路由器自动学习到其他路由器的网络,并且网络拓扑发生改变后自动更新路由表。网络管理员只需要配置动态路由协议即可,相比人工指定转发策略,工作量大大减少所以路由协议的使用就显得尤为重要了
4.1.2 常见路由协议
-
常见的路由协议有RIP、IGRP(Cisco私有协议)、EIGRP(Cisco私有协议)、OSPF、IS-IS、BGP等。
-
内部网关协议(IGP,Interior Gateway Protocol)),适用于单个ISP的统一路由协议的运行,一般由一个ISP运营的网络位于一个AS(自治系统)内,有统一的AS number(自治系统号)
- 常见的IGP协议:RIP、IGRP、EIGRP、OSPF、IS-IS。
-
外部网关协议(BGP ,Border Gateway Protocol)是自治系统间的路由协议,多用于不同ISP之间交换路由信息,以及大型企业、政府等具有较大规模的私有网络。
4.2 部分路由协议介绍
4.2.1 路由信息协议 Route Information Protocol ,RIP
(1)介绍
- RIP很早就被用在Internet上,是最简单的路由协议,RIP封装在
UDP
之上,端口号为(520)。 - RIP是一个距离矢量路由协议(即通过不同转发接口的路径长度以及方向来决定最佳路线),最大跳数为15跳,超过15跳(即当跳数到达16时)则认为目标网络不可达
- 主要传递路由信息,通过每隔30秒广播一次路由表,维护相邻路由器的位置关系,同时根据收到的路由表信息计算自己的路由表信息
- 当前RIP共有三个版本,RIPv1、RIPv2、RIPng
(2)接受到其他路由器路由表项路由表更新规则
- 当接收到路由表时,路由表的每一项度量值(跳数)+1(多出的1表示如果要走发送的路由器,消耗的资源会多出来本路由器到发送路由器的消耗)
- 如果更新的某路由表项在路由表中没有,则直接在路由表中添加该路由表项
- 如果路由表中已有相同目的网络的路由表项,且来源端口相同,那么无条件根据最新的路由信息更新其路由表
- 如果路由表中已有相同目的网络的路由表项,但来源端口不同,则要比较它们的度量值,将度量值较小的一个作为自己的路由表项
- 这个度量值可以为路径长度
- 如果路由表中已有相同目的网络的路由表项,且度量值相等,保留原来的路由表项
-
例:已知路由器R6有表a所示的路由表。现收到相邻路由器R4发来的路由更新信息,如表b所示。试更新路由器R6的路由表。
表a:
目的网络 距离 下一跳路由器 Net2 3 R4 Net3 4 R5 …… …… …… 表b:
目的网络 距离 下一跳路由器 Net1 3 R1 Net2 4 R2 Net3 1 直接交付 解:先将收到的RIP报文改为表c:
目的网络 距离 下一跳路由 Net1 3+1=4 R4 Net2 4+1=5 R4 Net3 1+1=2 R4 将表c与表a比较:
row1:没有Net1,添加到表a中
row2:有Net2,且下一跳路由器相同,更新
row3:有Net3,但下一跳路由器是不同,比较距离得到,新的距离小于路由表中距离,更新
综上所述:
更新后R6的路由表如表d 所示:
目的网络 距离 下一跳 Net1 4 R4 Net2 5 R4 Net3 2 R4 …… …… ……
(3)特点
- 协议通常用在网络架构较为简单的小型网络环境。
- RIP的收敛速度较慢,即使得全网络的路由器表项达到稳定的状态需要很多次信息交换
4.2.2 开放式最短路径优先 Open Shortest Path First,OSPF
(1)介绍
- OSPF是一种基于IP协议的路由协议。它是大中型网络上使用较为广泛的IGP协议。OSPF是对链路状态路由协议的一种实现,运作于自治系统内部。
- OSPF分为OSPFv2和OSPFv3两个版本:OSPFv2定义于RFC 2328(1998),支持IPv4网络;而OSPFv3定义于RFC 5340(2008),支持IPv6网络
(2)协议工作方式
-
它采用戴克斯特拉算法来计算最短路径树。它使用“代价(Cost)”作为路由度量。链路状态数据库(LSDB)用来保存当前网络拓扑结构,路由器上属于同一区域的链路状态数据库是相同的(属于多个区域的路由器会为每个区域维护一份链路状态数据库)
-
OSPF提出了“区域(Area)”的概念,一个网络可以由单一区域或者多个区域组成。其中,一个特别的区域被称为骨干区域(Backbone Area),该区域是整个OSPF网络的核心区域,并且所有其他的区域都与之直接连接。所有的内部路由都通过骨干区域传递到其他非骨干区域。所有的区域都必须直接连接到骨干区域,如果不能创建直接连接,那么可以通过虚链路(virtual link)和骨干区域创建虚拟连接
(3)特点
- 收敛速度快
- 没有跳数限制
- 支持服务类型选路
- 提供负载均衡和身份认证
- 适用规模庞大、环境复杂的互联网
4.2.3 边界网关协议 Border Gateway Protocol,BGP
(1)介绍