前言:
网络层分为上下两篇来讲述,上篇主要内容为数据平面,下篇为控制平面。
一、网络层概述
数据平面:解决路由器如何将数据报正确地从输入端口到合适的输出端口。一个路由器可以有多个输出端口。数据平面是对于内部数据运作来说。
控制平面:解决端到端路径之间路由器的选择问题,这是相对于外部路线来说。
二者关系:控制平面通过构建转发表,转发表内记录着到达目的端的地址,由此使得数据报能在端到端之间进行传送。而数据平面在将数据报放到合适输出链路前都查看一下这个表,根据这个表记录的合适地址来进行转发。
1.转发和路径选择:数据平面和控制平面
转发是路由器的本地输入端到输出端的工作,路径选择是一定网络范围下的工作,在这个网络下进行路径选择相关算法构建转发表。前者是硬件,后者是软件。
2.网络服务模型
大部分网络层使用的服务模型是:尽力而为模型。如其名,不提供相应保障,不能保证传输顺序、最小带宽、时延、交付、安全。虽然如此但是也足够大部分应用使用。IP协议就是一个尽力而为服务。
三、路由器工作原理
1.体系结构
- 输入输出端口:此处“端口”一词是指路由器的物理输入输出接口。二者相互对应。有的输入输出端口在同一条线路卡上(双向)
- 交换结构:交换结构将路由器上的输入输出端口链接在一起,二者传输数据的中间媒介。
- 路由选择处理器:
- 传统路由:执行路由选择协议,维护路由选择表与关联链路状态信息,为路由计算转发表
- SDN路由:实现路由表的计算和路由器的分离解耦。路由表由远程控制器进行计算,路由选择器与之通信接收计算后的路由表,然后将路由表安装到该路由器的输入端口。
2.输入端口处理
在输入端口,对路由表进行查询合适的输出端口,然后输入端口将其交给交换结构。
1)路由表匹配:
假如每个IP之间都有一个表,那个表是巨大的O(n^2)。所以表采用了前缀分组形式。可以注意到许多IP地址有一些部分都是一样的,就是利用这些一样的部分进行分组。
IP地址通过前缀匹配找到合适的链路上,当存在多个匹配时,按照最长前缀匹配规则,即在该表中寻找最长的匹配项,并向最长匹配相关联的链路接口转发分组
3.交换
经内存交换:最简单、最早的路由器是传统计算机,在输入端口输出端口之间的交换是在CPU(路由选择控制器)的直接控制下完成的。
经总线交换:在这种方法中,输入端口经一根共享总线将分组直接传送到输出端口,按照以下方式完成任务
互联网络交换:纵横网络可以并行转发多个分组,非阻塞。
4.排队
输入排队:R(input) > R(switch)造成堵塞从而排队处理
输出排队:R(output) < R(switch)造成堵塞从而排队处理
分组调度:先进先出、优先权排队、循环和加权公平排队
二、网际协议
1.IPv4数据报格式
- 版本:指定IP数据报中使用的IP协议版本,占4位。IPv4对应值为4(0100)
- 首部长度:指示IP数据报头部的总长度,占4位。IP数据报头部的总长度以4字节为单位(即4字节的整数倍)
- 区分服务:用于表示数据报的优先级和服务类型,占8位。包括一个3位长度的优先级,4位长度的标志位,最高位未用
- 总长度:标识整个IP数据报的总长度,包括报头和数据部分,占16位,由此可知IPv4的最大长度为65535(64KB)
- 标识:用于表示IP数据报的标识符,占16位,每个IP数据报有一个唯一的标识(不是序号)。当数据报分段时,这个标识的值就被复制到所有分段的标识字段中,相同的标识字段值使分段后的数据报分段最后能正确地重组成为原来的数据报。
- 标志:指出该IP数据报后面是否还有分段,为分段标志,占3位,仅最低位有意义
- 片偏移:指出该分段在数据报中的相对位置。相对于用户数据字段的起点,该字段从何处开始,占13位
- 生存时间:标识IP数据报在网络中传输的有效期,以秒来计数,占8位。现在通常认为这个数值是指数据报允许经过的路由器数,当值为0时,就丢弃这个数据报。设定生存时间是为了防止数据报在网络中无限制地循环转发。
- 协议:用来标识此IP数据报在传输层所采用的协议类型(如TCP、UDP或ICMP等),以便使目的主机的IP层知道应将数据部分上交给哪个处理过程,占8位
- 首部校验和:用来检验IP数据报的包头部分(不含“数据”部分)在传输到接收端后是否发生了变化,占16位。因为数据报每经过一个路由器,路由器都要重新计算一下报头校验和
- 源地址/目的地址:分别表示该IP数据报发送者和接收者的IP地址,各站32位
- 可变部分:用来支持各种选项,提供扩展余地,可用来支持排错、测量以及安全等措施。后面的填充字段就是为了保证IP数据报的报头是32位的整数倍。
2.IPv4数据报分片
链路层所能传送的最大数据量为最大传送单元(Maximum Transmission Unit,MTU)。超过其最大传送单元的IP数据报会被分为多个更小的数据报,然后链路层对其进行封装为帧转发出去,小的数据报被称为片。
3.IPv4数据报的封装与解封装
链路层将数据封装成帧。整个传输过程中,IP数据报部分是不会变的,只有帧头部分会发生改变,帧头就是记录到下一个路由器的链路地址,所以每经过一个路由器就会经过拆和封两个过程。
在以太网中,存在两个帧的协议,LLC帧和MAC帧。
4.IPv4编址
1)分类IP地址
ABC类别比较
网络类别 | 提供最大网路数 | 第一个网络号 | 最后一个网络号 | 每个网络最大机数 |
A | 127((2^7) - 2) | 1 | 126 | 16,777,214 |
B | 168,383((2^14) - 1) | 128.1 | 192.255 | 65,534 |
C | 2,097,151((2^21)- 1) | 192.0.1 | 223.255.255 | 254 |
特别的IP地址:
IP地址的特点;
IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配
。(构成子网)路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间
。
实际上的IP地址:
实际上IP地址是主机和物理链路之间的接口。一台路由器必须有两个或多个链路与之链接。路由器与每条链路之间也叫做接口,由于存在多个接口,路由器可以借用这些接口与其他主机构成子网。一层一层下来。
通过转发器或者网桥链接起来的若干个局域网仍然属于一个网络,他们共享一个net-id,这个net-id用于与某个局域网与外网进行通信。(由于局域网内部的IP地址是私有的,不对外公开,所以访问外网时,需要路由器进行NAT协议来进行转化成公共IP地址,在进行传输)
2)私有网络和公有网络
私有IP地址 :在局域网中使用的IP。
公网IP地址 :在互联网中使用的地址。
IP地址只运用与局域网内进行通信,不直接进入互联网(每层只能看见每层的网络)
● 10. * :前8位是网络号,共16777216个地址, 用于组建大型局域网;
● 172.16. * 到 172.31. * :前12位是网络号,共1048576个地址, 用于组建中型局域网;
● 192.168.*:前16位是网络号,共65536个地址, 用于组建小型局域网;
包含以上范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP)
补充说明:
- 一个路由器可以配置一个 WAN 口 IP, 一个或多个 LAN 口 IP(私有IP)。
- 路由器 LAN 口连接的主机,都属于当前这个路由器的子网中。
- 不同的路由器,子网 IP 其实都是一样的(通常都是192.168.1.1),子网内的主机 IP 地址不能重复,但是子网之间的 IP 地址就可以重复了。
- 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点。这样的运营商路由器可能会有多级,最外层的运营商路由器,WAN 口 IP 就是一个公网 IP (如下图所示)。
- 子网内的主机需要和外网进行通信时, 路由器将 IP 首部中的 IP 地址进行替换(替换成 WAN 口 IP),这样逐级替换,最终数据包中的 IP 地址成为一个公网 IP,这种技术称为 NAT(Network Address Translation,网络地址转换)。
3)子网
子网介绍
由两个及两个以上的IP高位相同的相互连接的网络称为子网。子网可以直接在物理上进行直接传输
3个子网
6个子网
子网IP划分
现在使用的三级IP地址包含网络号、子网号、主机号
一个子网划分纯属是一个局域网内部的事情,对外是透明不可视的。子网内部的每一个IP各不相同,都使用着一个公共IP。
4)子网掩码
子网掩码介绍
- 子网掩码是一个应用于 TCP/IP 网络的32位二进制值,每节 8 位,必须结合IP地址对应使用。 (常见的 255.255.255.0 等)
- 子网掩码 32 位都与 IP 地址 32 位对应,如果某位是网络地址(网络号部分和子网号部分)则对应的位全为“1”,如果是主机号部分则对应的位全为“0”。(11111111.11111111.11111111.0)
- 子网掩码(subnet masking)的功能是告知主机或路由设备,地址的哪一部分是网络号,包括子网的网络号部分,哪一部分是主机号部分。
- 子网掩码可以分离出 IP 地址中的网络地址和主机地址,用于判断该 IP 地址是在局域网上,还是在广域网上。
- 子网掩码一般用于将网络进一步划分为若干子网,以避免主机过多而拥堵或过少而 IP 浪费。
子网掩码使用原因
从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分,因为 IP 地址本身及数据报的首部没有包含任何关于有关子网划分的信息。
使用子网掩码 (subnet mask) 可以找出 IP 地址中的子网部分
。
子网掩码是一个重要属性
- 子网掩码是一个网络或一个子网的重要属性。
- 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
- 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
- 若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩码。
子网掩码的作用
子网掩码可以分离出 IP 地址中的网络地址和主机地址。当两台计算机要通讯,首先要判断是否处于同一个广播域(局域网)内,即网络地址(网络号)是否相同。如果网络地址相同,表明接受方在本网络上,那么可以把数据包直接发送到目标主机,否则就需要路由网关将数据包转发送到目的地。
默认子网掩码
在使用三级IP时,子网掩码就不是使用默认掩码了,因为子网号占用了主机号的位置,所以原本子网掩码中鉴定主机号的‘0’位置也变成了‘1’
子网掩码的使用
- 网络号:IP地址和子网掩码进行与运算得到网络号。
- 子网号:子网掩码 32 位都与 IP 地址 32 位对应,如果某位是网络地址(网络号部分和子网号部分)则对应的位全为“1”,如果是主机号部分则对应的位全为“0”。将子网掩码中“1”的位数减去该类的默认子网掩码的“1”的位数即为子网号位数。
- 主机号:子网掩码取反再和 IP 地址做与运算得到主机号。
掩码的另外一种表达
就是在IP地址后加 “/#”,#号表示IP号前#位为网络号,也就是说有#位为‘1’
192.268.1.1/18
子网掩码:255.255.255.224
二进制表示:11111111 11111111 11111111 11100000
5.IPv6
由于IPv4的32位地址即将分配完,所以诞生了IPv6的128位地址长度协议。
1)报文格式
- 版本(Version):4 bits,IP协议版本号,固定为6
- 流量类别(Traffic Class):8 bits,与IPv4中的ToS类似,使用RFC 2647中规定的DSCP
- 流标签(Flow Label):20 bits,标记一条流,详细使用信息参见RFC 6437 ”IPv6 Flow Label Specification”
- 有效载荷长度(Payload Length):16 bits,IPv6基本报文头后的数据部分长度(包括扩展头的长度),以字节为单位,也称净荷长度
- 下一报头(Next Header):8 bits,指示基本报文头后的扩展报文头,如果没有扩展报文头,则指示数据部分所承载的协议
- 跳数限制(Hop Limit):与IPv4的生存时间相同
- 源IPv6地址(Source IPv6 Address):128 bits,发送数据报文节点的IPv6地址
- 目的IPv6地址(Destination IPv6 Address):128 bits,接收数据报文节点的IPv6地址
- 扩展报文头(Extension Header):可变长度,包含下一报头字段、扩展报头长度字段和扩展报头的内容,RFC 2460中定义了6中扩展报头
- 数据(Data):报文承载传输的数据
2)变化
- IPv4中存在但是IPv6不在使用的字段或者修改的字段
- 分片/重新组装:IPv6不在运行数据报在路由器上被分片与组装。而是让路由器告诉主机,分组太大了,再分小点在发过来,相当于把分片和组装的任务交给了源主机和目标主机。加快了网络中的IP转发速度
- 首部检验和:由于先前IPv4在运输层、网络层和链路层都进行检验和计算,IPv6觉得浪费时间,所以将网络层的检验和这一步删除了
- 选项:选项字段不在是标准IP首部的一部分。但它并没有消失,而是在IPv6中的的“下一个首部”字段中。
- TTL:TTL更改为跳限制,执行一样的功能
3)IPv4到IPv6d 迁移
如果直接将IPv4修改为IPv6,那全球就必须停网一段时间,这带来的代价是巨大的。显然不可行。所以选择了一种"建隧道"的方式。通过在IPv6之间建立一个IPv4路由器,通过这个路由器进行传话。也就是说IPv4的数据报携带者IPv6的数据报,然后跋山涉水(中途可能与其他IPv4通信),最后到IPv6的目的地,然后目的地对这个数据报进行解封装拿到IPv6的数据报。
6.动态分配地址
主机地址可以收到进行分配,但是大部分时候都是依靠动态主机配置协议(Dynamic Host Configuration,DHCP)。
1)动态分配地址实例
- 主机需要获取自己的IP地址,第一跳路由器地址和DNS服务器:采用DHCP协议
- DHCP 请求被封装在UDP段中,封装在IP数据报中,封装在以太网的帧中
- 以太网帧在局域网范围内广播 (dest: FFFFFFFFFFFF) ,被运行DHCP服务的路由器收
- 到
- 以太网帧解封装成IP,IP解封装成UDP,解封装成DHCP
- DHCP服务器生成DHCP ACK,包含客户端的IP地址,第一跳路由器的IP地址和DNS域名服务器的IP地址
- DHCP服务器封装的报文所在的帧转发到客户端,在客户端解封装成DHCP报文
- 客户端知道它自己的IP地址,DNS服务器的名字和IP地址,第一跳路由器的IP地址
个人笔记使用,如有侵权请联系删除