网络层
网络层
主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。网络层传输单位是数据报(分组)。
功能
- 功能一、路由选择与分组转发
- 功能二、异构网络互联
- 功能三、拥塞控制
-
为什么需要⽹络层?
数据链路层解决了同⼀局域⽹(直连⽹络)计算机间帧的 传输问题。
但是没有解决以下问题:
- 异构⽹络互联,即跨局域⽹连接和资源共享;
- 互联⽹络中主机标识问题;
- 互联⽹中主机间路由选择问题(最佳路径);
- 互联⽹中数据转发的问题(分组转发)
局域⽹:属于资源⼦⽹;⼴域⽹:属于通信⼦⽹
数据交互方式
- 电路交换
- 报文交换
- 数据报交换
电路交换
优点:
- 1.通信时延小
- 2.有序传输
- 3.没有冲突
- 4.实时性强
缺点:
- 1.建立连接时间长
- 2.线路独占,使用效率低
- 3.灵活性差
- 4.无差错控制能力
报文交换
报文:源应用发送的信息整体
优点:
- 1.无需建立连接
- ⒉存储转发,动态分配线路
- 3.线路可靠性较高
- 4.线路利用率较高5.多目标服务
缺点:
- 1.有存储转发时延
- ⒉报文大小不定,需要网络节点有较大缓存空间
分组交换
分组: 把大的数据块分割成小的数据块。
优点:
- 1.无需建立连接
- 2.存储转发,动态分配线路3.线路可靠性较高
- 4.线路利用率较高
- 5.相对于报文交换,存储管理更容易
缺点:
- 1.有存储转发时延
- ⒉需要传输额外的信息量
- 3.乱序到目的主机时,要对分组排序重组
分组交换
数据报方式为网络层提供无连接服务。
虚电路方式为网络层提供连接服务。
无连接服务:不事先为分组的传输确定传输路径,每个分组独立确定传输路径,不同分组传输路径可能不同。
连接服务:首先为分组的传输确定传输路径(建立连接),然后沿该路径(连接)传输系列分组,系列分组传输路径相同,传输结束后拆除连接。
数据报方式
无连接:无连接服务:不事先为分组的传输确定传输路径,每个分组独立确定传输路径,不向分组传输路径可能不同。
每个分组携带源和目的地址。
路由器根据分组的目的地址转发分组: 基于路由协议/算法构建转发表;检索转发表;每个分组独立选路。
虚电路方式
虚电路将数据报方式和电路交换方式结合,以发挥两者优点。
虚电路: 一条源主机到目的主机类似于电路的路径(逻辑连接),路径上所有结点都要维持这条虚电路的建立,都维持一张虚电路表,每一项记录了一个打开的虚电路的信息。
数据: 数据以分组的方式在虚电路上进行转发,而不是整个数据报。
通信过程:
对比(数据报&虚电路)
数据报服务 | 虚电路服务 | |
---|---|---|
连接的建立 | 不要 | 必须有 |
目的地址 | 每个分组都有完整的目的地址 | 仅在建立连接阶段使用,之后每个分组使用长度较短的虚电路号 |
路由选择 | 每个分组独立地进行路由选择和转发 | 属于同一条虚电路的分组按照同一路由转发 |
分组顺序 | 不保证分组的有序到达 | 保证分组的有序到达 |
可靠性 | 不保证可靠通信,可靠性由用户主机来保证 | 可靠性由网络保证 |
对网络故障的适应性 | 出故障的结点丢失分组,其他分组路径选择发生变化,可正常传输 | 所有经过故障结点的虚电路均不能正常工作 |
差错处理和流量控制 | 由用户主机进行流量控制,不保证数据报的可靠性 | 可由分组交换网负责,也可由用户主机负责 |
路由算法
- 静态路由算法(非自适应路由算法)管理员手工配置路由信息。简便、可靠,在负荷稳定、拓扑变化不大的网络中运行效果很好,广泛用于高度安全性的军事网络和较小的商业网络。路由更新慢,不适用大型网络。
- 动态路由算法(自适应路由算法)路由器间彼此交换信息,按照路由算法优化出路由表项。路由更新快,适用大型网络,及时响应链路费用或网络拓扑变化。算法复杂,增加网络负担。
- 全局性:链路状态路由算法(OSPF) 所有路由器掌握完整的网络拓扑和链路费用信息。
- 分散性:距离向量路由算法(RIP) 路由器只掌握物理相连的邻居及链路费用。
分层次的路由选择协议
问题: 为什么使用分层次的路由选择协议?
原因:
- 因特网规模很大
- 许多单位不想让外界知道自己的路由选择协议,但还想连入因特网
自治系统AS:
在单一的技术管理下的一组路由器,而这些路由器使用同一种AS内部的路由选择协议和共同的度量以确定分组在该AS内的路由,同时还使用一种AS之间的路由协议以确定在AS之间的路由。
一个AS内的所有网络都属于一个行政单位来管辖,一个自治系统的所有路由器在本自治系统内都必须连通。
路由选择协议:
- 内部网关协议lGP 一个AS内使用的 RIP、OSPF
- 外部网关协议EGP AS之间使用的BGP
一、RIP协议
距离向量,适合较小的网络
RIP是一种分布式的基于距离向量的路由选择协议,是因特网的协议标准,最大优点是简单。RIP协议要求网络中每一个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离记录(即一组距离)。
距离: 通常为“跳数”,即从源端口到目的端口所经过的路由器个数,经过一个路由器跳数+1。特别的,从一路由器到直接连接的网络距离为1。RIP允许一条路由最多只能包含15个路由器,因此距离为16表示网络不可达。
- RIP协议和谁交换? 仅和相邻路由器交换信息。
- 交换什么? 路由器交换的信息是自己的路由表。
- 多久交换一次? 每30秒交换一次路由信息,然后路由器根据新信息更新路由表。若超过180s没收到邻居路由器的通告,则判定邻居没了,并更新自己路由表。
路由器刚开始工作时,只知道直接连接的网络的距离(距离为1),接着每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。经过若干次更新后,所有路由器最终都会知道到达本自治系统任何一个网络的最短距离和下一跳路由器的地址,即“收敛”。
距离向量算法步骤
-
修改相邻路由器发来的RIP报文中所有表项。对地址为x的相邻路由器发来的RIP报文,修改此报文中的所有项目:把“下一跳”字段中的地址改为x,并把所有的“距离”字段+1。如下:R1接收到X路由器的报文为(Net3,2,R2)-->(Net3,2,X)
-
对修改后的RIP报文中的每一个项目,进行以下步骤:
-
R1路由表中若没有Net3,则把该项目填入R1路由表
-
R1路由表中若有Net3,则查看下一跳路由器地址:
若下一跳是x,则用收到的项目替换源路由表中的项目:
若下一跳不是x,原来距离比从x走的距离远则更新,否则不作处理。
-
-
若180s还没收到相邻路由器x的更新路由表,刚把x记为不可达的路由器,即把距离设置为16。
特点
当网络出现故障时,要经过比较长的时间(例如数分钟)才能将此信息传送到所有的路由器,“慢收敛”。如下图,网络1故障时,那么R1和R2之间会一直传递错误消息,直至距离达到最大16都会知道R1链路异常。
RIP协议的报文格式
二、OSPF协议
链路状态,适合较大的网络
开放最短路径优先OSPF协议: “开放”标明OSPF协议不是受某一家厂商控制,而是公开发表的;“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。
OSPF最主要的特征就是使用分布式的链路状态协议。
OSPF的特点:
- OSPF协议和谁交换? 使用洪泛法向自治系统内所有路由器发送信息,即路由器通过输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再次将此信息发往其所有的相邻路由器(类似广播)。 最终整个区域内所有路由器都得到了这个信息的一个副本。
- 交换什么? 发送的信息就是与本路由器相邻的所有路由器的链路状态(本路由器和哪些路由器相邻,以及该链路的度量/代价――费用、距离、时延、带宽等)。
- 多久交换一次? 只有当链路状态发生变化时,路由器才向所有路由器洪泛发送此信息。
最后,所有路由器都能建立一个链路状态数据库,即全网拓扑图。
链路状态路由算法
-
每个路由器发现它的邻居结点【通过发送HELLO问候分组】,并了解邻居节点的网络地址。
-
设置到它的每个邻居的成本度量metric。
-
构造【DD数据库描述分组】,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
-
如果DD分组中的摘要自己都有,则邻站不做处理;如果有没有的或者是更新的,则发送【LSR链路状态请求分组】请求自己没有的和比自己更新的信息。
-
收到邻站的LSR分组后,发送【LSU链路状态更新分组】进行更新。
-
更新完毕后,邻站返回一个【LSAck链路状态确认分组】进行确认。
只要一个路由器的链路状态发生变化:
5.泛洪发送【LSU链路状态更新分组】进行更新。
6.更新完毕后,其他站返回一个【LSAck链路状态确认分组】进行确认。
7.使用Dijkstra根据自己的链路状态数据库构造到其他节点间的最短路径。
OSPF分组
OSPF的区域
为了使OSPF能够用于规模很大的网络,OSPF 将一个目冶系统再划分为右十个史小的化围,P"队A跌。每一个区域都有一个32位的区域标识符(用点分十进制表示)区域也不能太大,在一个区域内的路由器最好不超过200个。
OSPF其他特点:
- 每隔30min,要刷新一次数据库中的链路状态。
- 由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF 协议要比距离向量协议RIP好得多
- OSPF不存在坏消息传的慢的问题,它的收敛速度很快。
三、BGP协议
BGP协议的特点
- OSPF协议和谁交换? 与其他AS的邻站BGP发言人交换信息。
- 交换什么? 交换的网络可达性的信息,即要到达某个网络所要经过的一系列AS。
- 多久交换一次? 发生变化时更新有变化的部分。
BGP协议交换信息的过程
BGP所交换的网络可达性的信息就是要到达某个网络所要经过的一系列AS。当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各AS的较好路由。
BGP协议的报文格式
一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息,就要先建立TCP连接,即通过TCP传送,然后在此连接上交换BGP报文以建立BGP会话(session),利用BGP会话交换路由信息。
BGP协议特点:
BGP支持CIDR,因此 BGP的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
在BGP刚刚运行时,BGP的邻站是交换整个的 BGP路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销都有好处。
BGP-4的四种报文
- 1.OPEN(打开)报文:用来与相邻的另一个BGP发言人建立关系,并认证发送方。
- 2.UPDATE(更新)报文:通告新路径或撤销原路径。
- KEEPALIVE(保活)报文:在无UPDATE时,周期性证实邻站的连通性;也作为OPEN的确认。
- NOTIFICATION(通知)报文:报告先前报文的差错;也被用于关闭连接。
四、三种路由协议比较
- RIP是一种分布式的基于距离向量的内部网关路由选择协议,通过广播UDP报文来交换路由信息。
- OSPF是一个内部网关协议,要交换的信息量较大,应使报文的长度尽量短,所以不使用传输层协议(如UDP或TCP),而是直接采用IP。
- BGP是一个外部网关协议,在不同的自治系统之间交换路由信息,由于网络环境复杂,需要保证可靠传输,所以采用TCP。
协议 | RIP | OSPF | BGP |
---|---|---|---|
类型 | 内部 | 内部 | 外部 |
路由算法 | 距离-向量 | 链路状态 | 路径-向量 |
传递协议 | UDP | IP | TCP |
路径选择 | 跳数最少 | 代价最低 | 较好,非最佳 |
交换结点 | 和本结点相邻的路由器 | 网络中的所有路由器 | 和本结点相邻的路由器 |
交换内容 | 当前本路由器知道的全部信息,即自己的路由表 | 与本路由器相邻的所有路由器的链路状态 | 首次/整个路由表 非首次/有变化的部分 |
各层的传输单元(单位)
IP数据报格式
TCP/IP协议栈
IP数据报格式
TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报(IP Datagram).这是一个与硬件无关的虚拟包,由首部部分和数据部分两部分组成.首部的前一部分是固定长度,共 20 字节,是所有IP数据报必须具有的.在首部的固定部分的后面是一些可选字段,其长度是可变的。
上图中:每一行的长度为4字节 (4B=32bit,即32位),前五行为首部的固定部分,共5*4B=20B(字节),下表为图中各字段的描述。
字段 | 描述 |
---|---|
版本 | 占4位,指IP协议的版本.通信双方使用的IP协议版本必须一致。 目前广泛使用的 IP协议版本号为 4 (即 IPv4).IPv6 目前还处于起步阶段. |
首部长度 | 占 4 位,可表示的最大十进制数值是15.请注意,这个字段所表示数的单位是4 字节. 因此,当 IP 的首部长度为 1111 时 (即十进制的 15),首部长度就为 60字节。 |
总长度 | 总长度指首都及数据之和的长度,单位为1字节。因为总长度字段为 16位,所以数据报的最大长度为 2的16次方-1=65535字节. 在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,即最大传送单元 MTU (Maximum Transfer Unit).当一个数据报封装成链路层的帧时,此数据报的总长度 (即首部加上数据部分)一定不能超过下面的数据链路层的MTU值,否则要分片。 |
标识Identification) | 占 16位.IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1,并将此值赋给标识字段.但这个"标识"并不是序号,因为 IP是无连接的服务,数据报不存在按序接收的问题。 当数据报由于长度超过网络的 MTU 而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。 |
标志 (Flag) | 占3 位,但目前只有2位有意义。X __ __ 中间位DF (Don't Fragment) ,DF=1,禁止分片,DF=0,允许分片 最低位MF (More Fragment),MF=1,后面“还有分片,MF=0,代表最后一片或者没分片 |
片偏移: | 占 13位。 指出较长分组分片后,某片在原分组中的相对位置。以8B为单位。 |
生存时间: | 占 8位,生存时间字段常用的英文缩写是TTL(Time To Live),其表明数据报在网络中的寿命.由发出数据报的源点设置这个字段.其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源.最初的设计是以秒作为 TTL的单位.每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间.若数据报在路由器消耗的时间小于 1 秒,就把TTL值减 1.当 TTL值为 0时,就丢弃这个数据报. |
协议: | 占 8 位.协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。![]() |
校验和 | 占 16位.这个字段只检验数据报的首部,但不包括数据部分.这是因为数据报每经过一个路由器,都要重新计算一下首都检验和 (一些字段,如生存时间,标志,片偏移等都可能发生变化),不检验数据部分可减少计算的工作量 |
源地址 | 源Ip地址,占32位。 |
目的地址 | 目的Ip地址,占32位。 |
可选字段 | 0~40B ,用来支持排错、测量以及安全等措施。 |
填充 | 全0,把首部补成4B的整数倍。 |
IP数据报分片例题
分片前后的IP数据报对比
总长度 | 标识 | MF | DF | 片偏移 | |
---|---|---|---|---|---|
原始数据报 | 3820 | 12343 | 0 | 0 | 0 |
数据报片1 | 1420 | 12343 | 1 | 0 | 0 |
数据报片2 | 1420 | 12343 | 1 | 0 | 175 |
数据报片3 | 1020 | 12343 | 0 | 0 | 350 |
IPv4地址
IPv4使用32位(4字节)地址,因此地址空间中只有4,294,967,296(232)个地址。不过,一些地址是为特殊用途所保留的,如专用网络(约1800万个地址)和多播地址(约2.7亿个地址),这减少了可在互联网上路由的地址数量。随着地址不断被分配给最终用户,IPv4地址枯竭问题也在随之产生。基于分类网络、无类别域间路由和网络地址转换的地址结构重构显著地减少了地址枯竭的速度。但在2011年2月3日,在最后5个地址块被分配给5个区域互联网注册管理机构之后,IANA的主要地址池已经用尽。
IP地址: 全世界唯一的32位/4字节标识符,标识路由器主机的接口。
IP地址::={<网络号>,<主机号>}
11011111 00000001 00000001 00000001 = 223.1.1.1 (点分十进制)
下图中有六个网络,外围三个是三个局域网(LAN),内圈三个为无编号网络,它只有连线,没有主机。
IP编址的历史阶段
- 分类的IP地址
- 子网的划分
- 构成超网(无分类编址方法)
一、分类的IP地址
分类:
描述 | A类IPv4地址 | B类IPv4地址 | C类IPv4地址 | D类IPv4地址 | E类IPv4地址 |
---|---|---|---|---|---|
网络标志位 | 0 | 10 | 110 | 1110 | 1111 0 |
IP地址范围 | 0.0.0.0~127.255.255.255 | 128.0.0.0~191.255.255.255 | 192.0.0.0~223.255.255.255 | 224.0.0.0~239.255.255.255 | 240.0.0.0~255.255.255.255 |
可用IP地址范围 | 1.0.0.1~127.255.255.254 | 128.0.0.1~191.255.255.254 | 192.0.0.1~223.255.255.254 | ||
是否可以分配给主机使用 | 是 | 是 | 是 | 否 | 否 |
网络数量(个) | 126 (27-2) | 16384 (214) | 2097152 (221) | --- | --- |
每个网络中可容纳主机数(个) | 16777214 (224-2) | 65534 (216-2) | 254 (28-2) | --- | --- |
适用范围 | 大量主机的大型网络 | 中等规模主机数的网络 | 小型局域网 | 留给Internet体系结构委员会(IAB)使用 组播地址 | 保留,仅作为搜索、Internet的实验和开发用 |
备注 | 0.0.0.0为特殊地址,表示本网主机 | 255.255.255.255为特殊地址,用于定向广播 |
说明:D类与E类IPv4地址不区分网络地址与主机地址
特殊IP地址:
网络号 | 主机号 | 是否可以作为源地址 | 是否可以作为目的地址 | 备注/描述 |
---|---|---|---|---|
全为0 | 全为0 | 允许 | 禁止 | 本网范围内表示主机,路由表中用于表示默认路由 |
全为0 | Host ID | 允许 | 禁止 | 表示本网内某个特定主机 |
全为1 | 全为1 | 禁止 | 允许 | 定向广播地址 |
127 | 任意合法的值 | 允许 | 允许 | 环回地址,用于本地测试 |
Network ID | 全为1 | 禁止 | 允许 | 直接广播地址 |
IPv4的私有IP定义在RFC 1918
在IPv4所允许的大约四十亿地址中,三个地址块被保留作专用网络。这些地址块在专用网络之外不可路由,专用网络之内的主机也不能直接与公共网络通信。但通过网络地址转换(NAT),使用这些地址的主机可以像拥有共有地址的主机在互联网上通信。
RFC1918 规定区块名 | IP地址区块 | IP数量 | 分类网络 说明 | 最大CIDR区块 (子网掩码) | 主机端位长 |
---|---|---|---|---|---|
24位区块 | 10.0.0.0 – 10.255.255.255 | 16,777,216 | 单个A类网络 | 10.0.0.0/8 (255.0.0.0) | 24位 |
20位区块 | 172.16.0.0 – 172.31.255.255 | 1,048,576 | 16个连续B类网络 | 172.16.0.0/12 (255.240.0.0) | 20位 |
16位区块 | 192.168.0.0 – 192.168.255.255 | 65,536 | 256个连续C类网络 | 192.168.0.0/16 (255.255.0.0) | 16位 |
共享地址
Shared Address Space(RFC 6598),IANA于2012年将100.64.0.0/10定义用于电信级NAT场景。这些地址与RFC1918中定义的私有IP是不同的,只能用于运营商的内部网络,虽然在某些特性中与私有IP相同,但在定义上不能划为私有地址(更不是公用地址)。
二、子网的划分
为什么需要子网划分?
- Internet组织机构定义了五种IP地址,有A、B、C三类地址。A类网络有126个,每个A类网络可能有16777214台主机,它们处于同一广播域。而在同一广播域中有这么多节点是不可能的,网络会因为广播通信而饱和,结果造成16777214个地址大部分没有分配出去。
- 两级的IP地址不够灵活,如一个公司需要申请一个新的IP地址时需要向IANA去申请,这样会耗费大量时间精力。
子网划分定义:
可以把基于每类的IP网络进一步分成更小的网络,每个子网由路由器界定并分配一个新的子网网络地址,子网地址是借用基于每类的网络地址的主机部分创建的。划分子网后,通过使用掩码,把子网隐藏起来,使得从外部看网络没有变化,这就是子网掩码。
如何求得子网网络地址:
子网掩码与IP地址逐位相与,就得到子网网络地址。
如上图:
IP地址: 145.13.3.10 /10010001 00001101 0000011 00000000
子网掩码: 255.255.255.0 /11111111 11111111 11111111 00000000
子网网络即为: 145.13.3.0 /10010001 00001101 0000011 00000000
举栗子:
已知IP地址是141.14.72.24,子网掩码是255.255.192.0,求网络地址。
IP地址:
141.14.72.24 /10001101 00001110 01001000 00011000
子网掩码:
255.255.192.0 /11111111 11111111 11000000 00000000
子网网络即为:
141.14.64.0 /10001101 00001110 01000000 00000000
三、构成超网(无分类编址方法)
无类域间路由
无类域间路由(Classless Inter-Domain Routing,CIDR)可以将路由集中起来,在路由表中更灵活地定义地址。它不区分 A 类、B 类、C 类地址,而是使用 CIDR 前缀的值指定地址中作为网络 ID 的位数。这个前缀可以位于地址空间的任何位置,让管理者能够以更灵活的方式定义子网,以简便的形式指定地址中网络 ID 部分和主机 ID 部分。
CIDR 标记使用一个斜线/
分隔符,后面跟一个十进制数值表示地址中网络部分所占的位数。例如,205.123.196.183/25 中的 25 表示地址中 25 位用于网络 ID,相应的掩码为 255.255.255.128。
- 消除了传统的A类,B类和c类地址以及划分子网的概念。
⒉.融合子网地址与子网掩码,方便子网划分。
CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”。
举例: 128.14.35.7/20是某CIDR地址块中的一个地址.
-
二进制: 10000000 00001110 00100011 00000111
-
最小地址: 10000000 00001110 00100000 00000000
128.14.32.0
-
最大地址: 10000000 00001110 0010111111111111
128.14.47.25
-
地址块: 128.14.32.0/20 “/20地址块“
-
地址掩码(子网掩码):
11111111 11111111 11110000 00000000
构成超网
如上图,路由器R2中有两个网络: 206.1.0.0/17 , 206.1.128.0/17
- 正常情况下路由器转发表应该为:
网络前缀 | 下一跳地址 |
---|---|
206.1.0.0/17 | R2 |
206.1.128.0/17 | R2 |
上表中有两个网络都指向R2路由器,如果是有N (N>1000) 个网络都指向R2时就会造成很大的性能消耗,此时就可以进行合并。
- 合并后的路由表为:
网络前缀 | 下一跳地址 |
---|---|
206.1.0.0/16 | R2 |
-
合并过程
11001110 00000001 00000000 00000000
11001110 00000001 10000000 00000000
把网络地址向前移一位,主机们全部写成 0
11001110 00000001 00000000 00000000
最长前缀匹配
使用CIDR时,查找路由表可能得到几个匹配结果,应选择具有最长网络前缀的路由。前缀越长,地址块越小,路由越具体。
如:路由器RO的路由表见下表:若进入路由器RO的分组的目的地址为132.19.237.5 请问该分组应该被转发到哪一个下一跳路由器()。
A. R1 B. R2 C. R3 D. R4
目的网络 | 下一跳 |
---|---|
132.0.0.0/8 | R1 |
132.0.0.0/11 | R2 |
132.19.232.0/22 | R3 |
0.0.0.0/0 | R4 |
解:
-
把IP转换为二进制
10000100 00001001 11101101 00000101
-
与路由表中各行进行匹配,获得对应的网络地址
8位网络号: 10000100 00001001 11101101 00000101 网络号> 132.0.0.0
11位网络号: 10000100 00001001 11101101 00000101 网络号> 132.0.0.0
22位网络号: 10000100 00001001 11101101 00000101 网络号> 132.19.236.0
0位网络号: 00000000 00000000 00000000 00000000 网络号> 0.0.0.0
-
上面获取到的网络号中 8位和11位都可以匹配上,但是11位更长,所以选择这个路由进行转发。
分组转发
IP数据报(分组)转发过程
-
根据目的IP地址和网络掩码来计算出目的主机是否和源主机在同一网络(网段)内,如果是,则直接交付(通过链路层设备与协议直接发送数据报到目的主机,不需要路由器转发)。
-
如果不在同一网络内就需要查找路由表,找到下一跳的地址。这个过程称为间接交付(需要网络层设备进行转发)。
-
如果没有找到下一跳地址。
- 如果此设备为终端主机,且配置了默认网关,则交由默认网关去转发。没有默认网关直接丢弃,因为是主机自己,所以不需要发送差错报文(总不能自己发给自己。。。)
- 如果是路由器这样的网络层设备(即没有默认网关),则直接丢弃数据报,然后向源主机发送一个差错报文。
问题 1 :
源主机如何判断目的主机是否与自己在同一个网络中呢 ?
假设主机 C 向主机 F 发送 IP 数据报。首先,主机 C 将自己的 IP 地址和子网掩码相与,得到主机 C 所在网络的网络地址。 之后,主机 C 将主机 F 的 IP 地址与自己的子网掩码相与,得到目的网络地址。发现它们两个不相等,因此知道这是间接交付,需要路由器转发。
网络层协议
ARP协议
ARP协议是地址解析协议(Address Resolution Protocol)是通过解析IP地址得到MAC地址的,是一个在网络协议包中极其重要的网络传输协议,它与网卡有着极其密切的关系,在TCP/IP分层结构中,把ARP划分为网络层。
为什么呢?
因为在网络层看来,源主机与目标主机是通过IP地址进行识别的,而所有的数据传输又依赖网卡底层硬件,即链路层,那么就需要将这些IP地址转换为链路层可以识别的东西,在所有的链路中都有着自己的一套寻址机制,如在以太网中使用MAC地址进行寻址,以标识不同的主机,那么就需要有一个协议将IP地址转换为MAC地址,由此就出现了ARP协议,所有ARP协议在网络层被应用,它是网络层与链路层连接的重要枢纽,每当有一个数据要发送的时候都需要在通过ARP协议将IP地址转换成MAC地址,在IP层及其以上的层次看来,他们只标识IP地址,从不跟硬件打交道,就像我一样,我做应用层的工作,而不会去写底层驱动,得专门有个同事将驱动写完给我,我只需要知道他提供的API接口就行了,而我就专心处理我的工作,我相信他能把驱动写好,我只需要直接调用即可。
ARP缓存表
既然已经解释了ARP协议的用途及重要性,那么它是如何工作的?为了实现IP地址与MAC地址的查询与转换,ARP协议引入了ARP缓存表的概念,每台主机或路由器在维护着一个ARP缓存表(ARP table),这个表包含IP地址到MAC地址的映射关系,表中记录了<IP地址,MAC地址>对。
局域网内ARP协议
主机1发送数据给主机3的过程
-
在传输层需要将应用层的数据报文进行分段,下图分为了1,2,3三个段。
-
网络层在报文段上加上源IP地址和目的IP地址,IP1 和 IP3。
-
链路层需要将网络层的报文段再进行分组(如果有需要的话,根据MTU判断,下图是没有进行分组的),然后将源MAC地址和目的MAC地址加上,在这里有个问题,目的MAC地址怎么来? 来自网络层。
-
网络层获取目的MAC地址时,先会从本机的ARP高速缓存中获取目的MAC地址,如果没有则通过ARP协议来获取目的MAC地址。
通过ARP协议获取目的MAC地址过程:
-
发送广播数据报,内容如下图
-
目的主机接收到ARP数据报后,会返回一个响应数据报,如下:
-
-
在链路层中获取目的MAC地址到后,就可以计算帧校验序列FCS,将其添加到帧尾部。
-
物理层将数据用比特流形式发送出去。
非局域网内ARP协议
主机1发送数据给主机5的过程
除网络层之外的过程基本一致,不一样的地方在于目的MAC地址获取,和传输过程中的封装和解封装。过程如下:
-
在传输层需要将应用层的数据报文进行分段,下图分为了1,2,3三个段。
-
网络层在报文段上加上源IP地址和目的IP地址,IP1 和 IP3。
-
链路层需要将网络层的报文段再进行分组(如果有需要的话,根据MTU判断,下图是没有进行分组的),然后将源MAC地址和目的MAC地址加上,在这里有个问题,目的MAC地址怎么来? 来自网络层。
-
网络层会将目的IP地址和子网掩码进行与运算,发现目的IP地址不在这个网段内,此时目的MAC地址就直接使用默认网关的MAC地址。此时数据会转发到路由器的端口6上。数据如下图:
-
在路由器中会通过路由转发规则从端口7转发到下一个路由器的端口8。因为路由器是网络层的设备,所以转发过程中会将数据报进行解封装和再封装。再封装后的数据报如下:
-
在这个路由器中会再次进行解封装和再封装,此时路由器可以直接通过端口9直接发送给目的主机5。封装的数据报如下,因为已经在一个局域网内,那么主机5的MAC地址获取过程即和局域网内ARP协议一样。
DHCP协议
主机如何获得IP地址?
- 静态配置
- 动态配置
静态配置
配置内容有:IP地址,子网掩码,默认网关,DNS服务器
动态配置
动态主机配置协议DHCP是应用层协议,使用客户/服务器方式,客户端和服务端通过广播方式进行交互,基于UDP。
DHCP提供即插即用联网的机制,主机可以从服务器动态获取IP地址、子网掩码、默认网关、DNS服务器名称与IP地址,允许地址重用,支持移动用户加入网络,支持在用地址续租。
获取IP的过程:
-
主机广播DHCP发现报文
即: “有没有DHCP服务器呀?” 试图找到网络中的服务器,服务器获得一个IP地址。
-
DHCP服务器广播DHCP提供报文
即: “有!”“有!”“有!”服务器拟分配给主机一个IP地址及相关配置,先到先得。
-
主机广播DHCP请求报文
即: “我用你给我的IP地址啦?” 此时可能收到多个DHCP服务器的IP,广播方式可以确认使用的是哪个DHCP发过来的IP.
-
DHCP服务器广播DHCP确认报文
即: 用吧! ”正式将IP地址分配给主机。
ICMP协议
功能: ICMP协议支持对主机或路由器实现差错(或异常)报告、网络探询功能。
在网络层如果出现有差错的数据报,路由器或者主机应付丢弃这个数据报,但是同时也会返回一个ICMP差错报文给源主机。
ICMP差错报文
ICMP差错报告报文(5种):
- 终点不可达: 当路由器或主机不能交付数据报时就向源点发送终点不可达报文。 无法交付
- 源点抑制: 当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。拥塞丢失数据
- 时间超过: 当路由器收到生存时间TTL=O的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。 TTL=0
- 参数问题: 当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。首部字段有问题
- 改变路由(重定向) : 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
ICMP报文内容:
不应发送ICMP差错报文的情况:
- 对ICMP差错报告报文不再发送ICMP差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
- 对具有组播地址的数据报都不发送ICMP差错报告报文。
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文。
ICMP询问报文
- 回送请求和回答报文: 主机或路由器向特定目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。 测试目的站是否可达以及了解其相关状态。
- 时间戳请求和回答报文: 请某个主机或路由器回答当前的日期和时间。用来进行时钟同步和测量时间。
- 掩码地址请求和回答报文
- 路由器询问和通告报文
ICMP的应用
-
**PING : ** 测试两个主机之间的连通性,使用了ICMP回送请求和回答报文。
-
Traceroute: 跟踪一个分组从源点到终点的路径,使用了ICMP时间超过差错报告报文。
Traceroute原理:
- 源主机发送一连串数据报文,报文的TTL从1开始递增。
- 当第1个路由器接收到初始TTL=1的报文时,TTL消耗完,所以数据报无法送达,路由器就会返回一个ICMP时间超过差错报告报文
- 当第2个路由器接收到初始TTL=2的报文时,TTL消耗完,所以数据报无法送达,路由器就会返回一个ICMP时间超过差错报告报文
- ...... (后面依次类推)
- 目的主机会接收到初始TTL=n的报文,TTL消耗完,所以数据报无法送达,路由器就会返回一个ICMP时间超过差错报告报文
- 源主机将前面过程接收到的差错报文组合起来就可以得到源主机和目的主机的整个链路。
IPv6地址
IPv6(Internet Protocol Version 6),也被称为IPng(IP Next Generation),也就是下一代IP协议。
IPv6是 当前主流IP协议IPv4 的升级版本。
IPv4当前的问题
-
地址数量有限
-
NAT技术降低网络性能
当前地址有限的解决方案是NAT,网络地址转换技术。NAT就是让多个内网主机,转成一个公网IP来连接互联网。这样虽然能暂时解决地址紧缺的问题,但会带来更多的问题。首先地址转换对设备的压力很大,势必会降低网络性能,增加延迟,降低体验。
-
NAT并不能长久的解决地址紧缺问题
因为NAT实现一个公网地址承载多个用户流量的原理是,用端口号来区分不同用户的连接,但是一个公网IP最多只有65535个端口,所以承载的连接数有限。当用户数据持续增多,也必须要用到更多的公网IP了。
-
无法适应物联网的发展, 万物互连,万物都需要IP地址,当然IPv4已经有心无力
-
广播机制存在,对网络性能会造成损耗, IPv4中的ARP、DHCP等必备协议均采用广播方式,对网络的性能会有一定消耗。
IPv6有哪些特点?
-
地址数量巨大 IPv6采用 128位的地址空间,总地址数量是2的128次方,理论上可以说地址数量近乎无限。
-
提高网络性能
IPv6不但可以避免NAT造成的性能损耗,另外还精简了报头结构,让数据转发效率更高。和IPv4头部相比,IPv6头部去除了IHL、identifiers、Flags、Fragment Offset、Header Checksum、 Options、Padding域,只增了流标签域,因此IPv6报文头的处理较IPv4大大简化,提高了处理效率。
-
简化运维,自动编址 IPv4需要借助DHCP才可以实现终端自动获取地址。IPv6本身就具备自动配置地址的能力。
-
更加安全 IPv6原生支持IPsec扩展头部,可以从各个方面保障数据传输的安全
lPv6数据报格式:
首部中的具体字段:
字段 | 描述 |
---|---|
版本 | 指明了协议版本,总是6。 |
优先级 | 区分数据报的类别和优先级 |
流标签 | “流”是互联网络上从特定源点到特定终点的一系列数据报。所有属于同一个流的数据报都具有同样的流标签。 |
有效载荷长度 | 有效载荷部分的长度,所以总长度为:有效载荷长度 + 首部长度 |
下一个首部 | 标识下一个扩展首部或上层协议首部。 |
跳数限制 | 相当于IPv4的TTL。 |
源地址 | 源Ip地址,占128位。 |
目的地址 | 目的Ip地址,占128位。 |
IPv6和IPv4
- IPv6将地址从32位(4B)扩大到128位(16B),更大的地址空间。
- IPv6将IPv4的校验和字段彻底移除,以减少每跳的处理时间。
- IPv6将IPv4的可选字段移出首部,变成了扩展首部,成为灵活的首部格式,路由器通常不对扩展首部进行检查,大大提高了路由器的处理效率。
- IPv6支持即插即用(即自动配置),不需要DHCP协议。
- IPv6首部长度必须是8B的整数倍,IPv4首部是4B的整数倍。
- .lPv6只能在主机处分片,IPv4可以在路由器和主机处分片。
- .ICMPv6:附加报文类型“分组过大”。
- IPv6支持资源的预分配,支持实时视像等要求,保证一定的带宽和时延的应用。
- lPv6取消了协议字段,改成下一个首部字段。
- lPv6取消了总长度字段,改用有效载荷长度字段。
- IPv6取消了服务类型字段。
lPv6地址表示形式
-
一般形式
冒号十六进制记法(即8段16进制的数组合成): 4BF5 : AA12 : 0216 : FEBC : BA5F : 039A : BE9A : 2170
-
压缩形式
压缩前(一般形式): 4BF5 : 0000 : 0000 : 0000 : BA5F : 039A : 000A : 2176
压缩前后: 4BF5 : 0 : 0 : 0 : BA5F : 39A : A : 2176 -
零压缩: 一连串连续的O可以被一对冒号取代
压缩形式: FFO5 : 0 : 0 : 0 : 0 : 0 : 0 : B3
零压缩形式: FFO5 : : B3
双冒号表示法在一个地址中仅可出现一次,多次会造成歧义。
lPv6基本地址类型
- 单播: 一对一通信可做源地址+目的地址
- 多播: 一对多通信可做目的地址
- 任播: 一对多中的一个通信可做目的地址
IPv6向IPv4过渡的策略
-
双栈协议:
双协议栈技术就是指在一台设备上同时启用IPv4协议栈和IPv6协议栈。这样的话,这台设备既能和IPv4网络通信,又能和IPv6网络通信。如果这台设备是一个路由器,那么这台路由器的不同接口上,分别配置了IPv4地址和IPv6地址,并很可能分别连接了IPv4网络和IPv6网络。如果这台设备是一个计算机,那么它将同时拥有IPv4地址和IPv6地址,并具备同时处理这两个协议地址的功能。
-
隧道技术
通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。
IP数据报的三种传输方式
- 单播:单播用于发送数据包到单个目的地,且每发送一份单播报文都使用一个单播IP地址作为目的地址。是一种点对点传输方式。如:只向自己喜欢的女生表白。
- 广播:广播是指发送数据包到同一广播域或子网内的所有设备的一种数据传输方式,是一种点对多点传输方式。如:不管三七二十一,向(一个网络内)所有女生表白,不论是否单身,还是有男朋友。
- 组播(多播):当网络中的某些用户需要特定数据时,组播数据发送者仅发送一次数据,借助组播路由协议为组播数据包建立组播分发树,被传递的数据到达距离用户端尽可能近的节点后才开始复制和分发,是一种点对多点传输方式。如:向(一个网络内)所有单身女生表白,这样就有了一定筛选。
举栗子:
如下视频服务器,如果使用单播的模式,在发送者和每一接收者之间需要单独的数据信道,就需要90个连接才能实现这个功能,极大浪费了资源。
组播提高了数据传送效率。减少了主干网出现拥塞的可能性。组播组中的主机可以是在同一个物理网络,也可以来自不同的物理网络(如果有组播路由器的支持)。 组播路由器-->可以运行组播协议的路由器
IP组播地址
IP组播地址让源设备能够将分组发送给一组设备。属于多播组的设备将被分配一个组播组IP地址(一群共同需求主机的相同标识)。
组播地址范围为224.0.0.0~239.255.255.255(D类地址),一个D类地址表示一个组播组。只能用作分组的目标地址。源地址总是为单播地址。
- 组播数据报也是“尽最大努力交付”,不提供可靠交付,应用于UDP。
- 对组播数据报不产生ICMP差错报文。
- 并非所有D类地址都可以作为组播地址。