2 网络层
网络层向运输层提供服务
- 虚电路服务
- 数据报服务
网络层负责在不同网络之间尽力发送数据包,基于数据包的IP地址进行转发,且对于数据报的顺序,丢失,重复等问题不负责。可靠性由运输端负责
网络层是无连接的:不需要提前与对象建立连接。
2.1 网际协议IP
2.1.1 虚拟互联网络
各层的中间设备:
- 物理层:转发器
- 数据链路层:网桥或桥接器
- 网络层:路由器
- 网络层以上:网关
互联网由多种异构网络互联组成
2.1.2 分类的IP地址
IP地址共32位,分为两部分(网络号+主机号),然后被分为ABCDE五类
前八位区分ABC
A(1-126),B(128- 191),C(192-243);此处不使用子网掩码
- A类地址
- 网络号8位(第一位默认0),主机号24位,
- 特殊网络号:全0表示this,01111111(127)表示环回地址(本地地址),剩下的1-126是可用网络号
- 特殊主机号:全0的单独表示网络地址(127.0.0.0),全1用于广播,表示所有主机,剩下的2^24 - 2是可用主机号数量
- B类地址
- 网络号16位(前两位为10),主机号16位
- 特殊网络号:10000000(128.0不用于指派),最小网络号为(128.1),可用网络号2^14 - 1
- 特殊主机号:全0的单独表示网络地址(129.0.0.0),全1用于广播,表示所有主机,剩下的2^16 - 2是可用主机号数量
- C类地址
- 网络号24位(前三位为110),主机号8位
- 特殊网络号:11000000(192.0.0不用于指派),最小网络号为(192.0.1),可用网络号2^21 - 1
- 特殊主机号:全0的单独表示网络地址(129.0.1.0),全1用于广播,表示所有主机,剩下的2^16 - 2是可用主机号数量
特殊地址:
127.0.0.1(环回地址)
169.254.0.0(DHCP分配失败或者没有DHCP服务器时,机器自己分配的一个IP)
保留的私网地址(无法外部访问):
10.0.0.0
172.16.0.0—172.31.0.0
192.168.0.0—192.168.255.0
2.1.3 子网划分
子网掩码:用子网掩码与ip地址进行与运算得到的值会使主机段归零,剩下的就是网络号。
引例:某c类网络下(192.168.0.0,子网掩码:255.255.255.0,可划分254个主机号),当前有200台主机,现在需要将200台主机划分到两个网络(子网),每个子网100台主机。
把最后一段的8位进行划分,第一位为0是一个子网A,第一位为1是另一个子网B,对应子网掩码变为255.255.255.128,便实现划分为两段子网的工作。
A(192.168.0.1----192.168.0.126)
B(192.168.0.129----192.168.0.254)
同理可继续让子网掩码增加来划分更多的段,具体划分成几段再考虑需要使用几个二进制位来划段。(若是划分为150+50的两段不能这样,一般为等值划分)
特殊情况(变长子网划分):若划分成四段,每段的主机数:10,20,50,100
则可将100台的段子网掩码设为255.255.255.0.128
可将50台的段子网掩码设为255.255.255.0.192
可将20台的段子网掩码设为255.255.255.0.224
可将10台的段子网掩码设为255.255.255.0.240
划分成不等长的多段来存储合适的主机数。
B类与A类的划分同理。
2.1.4 超网
引例:某c类网络下(192.168.0.0,子网掩码:255.255.255.0,可划分254个主机号),当前有200台主机,现在需要再加入200台主机(192.168.1.0,子网掩码:255.255.255.0,可划分254个主机号)。但这样使用两个C类将其划分为了两个网段,他们都是属于同一个部门,但不同网段通信就需要过路由器进行转发,多此一举。
解决方法:把掩码往前移动一位(255.255.254.0),这样两个网段的网络号从24位变成23位,主机号从8位变成9位,那么192.168.0.0和192.168.1.0就在同一个网段了,可相互通信。
同理,若合并四个网段(192.168.0.0,192.168.1.0,192.168.2.0,192.168.3.0)把掩码往前移动两位(255.255.252.0)即可合并四个网段
注:并不是所有的连续两个网段都可以通过只修改掩码中的一个二进制位构成一个超网,如0和1可以修改因为构建超网,但1和2就不行。
2.2 网络协议IP
2.2.1 文件传输流程
网络设备和OSI参考模型关系
计算机通信的过程,本网段通信跨网段通信的过程
- 1.应用层准备要传输的文件
- 2.传输层将文件分段并标号
- 3.网络层添加目标IP地址,源IP地址(决定数据发送的起点与终点,在包中一直没变)
- 4.数据链路层
-
首先使用源ip和目的ip进行两次判断
- 使用自己的子网掩码判断自己在哪个网段
- 使用自己的子网掩码判断目标地址在哪个网段
-
判断完以后区分源与目标是否在同一个网段
- 若判断是同一个网段,使用arp协议广播解析目标IP地址的MAC(广播询问所有网段下的主机)
- 若判断不是同一个网段,使用arp协议广播解析路由的MAC(要发出去过路由)
-
接着把ip数据包外裹上 本地MAC与目标MAC(决定当前位置和下一站,没过一个中转都会变) 和FCS校验形成帧(使用CSMA/CD协议)
-
- 5.物理层将帧变为bit流
- 6.通过互联网到达目的地,并在目的地一步一步还原分段文件
2.2.2 ARP协议
功能:在本地ARP缓存中查看是否有目标IP地址,若有,取这个IP地址对应的MAC地址;若没有就将IP地址通过广播,目标MAC地址是FF-FF-FF-FF-FF-FF(局域网内都通知),解析目标IP地址的MAC地址,得到后再存储起来映射(IP地址—>MAC地址)。
且A向B发送数据报时,B也同时可以收到A的IP和MAC地址,B也会把A的IP和MAC组建成映射放入自己的ARP高速缓存中(因为通信很有可能是相互的)。
且保存在ARP高速缓存中的映射是有生存时间的,过期以后会自动删除(避免某个主机故障后更换网卡,导致MAC地址改变,这样就一直访问不了新的适配器了。)
注:ARP是解决同一个局域网内的主机间IP与MAC地址的映射问题。
**ARP欺骗:**广播IP地址寻找其对应MAC地址时,另一台主机(不是这个IP)将自己的MAC地址发送回去,导致解析的MAC地址出错。这样在局域网发送数据时,就会发送给后汇报MAC地址的主机,这个主机就窃取了发给别人的消息。
- 流量控制:某主机把自己的MAC地址谎报出去,让局域网内其他主机认为网关的MAC地址是自己的主机MAC地址,这样其他主机的上网操作就需要相关这个主机,再由这个主机进行转发,就可以控制甚至截断其他主机的流量。
- 网络执法官:利用ARP欺骗,让其他主机的通信都需要过本主机(则实现控制其他主机上网行为,控制其与其他主机或网关是否连通)
- ARP防火墙:ARP欺骗是利用谎报MAC地址实现,ARP防火墙则不允许后面发送的MAC地址修改之前保存的MAC地址
2.2.3 IP数据报的格式
- 一个 IP 数据报由首部和数据两部分组成。
- 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
- 在首部的固定部分的后面是一些可选字段,其长度是可变的。
- 版本:四位长度,记录IP协议的版本(4–>IPv4,6–>IPv6)
- 首部长度:四位(范围:5到15)表示首部有多少个32位字长,所以最小为5,此数减5就可选字段的长度,可选字段最长是15-5=10个32位字节=40byte。首部最长为15个32位字节=60byte。
- 区分服务:8位,在开启时才会使用,路由会优先放行区分服务为某个字段的数据报(一般不使用这个字段)。
- 总长度:16位,表示总数据长度是多少个字节,最大值为2^16 - 1
- 标识:16位,IP软件内部有一个计数器,每产生一个数据报,值就加1,并赋值给这个字段(不作为序号),作用是:当数据长度大于最大传送单元(MTU)时要对数据进行分片处理,而所有分片标识都为这个值,用于接收后拼装。
- 标志:3位,最低位(MF):为1表示后面还有分片数据报,为0表示这个最后一片;第二位(DF):为1表示数据不可分片,为0表示可进行分片
- 片偏移:13位,标识分片后,该片的相对位置,利于拼装。另外片偏移表示的是,这个数据报中数据的首地址与以前数据报中数据的首地址距离为:8byte*片偏移值。所以分片后,数据部分必须是8字节的整数倍(例:分片后分为三段1400byte+1400byte+1000byte,那么三段的片偏移值分别是:0,175,350)
- 生存时间:TTL,表示数据包的生存时间,以前使用时间为单位,现在使用跳数为单位,在路由器中跳转一次(过一个路由器)就减1,若为0则丢弃它,并告诉发生者包过期。这样做防止数据在互联网中兜圈子。
- 协议:8位,指出数据报携带的数据使用的是那种协议
- 首部检验和:16位,只检验数据报的首部,不包含数据部分,且转发由于首部数据一些字段可能发生改变,所以路由器每次都要重新金属检验和
- 由于需要多次计算,所以不使用复杂的CRC检验码,使用一种简单的方式:把字段换分为多个16字节字段,检验和字段置0,然后用反码算数运算把所有字段(16字节字段和检验和都要加)相加后的反码写入检验字段,后面的接受方再进行一次运算再进行比较值是否相等即可。
- 32位的源地址IP和32位的目的地址IP
- 可变部分:选项字段用来支撑排错,测量和安全等功能,丰富内容。
ip数据报在路由间流通的过程:
网络畅通的条件:能去能回(数据报不仅能发过去,同时也必须能够原路返回)
- 沿途的路由器必须知道到目标网络下一跳给那个接口
数据报带着源IP地址和目的IP地址在互联网的路由间转发,直到到达目的地,在每个路由器中记录对应目的IP网段的下一站路由(由网段与路由构成的映射表中寻找,名字叫路由表),一般考虑先找指定路由(对应了地址的),再去路由表中查要走的路由,最后考虑默认路由(仅此一条路,windows下的网关就是默认路由)
最长前缀匹配原则:在进行路由查询时,一个网段可能会得到多个匹配结果(192.168.1.1会匹配到多种网段,因为网段长度不确定),此时选择最长的那个网段匹配结果,因为此时对于地址块就越小,对于找到的就越具体。
而为了提高找到最长前缀的效率,在实际中还可使用线索二叉树这样的数据结构,0往左1往右,直到对应路径到达叶节点(不能往下了),就找到了需要的最长前缀,当然如果找不到对应叶节点就表明对应映射不在路由表中。
- (1) 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
- (2) 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行 (3)。
- (3) 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行 (4)。
- (4) 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行 (5)。
- (5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行 (6)。
- (6) 报告转发分组出错。
负载均衡:当多条路都通时,会将数据报在多条路上传输,而不是单走一条路
2.3 网际控制报文协议ICMP
- ICMP 是互联网的标准协议。
- ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。
- 但 ICMP 不是高层协议(看起来好像是高层协议,因为 ICMP 报文是装在 IP 数据报中,作为其中的数据部分),而是 IP 层的协议。
检验和:因为IP中的检验和只检验IP头部数据的正确性,所以位于数据部分的ICMP报文需要再次进行检查
ICMP报文的类型:ICMP报文的种类有两种
-
差错报告报文
-
询问报文
ICMP报文种类 类型的值 ICMP报文的类型 差错报告报文 3 终点不可达 差错报告报文 11 时间超过 差错报告报文 12 参数问题 差错报告报文 5 改变路由 询问报文 8或0 回送请求或回答 询问报文 13或14 时间戳请求或回答 -
差错报告报文种类:
- 终点不可达:路由器或主机不能交付数据报时向源点发送终点不可达报文
- 时间超过:收到生存时间为0的数据报时,会丢弃数据报,然后想源点发送时间超过报文;终点在规定时间不能收齐一个分片了的数据报的所有数据报片时,会把收到的数据报全部丢弃,并向源点发送时间超过报文
- 参数问题:路由器或目的主机收到的数据报首部中有值不正确时,丢弃报文,并向源点发送参数问题报文。
- 改变路由(重定向):当路由判定主机把数据报发送给其他路由更好时,会给主机发送改变路由报文(发送路上可能有多条路,当发送的路由不是最佳路由时,收到消息的路由就会回发改变路由原文,让其改发其他指定路由)
-
差错报告报文格式:
- ICMP格式中的前8个字节
- 出错的IP数据报首部和前8个字节(前8个字节为了得到运输层的端口号)
- 最后吧差错报告报文结合IP首部封装成IP数据报发送
-
询问报文种类
- 回送请求和回答:由主机或路由器向某个特定的目的主机发送ICMP回送请求报文,收到的目的方发送ICMP回答报文。此报文用于测试双方是否可达,及相互了解对方有关状态(ping就是使用了这个报文)
- 时间戳请求或回答:ICMP时间戳请求报文是用于发送方请求收到方回答当前的日期和时间,收到方回发时间戳回答报文,其中有32位的字段(时间戳)。
-
ICMP应用:traceroute指令(windows下是tracert或pathping)
先发送TTL为1的数据包给终点,后面依次发送的数据报的TTL递增,且数据报中封装无法交付的数据,这样依次每个路由都会返回ICMP时间超过差错报告报文,终点由于数据无法交付,返回ICMP终点不可达差错报告报文,以此得到了发送数据报过的全部路由和主机。(可用于检测连接路线上的所有设备是否通,寻找准确的错误点)
2.4 互联网的路由选择协议
2.4.1 有关路由选择协议的几个基本概念
理想的路由算法:(实际中的路由算法应尽量接近理想)
- 算法必须是正确的和完整的。
- 算法在计算上应简单。
- 算法应能适应通信量和网络拓扑的变化,这就是说,要有自适应性。
- 算法应具有稳定性。
- 算法应是公平的。
- 算法应是最佳的。
路由选择策略分类:
- 静态路由选择策略:适用于简单的消亡了,非自适应路由选择,采用静态的人工配置路由,比较简单且开销较小
- 动态路由选择策略:适用于复杂的大网络,自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。
互联网采用分层次的路由选择协议。这是因为:
(1) 互联网的规模非常大。若要让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大。
(2) 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到互联网上。
所以整个互联网被分为了很多较小的自治系统,记为AS。(一般一个大的ISP就是一个自治系统)
- 内部网关协议(IGP),在自治系统内部使用的路由选择协议。如:RIP和OSPF协议(此时的路由选择叫域间路由选择)
- 外部网关协议(EGP),不同的自治系统间,边界上两个路由使用的协议,如BGP-4协议(此时的路由选择叫域内路由选择)
(比较大的自治系统还能进一步划分为一个高速的主干网和许多低俗的局域网,这样就在自治系统内部进一步划分为多个局域,以此减少路由表的大小)
2.4.2 内部网关协议 RIP(Routing Infomation Protocol)
RIP协议是最早的IGP协议,度量是距离(跳数),但很少被使用,使用UDP发送
具有以下特点
- 简单
- 不允许在两个网络之间使用多条路由,只使用最短的那条
- 周期性广播(每隔30秒),每个路由发送自己的路由表给相邻路由器,使得路由可知如果过这条路由,我到达其记录的IP网段的最短距离,当某个路由具有多个邻居时,它会综合所有邻居给它的路由表,选择对应IP网段的最短路径。若邻居不定时广播信息,此路由会认为没发消息的路由故障,就不走这条路由。
- 最大跳数15,超过认为不可达
- 以跳数来决定存在不合理,未考虑到带宽(只考虑路程,不考虑速度)
- 不周期性的广播,就无法实时更新,若某些路由宕机或者出现其他变化就无法使用变化。要用周期来确保动态性
- 使用算法步骤
- 对于发送给自己路由表的路由X,把路由表的下一跳地址改为X,跳数全部加一,目的网络N不变
- 对比自己当前的路由表,若不存在对应网络N的路径直接添加,若存在,保留跳数少的那个
2.4.3 内部网关协议 OSPF(Open Shortest Path First)
度量是带宽、距离。时延、费用等,开放式的,支持多区域的,触发式更新(不定时更新,对时间友好)。使用IP数据报传送
有三个表:
- 邻居表:(10秒一次)相互发hello,确定邻居有哪些,确保邻居是可达的,邻居没有宕机,并相互交换邻居表(这样所有路由都知道彼此的连接情况了)
- 链路状态表:根据邻居表算出来的,在路由知道所有邻居表以后,就确定了一个图了,使用最短路径算法(以当前节点开始,每次找最短路径(以带宽为度量)能到达的点,再以连接成的树的所有节点找下一个最短路径(起点直接到或者过某些点到中的最短),依次使所有点可达以后构成一颗树并记录下来,最后从当前路由出发,沿着树结构到达其他路由都只有一条路径,且最短)(迪杰斯特拉最短路径算法)
协议特点:
- 向本自治系统中所有路由器(其实只发给了邻居,但邻居会转发)发送信息,使用泛洪法
- 发送的信息就是与本路由器相邻的所有路由器的链路状态(路由器知道的部分信息)
- 只有当链路状态变化时,路由器才会使用泛洪法发送这些信息
为了方便管理,OSPF还将自治系统划分为若干个区域。这样洪泛就只发生在区域内,而不是整个自治系统,减少了网络上的通信量。
为了确保链路状态数据库与全网状态保持一致,OSPF每隔一段时间(如30分钟),也要刷新一次数据库中的链路情况。
OSPF的分组类型
- 类型1,问候 (Hello) 分组,发给邻居确定邻居状态
- 类型2,数据库描述 (Database Description)分组,给邻居发自己的链路状态表的摘要信息
- 类型3,链路状态请求 (Link State Request)分组,请求对方发送其链路状态表的摘要信息
- 类型4,链路状态更新 (Link State Update)分组,用洪泛法对全网更新链路状态。
- 类型5,链路状态确认 (Link State Acknowledgment)分组。 对更新进行确认
2.4.4 外部网关协议 BGP
一般指的是最新版BGP-4
作用:力求寻找一条从当前网络到目的网络的比较好的路径(并不是寻找最佳路径,不兜圈子即可),而每个自治系统都至少要选择一个路由作为其“BGP发言人”。
此时可以把每个自治系统当做一个节点,边界路由的连接作为边构成一个新的图。
- BGP 所交换的网络可达性的信息就是要到达某个网络所要经过的一系列 AS。
- 当 BGP 发言人互相交换了网络可达性的信息后(使用TCP连接,相当于交换路由表),各 BGP 发言人就根据所采用的策略从收到的路由信息中找出到达各 AS 的较好路由。
- BGP 支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
- 在 BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销都有好处。
2.4.5 路由器的构成
作用:连接不同的网络,选择最优的传输路线,提高通信速度等
- 路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。
- 下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。
- 路由器的转发分组正是网络层的主要工作。
路由器结构:
路由器结构可划分为两大部分:
- 路由选择部分
- 根据所选定的路由选择协议构造出路由表(并维护更新)
- 分组转发部分
-
交换结构 (switching fabric):根据转发表 (forwarding table) 对分组进行处理。(转发是指根据选择表选择合适的输出端口,而路由选择是根据路由表选择合适的路由,转发表是从路由表得出的。)
-
输入端口
- 物理层、数据链路层和网络层的处理模块。
- 队列:数据链路层剥去帧首部和尾部后,分组在网络层的队列中排队等待处理。
- 查找和转发功能。
-
输出端口
- 物理层、数据链路层和网络层的处理模块。
- 缓冲区(队列),来不及发送的分组就必须暂时存放在这个队列中。
- 数据链路层处理模块将分组加上链路层的首部和尾部,交给物理层后发送到外部线路。
-
分组丢弃:路由器会丢弃错误数据,而在向路由中发送数据过多,导致缓冲区溢出也会导致丢包。
2.5 IP多播
概念:在因特网上进行多播就叫做IP多播(广播的形式),多播可以明显的减少网络上资源的消耗。
(例子:群组聊天,大家都能收到消息)(多播并不是说分别发送多次消息给多个人,而是实现发一次消息所有人都收到)
多播的IP数据报
因为是多播,所以发送的IP数据报中IP目的地址使用的是D类地址,D类地址对应一个群组,从而实现了可以多播,且依然使用IP数据报。
这时,IP数据报首部中类型字段值为2,表示接下来使用的是IGMP协议。
多播的路由器
多播路由器涵盖了普通路由器的特点,且在物理层进行了拓展,使用硬件复制数据包并发送
IGMP协议
作用:多播组中路由表的维护,标识一个群中,各个主机所在网段,将群号与网段号作为映射存入路由表,并维护更新路由表,多播路由器转发多播消息时会根据路由表决定复制多少份消息,并分别转发到那些网段
(注:不标注群组中各台主机的位置,而是标识群组成员都在那些网段上)
维护主机的加入和删除时
- 加入时,主机向多播地址发送IGMP报文声明加入,多播路由器看其网段在路由表中是否存在,不存在就添加网段,存在不变化,并转发主机的组成员关系到其他路由器(让其他多播路由更新)
- 删除时,看对应网段内是否还有其他成员,有就不删除网段,没有就删除这个网段
- 组存活判断:多播路由器周期性弹出本地局域网上的主机,只要组群中有一个主机回应,就表示组是活跃的,若几次探测都没有回应,就认为组消失了,并不在把组的成员转发给其他路由器