4. 网络层原理与技术
- 为什么我们不用硬件地址进行通信?
- (设备数量问题)因为设备比较多,供应商也比较多
- (规格问题)不同供应商的解决方案不同,所以使用硬件地址进行通信的通用性比较低。
- (寻址问题)全球设备太多,如果使用硬件设备,那么进行定位比较复杂
- 因为如上情况我们选择使用IP地址(逻辑地址)。
- 本章比较重要,期末占比会比较大。
1. 网络层概述
- 对于不同帧使用同一的方案进行处理
- 第三层希望通过路由选择算法进行路径的选择和转发,对第二层是透明的。
- 第三层只能避免拥塞,但是要到第四层(运输层)才能完成流量控制(第三层不能完成流量控制)
1.1. 第三层职责
- 通过网络移动数据:不同网段之间的通信,不同的广播域,两个广播域之间的进行了划分,互不干扰,不是广播的通信以及对另一个网段的广播需要能传达给对方。
- 使用分层寻址方案(与MAC寻址相反,后者平坦)
- 细分网络并控制流量(flow):一步步进行细化,越近了解的越多:IP地址是一致的,也就是可以忽略物理层的不同。(具体原因在开头已经分析过了)
- 减少交通拥堵,基于IP做分段和传达,用来减少拥塞
- 与其他网络交谈
- 在上面我们可以发现,对于不同数据链路层的帧,第三层基于IP地址,来实现跨介质的逻辑理解和连通。
- 第三层负责进行连通和传达,数据可靠性由终端设备(第四层及以上)来进行保证(不然会带来比较大的计算量)。
- 第三层可以在中间,也可以在终端
1.2. 第三层设备
- 路由器
- 互连网段或网络(不同网段的分割)
- 根据IP地址做出合理的决定
- 确定最佳路径,根据路由表。
- 将数据包从入站端口切换到出站端口
- 如果A网段的设备向路由器发送了一个B网段的广播地址,那么路由器会进行转发,然而如果A网段设备发送的是本网段的广播地址,路由器则不会进行转发。(广播域划分)
2. IP地址和子网划分
2.1. 第三层数据报格式
- IP地址在报文中占据一部分(32bit一个IP地址)
2.2. IPv4报文主要结构
2.2.1. 首部部分
首部部分:上面蓝框部分的整体是首部部分
2.2.2. 版本号
版本号:占 4 bit,指IP协议的版本。目前的 IP 协议版本号为 4 (即 IPv4)(6也就对应IPv6)
2.2.3. 首部长度
首部长度:占 4 bit,可表示的最大数值是15个单位(一个单位为 4 字节,也就是一个单位一行) 因此IP的首部长度的最大值是60字节。
- 因为首部长度是不确定的,所以我们需要进行标识。(用来方便读取)
- 首部长度的32 bit为一行,也就是4个字节为一个单位
- 所以IP报文首部字段长度为15行。
2.2.4. 服务类型
服务类型:占8bit,用来获得更好的服务,这个字段以前一直没有被人们使用。
- 比较早:延时、可靠性、代价等标志位。
- 现在:区分服务:前6个bit表示区分服务码,后2个bit作为保留(这1个字节也就不怎么使用了)
2.2.5. 总长度
总长度:占 16 bit,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节(由于放到帧里面,所以大多数不比1500字节长)。总长度必须不超过最大传送单元 MTU。
2.2.6. 标识
标识(identification):占 16 bit,它是一个计数器,用来产生数据报的标识。
- 他只是为了做报文分片的问题,因为路由器可能连接的是不同网络,比如有线帧和无线帧。
- 接收方依据标识号进行合并(相同标识号的报文是一个大报文,可以合并的)
2.2.7. 标志
标志占 3 bit,最高位为 0
- 让发送方对报文进行控制,让中间路由器对其进行控制
- DF(Don’t fragement):是否允许做分片,0允许做分片,1不允许做分片
- MF:MF为0表示最后一个分片,1是指后面还有分片
2.2.8. 片偏移
片偏移(13 bit)指出:较长的分组在分片后某片在原分组中的相对位置。片偏移以8个字节为偏移单位。
- 相同标识号,然后根据片偏移进行重拍(先发未必先到),偏移比较小的更靠前
- 因为16-3 = 13,2^3 = 8(因为单位是字节,所以用13位就可以补齐)
- 例子(计算偏移量):偏移是字节为单位
2.2.9. 生存时间
生存时间(8 bit)记为 TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值。
- 是通过计数的方式来进行统计
- 最大值是255(最多经过255个路由器)
- 路由器每转发一次,就会对生存时间-1
- 减小为0后,就会丢弃掉,并且通知给发送方我已经丢弃掉这个报文。
- 防止在环上进行传输,避免由于回路问题,造成过大的网络资源浪费
2.2.10. 协议
协议(8 bit)字段指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程
- 有的协议是上层的
- 有的协议是第三层协议
- 具体协议的情况如下
2.2.11. 首部检验和
首部检验和(16 bit)字段:只检验数据报的首部,不包括数据部分。这里不采用 CRC 检验码而采用简单的计算方法。算法过程如下(比较形式化的问题,并不能解决数据报错误的形式)
- 源地址和目的地址都各占 4 字节
- 15 * 4: 15行,每行4字节
2.3. 网络层地址
- IP地址为32位长(Ipv4中)
- 它们以点分十进制格式表示为四个八位字节:133.14.17.0
- IP地址包含两个组成部分:
- 网络ID
- 主机ID
2.3.1. 网络地址:用来标识网段
- 原来由ARIN(美国互联网号码注册机构,www.arin.net)分配,现在已经换了
- 标识设备所连接(attached)的网络
- 可以由前三个八位位组(octets)中的一个,两个或三个来标识
2.3.2. 主机ID:IP地址后面占据1-3个字节
- 由网络管理员分配
- 识别该网络上的特定设备
- 可以由最后三个八位位组中的一个,两个或三个来标识
2.4. IP地址
不同的类地址为地址的网络部分和主机部分保留不同数量的位
三类
- N是Net ID,H 是 Host ID
2.4.1. 分类
- IP地址主要通过第一个字节进行划分
- 0–127 Class A address A类地址
- 128-191 Class B address B类地址
- 192–223 Class C address C类地址
- 224–239 Class D – Multicast D类地址:多播:视频点播的原理也是组播(多播)(前三位全是1)
- 240–255 Class E - Research E类地址:研究
2.4.2. 主机的数量
- 每个类别的最大主机数量各不相同。(不包含网络号)
- A类拥有16,777,214个可用主机(224 – 2)
- B类具有65,534个可用主机(216 – 2)
- C类具有254个可用主机(28 –2)
- 为什么每一类地址中都要减去2?
- 每个网络中的第一个地址都保留用于该网络地址
- 最后一个地址是为广播地址保留的。
2.4.3. 保留(Reserved)地址
- 网络地址:在地址的主机部分中以二进制0结尾的IP地址
- A类网络地址示例:113.0.0.0 (0.0.0代表了这是一个网络地址)
- 网络上的主机只有具有相同网络ID的其他主机才能直接通信。(用来确定是不是在一个网段里面)
- 广播地址:用于将数据发送到网络上的所有设备。(一般是一个网段之间的)
- 广播IP地址在地址的主机部分中以二进制1结尾。
- B类地址的广播地址的示例:176.10.255.255 (decimal 255 = binary 11111111)
- 受限广播地址:255.255.255.255,适用于所有网段,但是只能在发生的网段里传播,不能跨路由器
- Class A
- 99.0.0.0: a reserved network number
- 99.255.255.255: a broadcast number
- Class B
- 156.1.0.0: a reserved network number
- 156.1.255.255: a broadcast number
- Class C
- 203.1.17.0: a reserved network number
- 203.1.17.255:a broadcast number
2.4.4. 专用地址空间
net位上也有保留:私有地址
- 10.0.0.0 - 10.255.255.255
- 172.16.0.0 - 172.31.255.255
- 192.168.0.0 - 192.168.255.255
- 有某些IP地址范围保留用于专用IP寻址方案(Schemas)。上述地址都是用作局域网的内部网段。
- IP地址耗尽及其解决方案
- NAT
- CIDR
- IPv6(最终解决方案)
- 发展过程:网络位数小于24,使得其可以组成超网。
- 多个网段进行划分,保留足够的个人子网网段划分
2.5. 子网划分
- 网络管理员有时需要将网络划分为较小的网络,称为子网,以提供额外的灵活性.
- 从主机字段借来的位被指定为子网字段(Subnet Fields)
- ABC类网的主机数量比较大,会造成浪费,因为avalible的很多,很少能够用满。
- 从Host中借位进行子网划分
- 子网掩码:是由发送方提供。
- 大的子网划分为小的子网来提高灵活性和利用率。
2.5.1. 子网划分的基本概念
- 子网是网络的较小部分
- 提供寻址灵活性。(小的局域网可以完成隔离)
- 子网划分只需要本网段网络管理员进行处理即可,每一个子网也是一个网络(子网只是一个逻辑形式)
- 子网地址通常由网络管理员在本地分配:每一个子网也是一个Net,实际上是和Net是一个标准的
- 子网减少了广播域:使得广播域变小,提高网络利用率,避免接受到大量的无用的广播,广播只能在对应子网中进行广播。
2.5.2. 我们可以借多少位?
- 可以借用的最小位数是2
- 借用的最小位数是2,为什么?
- I如果只借用1位以创建一个子网,那么您将只有一个网络号-.0网络-和广播号-.1网络,没有可以使用的专用网络。
- 两位的时候,01和10给Host,00给网络ID,11位广播地址
- 全0可能导致误判
- 可以借用的最大位数可以是保留至少2位主机号的任何数字(给Host至少保留2位,因为1位的话,要么一个是NET无法使用,要么一个是广播地址)
- A类网络 20位
- B类网络 14位
- C类网络 6位
- 互联网早期时,计算机比较少,没有划分子网。
2.5.3. 子网划分的副产品:地址浪费
- 我们必须在所需的子网数,每个子网可接受的主机以及地址的浪费之间取得平衡(strike a balance)。
- hostID里面的全0和全1不能使用
- subnet不可以使用全0和全1
- 借用4位是最高效率的,提升了划分灵活性,影响了效率
2.5.4. 子网掩码
- 别名:扩展网络前缀
- 定义我们用来构建网络的位数,以及描述主机地址的位数
- Class A 255.0.0.0
- Class B 255.255.0.0
- Class C 255.255.255.0
2.5.5. 计算子网
- 我们有一个C类网络:223.14.17.0
- 我们需要完成如下划分
- 划分成13个子网
- 每个子网有10个主机
2.5.5.1. 第一步
- 确定默认的子网掩码(全1)
- C类网络的默认子网掩码是:255.255.255.0
2.5.5.2. 第二步
- 通过从主机ID借用位来计算子网和主机的实际数量
- 我们对每一个子网需要借用4位来满足一个子网有10台可用的主机。
2.5.5.3. 第三步
- 我们为每个子网获得16个可能的子网和16个可能的主机,因为:
- 对于借用的4位,每个位可以是1或0,从而有24或16种可能的组合。
- 4个剩余主机位也是如此。
- 重要:每个子网上只有14个可用子网和主机。(一般情况下,而可用的是15个可用子网,因为0号子网可用)
- 因为您不能使用第一个和最后一个子网。
- 因为您不能使用每个子网中的第一个和最后一个地址。
- 对于每个,一个是广播地址,一个是网络地址。
2.5.5.4. 第四步
- 确定子网掩码。
- 其中X表示用于子网划分的借用位。
- 将X的位值相加,得到子网掩码的最后一个八位位组十进制值:128 + 64 + 32 + 16 = 240
- 子网掩码是:255.255.255.240(也就是子网的位全是1,主机的位全是0)
- 子网掩码用于显示IP地址中的子网和主机地址字段
2.5.5.5. 第五步
- 确定主机地址的范围
- 16个子网,14个可用子网
- 每个子网16个主机,14个可用主机
2.5.6. 计算子网网络地址
- 第一步:将IP主机地址转换为二进制。
- 第二步:将子网掩码转换为二进制。
- 第三步:使用布尔运算符AND将两者进行运算。
- 第四步:将网络二进制地址转换为点分十进制。
- 这是子网的网络地址
- 它可以帮助确定路径:用来确定是否是一个网段,是否可以通过网关进行转发
- 为了找到子网的网络ID,路由器必须采用IP地址和子网掩码,并且在逻辑上将它们取和
- 路由器根据运算的结果进行计算
- 上图中的子网掩码255.255.255.0是255.255.0.0借用了8位产生的(而不要理解成为C类地址的子网掩码)
上图,就会根据计算出的结果,转发到E2
2.6. 实践:IP寻址问题
- Given 195.137.92.0 and needing 8 usable subnets, find the subnetwork numbers, the ranges of host numbers, and subnetwork broadcast numbers. 给定195.137.92.0并且需要8个可用子网,请找到子网号,主机号范围和子网广播号。
- IP Address is a class C. Default subnet mask is 255.255.255.0. We need to extend the network number by enough bits to give 8 usable subnets. IP地址是C类。默认子网掩码是255.255.255.0。 我们需要将网络号扩展足够的位数以提供8个可用子网。
- Stealing 2 bits yields 2 usable subnets, stealing 3 bits yields 6 usable subnets, so we must steal 4 bits to get 14 usable subnets, of which we needed 8. 借用2位会产生2个可用子网,借用3位会产生6个可用子网,因此我们借用4位才能获得14个可用子网,其中我们需要8个可用地址。
- This makes the subnet mask 255.255.255.240. So the Network number is 195.137.92.NNNN HHHH where Ns stand for network extension bits (subnets) and Hs stand for host numbers. 这将使子网掩码为255.255.255.240。 因此,网络号为195.137.92.NNNN HHHH,其中Ns代表网络扩展位(子网),Hs代表主机号。
- Next we must number the subnets; there are 16 combinations of 4 bit binary numbers but they retain their place value within the last octet. 接下来,我们必须为子网编号。 4位二进制数有16种组合,但它们在最后一个八位位组中保留其位置值。
- 借用4-6位都可以,因为并没有规定子网中主机数量,而为什么是6位是因为一个子网中最少用2位给主机。
3. 第三层设备
- 第三层的路由器
- 路由器的两个功能:
- 路径选择
- 路由转发:将报文转发取出
3.1. 路径选择
- 路由器用于根据链路带宽,跳数,延迟 …
- 选择数据包到达目的地的路径中的下一跳
- Internet 核心层的冗余链路是很必要的(相对于路径选项消耗,其可靠性和稳定性更加重要)
- 路由器根据路由规范,选择他当时认为最为合适的路径
3.2. IP地址
- IP地址是用软件实现的,是指设备所在的网络。
- 路由器连接网络,每个网络必须具有唯一的网络号才能成功进行寻找路径。
- 唯一的网络号包含在分配(incorporated)给该网络上每个设备的IP地址中
- IP地址是逻辑的,是我们配置的。(不同于MAC地址)
- IP地址是有层次,做转发的依据是网段而不是具体的IP,同一网段设备都有相同的IP地址,也就是我们只要到达网段即可
3.3. 路由器端口
- 路由器端口记录了网段的IP地址(和连接的地方是相同的)
3.4. 路由器发送的过程
- A5主机发送报文给B5主机,这个报文的IP地址是B5所在的IP地址,形成帧(MAC地址不是B5,而是A1,因为这个帧注定不能到达B5,所以放B5毫无意义),然后放上总线。
- 路由器收到帧,然后进行理解,看到报文,知道目的地是B5(解封装)
- 检查自己的路由表,找到目的地对应的端口
- 在B1端口进行转发,形成新的帧
- 形成一个全新的帧,这个帧的MAC地址是A1的MAC的地址。
3.5. 路由器端口示例
- 接口是路由器连接到网络的附件,在IP路由中也可以称为端口。
- 这个IP地址往往被作为这个网络的网关
- 每个接口必须具有一个单独的唯一网络地址
- 比如上图中S1和S2不能是相同的IP地址
- 路由器的连接的网段一定要是不同的
3.6. IP地址分配
- 静态地址分配(Static addressing)
- 为每个单独的设备配置一个IP地址
- 您应该保留非常细致的记录,因为如果使用重复的IP地址,可能会出现问题。
- 需要知道规范,然后根据上下文,通过命令行进行分配地址
- 动态地址分配(Dynamic addressing)
- 有几种不同的方法可用于动态分配IP地址:
- RARP: Reverse Address Resolution Protocol. RARP:反向地址解析协议。发起请求
- BOOTP: BOOTstrap Protocol. BOOTP:BOOTstrap协议。用于工作栈
- DHCP: Dynamic Host Configuration Protocol. (比较多用) DHCP:动态主机配置协议
- 有几种不同的方法可用于动态分配IP地址:
- IP地址和掩码处理后得到网络地址,保证每个网段中的主机的网段地址应该是一致的,不然会出现错误的。
3.7. ARP Protocol ARP协议
3.7.1. Address Resolution Protocol 地址解析协议
- 为了使设备进行通信,发送设备需要目标设备的IP地址和MAC地址。
- ARP使计算机能够查找与IP地址关联的计算机的MAC地址。
- 目的方IP地址 -> 目的方MAC地址
- 需要知道对方的MAC地址,来形成数据地址。
3.7.2. ARP示例
- source主机访问destination
- 不知道目的主机在哪里
3.7.3. ARP表的缓存
- 可以通过lookup命令进行。
- 在RAM里面,如果ARP没有本条目的对应MAC地址。
- MAC地址在ARP中是有时效性的。到时间不更新不激活就会删除
3.7.4. ARP的操作
- 使用ARP机制
- 上图中是一个示意图
- 此时ARP table中没有缓存,MAC地址写不出来
- 图问题:目的MAC地址应该在前面,源MAC地址字后面
3.7.4.1. ARP request
- 向目的方请求MAC地址
- 命令如图:就是找谁是这个主机,你的MAC地址是啥
- 将MAC地址设置为全1,作为广播发送
3.7.4.2. ARP Checking
- 10.0.2.5发现不是自己的主机,那么解析到这里丢掉就行,同样会记录下来对应的发送方的MAC地址。(攻击原理)
- 10.0.2.9发现自己的MAC地址,然后形成ARP应答
- 同时10.0.2.9会同时记录下A主机的MAC地址,更新到自己ARP地址中去(会记录对方的)
3.7.4.3. ARP reply
- 向A主机进行MAC地址应答
3.7.4.4. ARP Caching
- A的主机就会把对应的条目写到ARP Table中
- 然后再次形成一个数据帧发送出去即可。
- 10.0.2.9也会在自己的ARP Table里把10.0.2.1的也写进去
3.7.5. ARP 目的地址为本地
- ARP请求是本网段形成的,是一个广播就可以。
- 如果目的主机不在本网段中,那么不能跨网段进行广播
3.7.6. 网络交流
- 如何与不在同一物理网段上的设备通信?如下是两种解决方案。
- Default gateway 默认网关
- Proxy ARP 代理ARP
3.7.6.1. 默认网关
- 为了使设备与另一网络上的另一设备通信,您必须为其提供默认网关。
- 默认网关是路由器上连接到源主机所在网段的接口的IP地址。
- 为了使设备将数据发送到另一个网段上的设备的地址,源设备将数据发送到默认网关。
- 192.168.0.0和192.168.0.1接入到路由器,如果网关错误是无法进行转发的。自己搭建拓扑需要手动配置。
- 由网关对对应报文进行转发,默认网关就是
- THPCP Server进行动态生成
- 帧被发送到另一个不通过网段的链路无意义
- 发送报文到另一个网段,需要路由器把对应端口的网关的MAC告诉你,然后通过网关进行转发。
3.7.6.2. Proxy ARP 代理ARP
- 代理ARP是ARP的一种变体(variation)。
- 如果源主机未配置默认网关。
- 发送ARP请求,然后路由器给你一个ARP的reply,告诉你MAC地址(一般为本端口的IP地址)
3.7.7. Destination not local ARP对应目的方不是本地
- 路由器会把Router MAC的地址给你(连接本网段的MAC地址)
3.7.8. ARP Flowchart ARP流程图
- ARP攻击:有一个机器恶意发送无用帧,然后会将cache写满(解决就是一段时间不处理,然后等待ARP记录中的记录失效)
- ARP学习是收到不同的帧,对帧进行保存
- 每一个ARP是有声明期的
4. 网络层设备
4.1. 面向连接的网络服务
- 面向连接的网络服务
- 就是任何发送数据的行为之前,先要建立好连接,协商好参数才会开始传输,所有数据进行有序传输
- 网络情况导致数据出现问题,需要接受方进行一定处理来保证数据正确
- 传输过程中要保持连接距离,只有完成传输后才能断开连接。
- 传输比较可靠,代价高。
4.2. 无连接的网络服务
- 他们分别对待每个数据包。
- IP是无连接系统。
- 不要求发送方和接收方在发送前先建立一个连接(不打招呼)
- 系统不需要进行大量的数据保留,不需要很多的缓存
- 局域网使用的比较多,可靠性比较低,不处理报文丢失
- 可靠网中,少量报文使用无连接是可以提高效率的(常用于比较小型的,并且可靠性相对比较高的网络)
4.3. 电路交换(Circuit switched)
- 面向连接与电路交换。
- 但是,这两个词并不相同
- 要先建立一个虚电路关系,之后报文走对应的虚电路。
- 面向连接:首先与接收者建立连接,然后开始数据传输。
- 所有数据包依次在同一通道上传播,或更常见的是在同一虚拟电路上传播(而不会再去做路径选择了),更可靠
- 问题:电路的利用效率低,一个人用了别人就不能用了(虚电路可能是分段建立,可能局部可以复用,但是整体不可以复用)。
- 虚电路要强于面向连接的,传输更加可靠,保证传输先后关系。
4.4. 报文交换(Packet Switched)
- 无连接网络与数据包交换:这两个词都不一样
- 当数据包从源传递到目标时,它们可以:
- 切换到其他路径。(每一报文有各自的发送方和接收方,可以根据当前的网络情况,进行路由选择)
- 乱序到达
- 设备根据各种标准为每个数据包确定路径(路由器的路径选择)。某些标准可能因分组而异。
- 将原始数据分为很多的子报文(单位),每个子报文(单位)自己选择路径进行发送。
- 大部分的Connetionless network都是基于packet switched进行实现,控制网络拥塞。
- 出现问题时候,我们只需要重传对应部分的报文就可以(不用重传全部数据)
5. 网络协议操作
- 存在冗余,A转发给B是由当前网络状态处理。
- ABC之间都是通过帧进行计算的。
- 根据路由表决定接下来给哪个路由器
5.1. Routed protocol 被动可路由协议
- 为网络层提供支持的协议称为路由协议或可路由协议。
- IP是网络层协议,因此,它可以通过互联网络进行路由。
5.2. Non-routable protocol 不可路由协议
- 不可路由协议是不支持第3层的协议。
- 这些不可路由协议中最常见的是NetBEUI。
- 直接根据目的方的地址在局域网中进行生成定位
- 这个协议不支持第三层,也就是跨局域网是不可以的。
- NetBEUI是一种小型,快速且高效的协议,仅限于在一个网段上运行。
5.3. 被动可路由协议的寻址
- 路由器连接三个网段(列出来的是网络号)
- 将目的主机和掩码进行逻辑AND操作,得到对应的网段
- 然后请求路由表可以发现E2端口为目的网段
- 再次将报文封装转发给对应的主机
- 路由表是存储在内存中的,因为如果是动态路由的话,是要慢慢学习生成的
5.4. 路由协议的分类:静态、动态
- 静态路由:网络管理员在路由器中手动输入路由信息。
- 动态路由
- 路由器可以在运行过程中互相学习信息。
- 使用路由协议更新路由信息。
- RIP, IGRP, EIGRP, OSPF …
- 人工维护的代价比较大
5.4.1. 静态路由和动态路由的区别
- 静态路由
- 用于隐藏部分网络。安全(不必进行路由表的交换)
- 测试网络中的特定链接。
- 用于仅在到达目标网络的路径时维护路由表。
- 动态路由
- 维护路由表。
- 以路由更新的形式及时分发信息。
- 依靠路由协议共享知识。
- 路由器可以调整以适应不断变化的网络状况。
- 打开后会启动进程,按照不同的协议,和网上的不同设备学习信息,然后根据算法生成路由表
5.4.2. Routing protocol 主动路由协议(Routing)
- 路由协议确定路由协议遵循的到达目的地的路径。
- 是用来构建路由表的,所以叫做routing
- 公平、简单、适应变化等特点
5.5. 被动路由协议和主动路由协议
- Routed Portocol用于路由器之间,用来保证路由器之间连通(完成转发),保证路由器有效连通。
- Routing Protocol用于做各自的路由表的生成:路由器彼此交换信息。
- Routing Protocol 决定 Routed Protocals,根据动态路由协议生成路由表
5.6. 动态路由协议的分类:内部网关协议和外部网关协议
- 内部网关协议(Interior Gateway Protocols(IGP),RIP,IGRP,EIGRP,OSPF):可在自治系统(autonomous system,大的单位或者管理方,比如南京大学)中使用,该系统是一个主管部门下的路由器网络,例如公司(corporate)网络,学区的网络或政府机构的网络。
- 外部网关协议(Exterior Gateway Protocols(EGP),EGP,BGP):用于在自治系统之间路由数据包。
- 自治系统是逻辑的划分,而未必是物理层次的划分。
- 通过BGP,让其他自治系统了解自己的自治系统中的网段。
- 内部网关协议和外部网关协议的区别:
- 一个单位对自己内部的网络管理负责,用一些协议。
- IGP是内部确定的管理规则,BGP(EGP)标准来沟通不同自己系统。
5.7. 内部网关协议(IGP)的分类:DVP and LSP
- 距离矢量协议(Distance-Vector Protocols,RIP, IGRP):
- 从邻居的角度查看网络拓扑。(注意不基于全局)
- 在路由器之间添加距离向量。(根据跳数来决定,经过一个路由器+1一次)
- 经常定期(periodic)更新
- 将路由表的副本传递到邻居路由器。
- 链路状态协议(Link State Protocols, OSPF):
- 获取整个网络拓扑的通用视图。(全局的视角,会有代价)
- 计算到其他路由器的最短路径。(基于带宽计算出来的cost,形成cost拓扑图,然后计算出对应的路径代价作为评判依据)
- 事件触发的更新
- 将链接状态路由更新传递给其他路由器。
5.7.1. 距离矢量协议(DVP)的示例
- 初始的时候,各自持有的是黑色的部分(直连的线路)
- 定时路由表会相互交换给邻居,下一时刻C学习到B,B学习到AC,A学习到B,在下一刻进行再次的转发。
- DVP只知道到达一个网段的最少跳数(但是不知道最佳路径)。
- 会生成路由回路
5.7.2. RIP(Routing Information Protocol) DV的代表
- 最受欢迎。(实现算法简单,更加靠谱)
- 基于距离矢量的内部网关协议。
- 唯一的指标是跳数。
- 最大跳数为15。(评判依据简单,是一个短板)
- 每30秒更新一次(广播),可以修改。
- 并非总是选择最快的路径(而是走跳数最短的路径)
- 产生大量的网络流量。
- RIP v2是RIP v1的改进版本
- RIP v1用地址广播
- RIP v2用主播地址广播,支持身份认证、路由等,比较安全,常用
5.7.3. IGRP (Interior Gateway Routing Protocol) and EIGRP (Enhanced IGRP)(也算是DV的)
- 思科知识产权的。
- 基于距离矢量的内部网关协议。
- IGRP最大跳数为255。
- EIGRP指标由带宽(bandwidth),负载(load),延迟(delay)和可靠性(reliability)组成。加权进行运算
- 每90秒更新一次。
- EIGRP是IGRP的高级版本,它是混合路由协议(不全是根据跳数来计算)
- IOS 12.0以后,不支持IGRP,在模拟器中还可以。
- EIGRP是可以的,和华为等路由器是不兼容的。(因为知识版权是思科独有的)
5.7.4. 链路状态协议(LSP)
上图中的Routing table应该叫做初始时刻的Routing Table(本图的问题)
- 彼此交换连接情况,交换的是Link state而不是路由表,包含link的信息,以NetID作为主键(无相同网段),包含的是link上的路由器邻接关系、链路类型(4种)、链路带宽,会指定谁连接了谁,这个条目就被称为Database(表)。这样子就不仅仅知道链路,还知道更多的全局信息。
- LSP操作过程:
- 相互交换彼此学到对应的Tpological Database(是全局的信息)
- 之后使用SPF算法,以自己为根,通过最短路径优先算法,生成以自己为根的树
- 根据这一个树再生成路由表(了解全局的信息),逻辑是树的逻辑
- LSP不是进行定时进行交换的,而是初始的时候进行交换,稳定之后,根据事件触发的时候才会更新数据
- 更新后发送给所有的路由器,需要将Database发送给所有的路由器
- 收到的路由器的,根据database更新自己的树,然后再次生成路由表
- LSP是指从所有可达的道路上找到代价最小的路径。
- 全局可能会比较大,考虑负载进行处理
- 但是没有路由回路,单域内一般不超过20个路由器
- 路由表一般只保存一个最优的转发点的(负载均衡)
5.7.5. OSPF(Open Shortest Path First)
- 最短路径优先协议,是基于链路状态的内部网关协议,消耗CPU和内存。
- 指标由带宽,速度,流量,可靠性和安全性组成,本科阶段只考虑带宽的。
- 事件触发的更新。
- 最快和什么有关?(最快指的是带宽)
- 和实时各条链路上的通信冗余有关,也和管理方案有关,简单来说是和带宽有关
- 带宽表示为代价,带宽和代价成反比。
6. VLSM(Variable Length Subnet Mask) 可变长度子网掩码
6.1. 经典路由和可变长度子网掩码
6.1.1. 经典路由(Classful routing) 无子网掩码
- 有类的路由协议要求单个网络使用相同的子网掩码。
- 例如:网络192.168.187.0必须仅使用一个子网掩码,例如255.255.255.0。
- 会造成网络号的浪费(为了规格一致,会浪费一些网络号),比如路由器之间的网络没有必要给很多的hostID。
- 特定的情况:将路由器端口的掩码作为目的网络的掩码,可以进一步完成细化
6.1.2. 可变长度子网掩码(Variable-Length Subnet Masks) 有子网掩码
- VLSM只是一项功能,它允许单个自治系统的网络具有不同的子网掩码。
- 有效的解决网络号浪费的问题
6.2. VSLM 可变长度子网掩码
- 使用VLSM,网络管理员可以在主机少的网络上使用长掩码,而在主机多的子网上使用短掩码。(提供了很高的灵活性)
- 如果路由协议允许VLSM
- 在路由网络连接上使用30位子网掩码255.255.255.252
- 用户网络的24位掩码255.255.255.0
- 或者,对于最多1000个用户的网络,甚至是22位掩码255.255.252.0。(保留10位)
- 在CIDR的基础上发展的,报文中包含有子网掩码。
6.3. 为什么使用VLSM
- VLSM允许组织在同一网络地址空间内使用多个子网掩码。
- 实施VLSM通常被称为”子网划分”,可用于最大化寻址效率。
- VLSM是有助于缩小IPv4和IPv6之间差距的修改(modifications)之一。
6.4. VLSM优缺点
6.4.1. VLSM的优点
- 高效使用IP地址
- 更好的路由聚合(aggregation):构建超网
6.4.2. VLSM的缺点
- 会导致地址空间的浪费:广播地址和网络号都无法被使用。
- 过去,建议不要使用第一个和最后一个子网。但是我们可以使用Cisco IOS ver12.0中的子网0,因为即使net id相同,但是子网和母网subMask不一样,所以还能区分。全1还是不能使用。
- 从IOS ver12.0起,Cisco路由器默认使用零子网。
- 如果想要禁止零子网,使用该指令:
router(config)#no ip subnet-zero()
- 过去,建议不要使用第一个和最后一个子网。但是我们可以使用Cisco IOS ver12.0中的子网0,因为即使net id相同,但是子网和母网subMask不一样,所以还能区分。全1还是不能使用。
上图解释了子网长度相同会造成怎样的浪费(在路由器所在的子网段我们只需要满足2个主机,也就是需要2位的主机号就可以完成操作) 每一个位置都需要30个主机,有7个子网可以使用(全零可以使用,而全一不可以使用)
6.5. 支持VLSM的路由协议
- 开放式最短路径优先(OSPF)
- Integrated Intermediate System to Intermediate System (Integrated IS-IS) 集成中间系统到中间系统(集成IS-IS)
- 增强型内部网关路由协议(EIGRP)
- RIP v2(RIP V1不支持)
- 静态路由
6.6. VLSM的表示法
- 斜杠的含义是指前面多少位保留给网络位
- 此时也就是/30就可以满足路由器之间的网络连通所需(减少浪费),剩下的网络地址可以在以后网络进行扩展
- 这个例子中不使用VLSM还是可以进行解决的
6.7. VLSM的例子
6.7.1. 划分背景
- 已分配192.168.10.0/24的C类地址。
- 珀斯,悉尼和新加坡与吉隆坡建立WAN连接。
- 珀斯需要60个主机
- KL需要28个主机
- 悉尼和新加坡分别需要12位房东。
- 先划分成大的子网,然后进一步进行划分,然后在慢慢进行细化
- 为了计算VLSM子网,各个主机首先从地址范围分配最大的需求。需求级别应从最大到最小列出。
6.7.2. 第一步:满足珀斯的主机需求
- 在此示例中,珀斯需要60个主机号。
- 使用6位,因为26 – 2 = 62个可用主机地址。因此,将从第四个八位位组开始使用2位来表示/26的扩展网络前缀,其余6位将用于主机地址。
- 在地址192.168.10.0/24上应用VLSM可得到:
- 192.168.10.00 hh hhhh /26
- 255.255.255.192 (1100 0000)
- 第一个给Perth使用,剩下的用作保留未使用的
6.7.3. 第二步:为吉隆坡划分子网
- 吉隆坡需要28台主机号。192.168.10.63/26之后的下一个可用地址是192.168.10.64/26。
- 由于需要28个主机,因此主机地址需要5位,即25 –2 = 30个可用主机地址。
- 因此,将需要5位来表示主机,而将使用3位来表示扩展网络前缀/27
- 在地址192.168.10.64/26上应用VLSM可得到:
- 192.168.10.010 hhhhh /27
- 255.255.255.224 (1110 0000)
- 上面用剩下的三个子网再借用一位
6.7.4. 第三步:为悉尼和新加坡进行分配地址
- 现在,悉尼和新加坡分别需要12位主机号。 下一个可用地址从192.168.10.96/27开始。
- 由于需要12个主机,因此主机地址需要4位,即24 = 16、16 – 2 = 14个可用地址。
- 因此,需要4位来表示主机,对于/28的扩展网络前缀需要4位。
- 在地址192.168.10.96/27上应用VLSM可得到:
- 192.168.10.0110 hhhh /28
- 255.255.255.240 (1111 0000)
6.7.5. 第四步:为之间的路由地址进行划分
- 现在为WAN连接分配地址。请记住,每个WAN连接都需要两个IP地址。下一个可用的子网是192.168.10.128/28。
- 由于每个WAN链路需要2个网络地址,因此主机地址需要2位,即22 –2 = 2个可用地址。
- 因此,需要2位来表示链接,并需要6位来表示扩展网络前缀/30。
- 在192.168.10.128/28上应用VLSM可得到:
- 192.168.10.011000 hh /30
- 255.255.255.252 (1111 1100)
- 通过上述方法,从主机需求量大的部分入手,到主机需求量小的部分是很好的方法。
6.8. VLSM: 例子总结
- 重要的是要记住,只有未使用的子网才能进一步划分子网。
- 如果使用了子网中的任何地址,则该子网不能再进行子网划分。
- 一般是从主机多大到主机少(最少一般是路由间网络)进行划分
6.9. 路由聚集(Route Aggregation)
- 使用无类域间路由(CIDR,Classless InterDomain Routing)和VLSM不仅可以防止地址浪费,而且还可以促进路由聚合或汇总。
- 多个路由条目汇聚成小的路由条目
- 比如如下图就是讲3个/24的子网合并成一个/16的网络高速远端
- 优点:聚集之后我们只需要知道一个网段就可以,也就是远端的路由表就会变少
6.10. 路由聚集的例子
- 多层聚集
6.11. 如何进行路由聚集
如何进行计算:将尽可能多的相同的位进行聚集,将之后的不相同的地方,把一部分Net位作为Host位,就得到了上图的结果
6.12. 路由聚集的优点
- 减少路由表条目的数量。
- 可用于隔离拓扑更改(聚集之后,只能得到大的网段的信息,因为小的网段的拓扑变化会比较频繁,导致路由表进行不断地计算,只公告比较高聚集后的路由的网段信息)(可以得到稳定的效果)
6.13. 路由隔离的其他内容
- 为了使聚合正常工作,请以分层方式(hierarchical fashion)仔细分配地址,以便汇总的地址将共享相同的高位。
- VLSM允许路由聚合,并且通过将聚合完全基于左侧共享的高阶位来灵活地增加,即使网络不连续也是如此。
- 路由聚集需要严谨,不能让A和B两个端口的聚集后的网络号相同
- VLSM是不做连续性检验的,也就是就算不连续也会进行聚集
- 全0子网会在题目中说是否可用
- 全1子网尽量不要使用
7. 因特网 控制报文 协议 ICMP
- ICMP (Internet Control Message Protocol):为了提高 IP 数据报交付成功的机会(消息管理和协商)
- ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告
- ICMP 只是IP层的协议
- ICMP 报文作为IP层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去
- 一般路由器在丢弃报文的时候(处理之前已经提到的情况),都会返回一个ICMP差错报文。
7.1. ICMP 报文的格式
- 前四个字节是一样的(格式化的)
- 后面都是个根据类型
7.2. 两种ICMP报文
- 查询报文:一般这种情况不是很多
- 差错报告报文:一般这种类型会多一些
7.3. 目的站不可到达
- 网络不可到达(net unreachable)
- 主机不可到达(host unreachable)
- 协议不可到达(protocol unreachable)
- 端口不可到达(port unreachable)
- 源路由选择不能完成(source route failed)
- 目的网络不可知(unknown destination network)
- 目的主机不可知(unknown destination host)
- 不可知是完全不可以解析,不可达是可以解析但是不可以到达
7.4. ICMP 差错报告报文的数据字段的内容
- 一般会把原始的IP数据报文的数据报首部 + 8字节(数据的,可能会包含端口信息)作为ICMP的数据部分,这8个字节之后的数据是写操作啥的,没啥意义,就不传输了
- ICMP的前8个字节的是确定的(前4个字节是类型,校验位,后面四个字节是确定的)
- 然后添加一个首部作为IP数据报进行发送。
7.5. 不应发送 ICMP 差错报告报文的几种情况
- 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文(就是每次传送只要发送一次就够了)
- 对具有多播地址的数据报都不发送 ICMP 差错报告报文
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送 ICMP 差错报告报文
- 127.0.0.0:逻辑回路地址
- 0.0.0.0:确认路由地址
7.6. PING (Packet InterNet Groper)
- PING 是用ICMP的”Echo request”和”Echo reply”消息来实现的
- PING 用来测试两个主机之间的连通性,一般是用来检查局域网的连通性:PING不通,不仅仅是发送不过去,有可能是应答不回来。
- PING 使用了ICMP回送请求与回送回答报文
- PING 是应用层直接使用网络层ICMP的例子,它没有通过运输层的TCP或UDP