路由器工作原理
一、路由器工作在网络层
1. 网络层功能
- 定义了基于 IP 协议的逻辑地址
- 连接不同的媒介类型
- 选择数据通过网络的最佳路径
2. 网络层 PDU
网络层最典型的协议就是 IP 协议,传输的数据单元是 IP 数据包
3. 网络层的 IP 数据报
TCP/IP 协议定义了一个在因特网上传输的包,称为IP数据报。
IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首部中的源地址和目的地址都是IP协议地址。
- 版本:占4位,指IP协议的版本,通信双方使用的IP协议版本必须一致。
- 首部长度:占 4 位,IP包头部长度,因为长度可变,因此需要定义。
- 优先级和服务:占 8 位,用来获得更好的服务,这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过,1998年IETF把这个字段改名为区分服务 DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用,提供3层的QoS。
- 总长度:总长度指首都及数据之和的长度,单位为字节,因为总长度字段为 16位,所以数据报的最大长度为 2的16 次方减1,等于 65535 字节,在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,即最大传送单元 MTU (Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度 (即首部加上数据部分)一定不能超过下面的数据链路层的MTU值,否则要分片(目前以太网的MTU=1500)。
- 标识 (Identification):占 16位,IP软件在存储器中维持一个计数器,每产生一个数据报计数器就加 1,并将此值赋给标识字段,但这个”标识”并不是序号,因为 IP 是无连接的服务,数据报不存在按序接收的问题,当数据报由于长度超过网络的 MTU 而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中,相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
- 标志 (Flag):占3 位,但目前只有 2 位有意义。标志字段中的最低位记为 MF(More Fragment),MF=1 即表示后面”还有分片”的数据报,MF=0 表示这已是若干数据报片中的最后一个,标志字段中间的一位记为 DF(Don’t Fragment),意思是”不能分片”,只有当 DF=0 时才允许分片。
- 段偏移量:占 13 位,较长的分组在分片后,某片在原分组中的相对位置,也就是说,相对用户数据字段的起点该片从何处开始。片偏移以 8 个字节为偏移单位,每个分片的长度一定是 8 字节(64位)的整数倍。
- 标识、标志、段偏移量:上层来的数据到IP层会被分片,这几个字段用来对数据包进行标识,使数据到达目的端重组的时候,不会乱序。
- 生存时间:占 8 位,生存时间字段常用的英文缩写是TTL(Time To Live),其表明数据报在网络中的寿命。由发出数据报的源点设置这个字段,其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源.最初的设计是以秒作为 TTL的单位。每经过一个路由器,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于 1 秒,就把TTL值减 1。当 TTL值为 0 时,就丢弃这个数据报。
- 协议:占 8 位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程(标识封装的上层数据是UDP还是TCP,UDP是17,TCP是6)。
- 首部检验和:占 16 位,这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,都要重新计算一下首都检验和 (一些字段,如生存时间、标志、片偏移等都可能发生变化),不检验数据部分可减少计算的工作量。
- 源地址:发送方IP地址,占32位
- 目的地址:接收方IP地址,占 32位
二、路由器的工资原理
1. 路由
从源主机到目标主机的转发过程,包含两个基本动作:
- 确定最佳路径
- 通过网络传输信息
2. 工作原理
能够将数据包转发到正确的目的地,并在转发过程中选择最佳路径的设备→路由器
路由器转发数据的过程:
- 接收数据包 → 查看目的IP地址 → 与路由表进行匹配找到转发端口 → 转发到该端口
如上图,具体工作过程:
- 主机1.1要发送数据包给主机4.1,因为IP地址不在同一网段,主机会将数据包发送给本网段的网关
路由器A
。 - 路由器A接收到数据包,查看数据包IP首部中的
目标IP地址
,再查找自己的路由表。数据包的目标IP地址是4.1,属于4.0网段,路由器A在路由表中查到4.0网段转发的接口是S0接口
。于是,路由器A
将数据包从S0接口
转发出去。 - 网络中的每个路由器都是按这样的步骤去转发数据,直到到达了
路由器B
,用同样的转发方法,从E0口
转发出去,主机4.1接收到这个数据包。
同网段直接通过ARP广播查找主机,而不同网段需要将数据包发送给网关。
3. 路由表的形成
路由表:
- 路由器中维护的路由条目的集合
- 路由器根据路由表做路径选择
路由表的形成:
- 直连网段:接口配置 IP 地址,端口 UP 状态,形成直连路由
- 非直连网段:通过管理员配置或通过动态路由
三、路由的分类
- 静态路由
由管理员手动配置,并且是单向的;
缺乏灵活性。 - 默认路由(缺省路由)
一种特殊的静态路由;
当路由器在路由表中找不到目标网络的路由条目时,路由器把请求转发到默认路由接口;
默认路由一般应用于末节网络。 - 动态路由
路由器能够通过某种路由协议自动地建立自己的路由表,并且能够根据实际情况的变化适时地进行调整;
常用的动态路由协议:RIP、OSPF、IS-IS、BGP、IGRP、EIGRP等。
四、路由器转发数据包的封装过程
主机A
向主机B
发送数据,源IP是1.2,目标IP是2.2,源mac是11-11,目的mac是22-22(因为路由器会阻挡广播,主机A是无法获取主机B的mac地址,只能够将数据交给自己的网关,所以这里主机A在数据帧的封装时,目的mac地址是主机A网关
的mac地址22-22)。主机A
给将数据交给自己的网关路由器A
,从E0
口进入,路由器A
开始进行数据的解封,查看目的IP地址
是否可达,如果可达找到对应接口E1
口,将数据交到E1
口,再进行数据重新封装。- 数据在
路由器A
上进行重新封装,封装iP地址
照样是主机A的IP
,目标IP地址
也是主机B的IP
,因为需要从路由器A
的E1
口进行转发,重新封装的源mac地址
就是路由器A
的E1口mac地址
,目的mac地址
为与路由器直连的路由器B的E1口mac地址
,从E1
口进行转发出去
路由器在转发数据包的封装过程中,源 IP 和目的 IP 是没有发生变化,源 MAC 地址和目的 MAC 地址一直在发生变化,这是在没有 NAT 环境下的情况,如果遇到 NAT 环境,会经历地址转换的过程。