当前位置: 首页 > news >正文

计算机网络(第8版)-第4章 网络层

4.1 网络层的几个重要概念

4.1.1 网络层提供的两种服务

如果主机(即端系统)进程之间需要进行可靠的通信,那么就由主机中的运输层负责(包括差错处理、流量控制等)。

4.1.2 网络层的两个层面

4.2 网际协议 IP

图4-4 网际协议 IP 及其配套协议

4.2.1 虚拟互连网络

从一般的概念来讲,将网络互相连接起来要使用一些中间设备。根据中间设备所在的层次,可以有以下四种不同的中间设备:

(1)物理层使用的中间设备叫作转发器(repeater)。

(2)数据链路层使用的中间设备叫作网桥桥接器(bridge),以及交换机(switch)。

(3)网络层使用的中间设备叫作路由器(router)。

(4)在网络层以上使用的中间设备叫作网关(gateway)。用网关连接两个不兼容的系统需要在高层进行协议的转换。

讨论网络互连时,都是指用路由器进行网络互连和路由选择。

在互联网的词汇中,分组在传送途中的每一次转发都称为一“(hop)”。

4.2.2 IP 地址

IP 地址编址方式有 3 种:分类、子网划分、无分类。

1. IP 地址及其表示方法

对主机或路由器来说,IP 地址都是 32 位的二进制代码(IPv4)。

一个 IP 地址在整个互联网范围内是唯一的。

2. 分类的 IP 地址

图4-10 分类的 IP 地址(a)以及各类地址所占的比例(b)

但要注意,第一,网络号为全 0 的 IP 地址有特殊的用途,它表示“本网络;第二,网络号为127(即01111111)保留作为本地软件环回测试(loopback test)本主机的进程之间的通信之用

这里要指出,由于近年来已经广泛使用无分类 IP 地址进行路由选择(即网络位任意,主机位全 0,网络主机 ID),A 类、B 类和 C 类这种分类地址已成为历史[RFC 1812]。

3. 无分类编制 CIDR

这种编制方法的全名是无分类域间路由选择 CIDR(Classless Inter-Domain Routing,CIDR 的读音是“sider”)[RFC 4632],其要点有以下三个。

(1)网络前缀

(2)地址块

(3)地址掩码

地址掩码(常简称为掩码,又称为子网掩码)由一连串 1 和接着的一连串 0 组成,而 1 的个数就是网络前缀的长度。

把二进制的 IP 地址和地址掩码进行按位 AND 运算,即可得出网络地址。

4. IP 地址的特点

4.2.3 IP 地址与 MAC 地址

这里要强调指出以下几点:

(1)在 IP 层抽象的互联网上只能看到 IP 数据报

(2)虽然在 IP 数据报首部有源站 IP 地址,但路由器只根据目的站的 IP 地址进行转发

(3)在局域网的链路层,只能看见 MAC 帧

(4)尽管互连在一起的网络的 MAC 地址体系各不相同,但 IP 层抽象的互联网却屏蔽了下层这些很复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机和主机或路由器之间的通信

4.2.4 地址解析协议 ARP

(a)主机 A 广播发送 ARP 请求分组(广播请求)

(b)主机 B 向 A 发送 ARP 响应分组(单播)

图4-18 地址解析协议 ARP 的工作原理

然而 IP 编址把这个复杂问题解决了。连接到互联网的主机只需各自拥有一个 IP 地址,它们之前的通信就像连接在同一个网络上那样简单方便,即使必须多次调用 ARP 来找到 MAC 地址,但这个过程都是由计算机软件自动进行的,对用户来说是看不见的。

4.2.5 IP 数据报的格式

图4-20 IP 数据报的格式

从图4-20 可以看出,一个 IP 数据报由首部和数据两部分组成。首部的前一部分长度是固定的,共 20 字节,是所有 IP 数据报必须具有的。

下面介绍首部各字段的意义。

1. IP 数据报首部的固定部分中的各字段

(1)版本

(2)首部长度

(3)区分服务

(4)总长度

总长度指首部和数据之和的长度,单位为字节。总长度字段为 16 位,因此数据报的最大长度为 2^{16}-1=65535 字节

(5)标识(identification)

(6)标志(flag)

占 3 位,但目前只有两位有意义。

  • 标志字段中的最低位为 MF(More Fragment)。MF = 1即表示后面“还有分片”的数据报。MF = 0表示这已是若干数据报片中的最后一个。
  • 标志字段中间的一位记为 DF(Don't Fragment),意思是“不能分片”。只有当 DF = 0 时才允许分片。

(7)片偏移

占 13 位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。这就是说,除最后一个数据报片外,其它每个分片的长度一定是 8 字节(64 位)的整数倍。

(8)生存时间

(9)协议

(10)首部检验和

(11)源地址

(12)目的地址

2. IP 数据报首部的可变部分

4.3 IP 层转发分组的过程

4.3.1 基于终点的转发

分组每到达一个路由器,路由器就根据分组中的终点(目的地址)查到转发表,然后就得知下一跳应当到哪一个路由器。

4.3.2 最长前缀匹配

4.3.3 使用二叉线索树查找转发表

4.4 网际控制报文协议 ICMP

4.4.1 ICMP 报文的种类

4.4.2 ICMP 的应用举例

4.5 IPv6

4.5.1 IPv6 的基本首部

在 RFC 8200 中定义了以下六种扩展首部:(1)逐跳选项;(2)路由选择;(3)分片;(4)鉴别;(5)封装安全有效载荷;(6)目的站选项。

4.5.2 IPv6 的地址

一般来讲,一个 IPv6 数据报的目的地址可以是以下三种基本类型地址之一:

(1)单播(unicast)        单播就是传统的点对点通信。

(2)多播(multicast)        多播是一点对多点的通信,数据报发送到一组计算机中的每一个。

(3)任播(anycast)        这是 IPv6 增加的一种类型。任播的终点是一组计算机,但数据报只交付其中的一个,通常是按照路由算法得出的距离最近的一个。

4.5.3 从 IPv4 向 IPv6 过渡

4.5.4 ICMPv6

4.6 互联网的路由选择协议

4.6.1 有关路由选择协议的几个基本概念

1. 理想的路由算法

路由选择协议的核心就是路由算法,即需要何种算法来获得路由表中的各项目。一个理想的路由算法应具有如下的一些特点[BELL86]:

(1)算法必须是正确的和完整的

(2)算法在计算上应简单

(3)算法应能适应通信量和网络拓扑的变化,这就是说,要有自适应性

(4)算法应具有稳定性

(5)算法应是公平的

(6)算法应是最佳的

所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。

2. 分层次的路由选择协议

这样,互联网就把路由选择协议划分为两大类,即:

(1)内部网关协议 IGP(Interior Gateway Protocol):具体的协议有很多种,如 RIP 和 OSPF 等

(2)外部网关协议 EGP(External Gateway Protocol):目前使用的协议是 BGP-4。

4.6.2 内部网关协议 RIP

1. 协议 RIP 的工作原理

RIP(Routing Information Protocol)是内部网关协议 IGP 中最先得到广泛使用的协议[RFC 1058],它的中文译名是路由信息协议。RIP 是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,其最大优点就是简单。

RIP 允许一条路径最多包含 15 个网络。因此“距离”等于 16 时即相当于不可达。可见 RIP 只适用于小型互联网

协议 RIP 的特点是:

(1)仅和相邻路由器交换信息。

(2)路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表

(3)按固定的时间间隔交换路由信息,例如,每隔 30 秒。

2. 距离向量算法

3. 坏消息传播得慢

4.6.3 内部网关协议 OSPF

1. 协议 OSPF 的基本特点

OSPF 最主要的特征就是使用链路状态协议(link state protocol),而不是像 RIP 那样的距离向量协议。协议 OSPF 的特点是

(1)向本自治系统中所有路由器发送信息。这里使用的方法是洪泛法(flooding),这就是路由器通过所有输出端口向所有相邻的路由器发送信息。

(2)发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息

(3)当链路状态发生变化或每隔一段时间(如 30 分钟),路由器向所有路由器用洪泛法发送链路状态信息

2. OSPF 的五种分组类型

4.6.4 外部网关协议 BGP

1. 协议 BGP 的主要特点

我们知道,内部网关协议(如 RIP 或 OSPF)主要是设法使数据报在一个 AS 种尽可能有效地从源站传送到目的站。在一个 AS 内部也不需要考虑其它方面的策略。然而 BGP 使用的环境却不同。这主要是因为以下的两个原因:

第一,互联网的规模太大,使得自治系统 AS 之间的路由选择非常困难

第二,自治系统 AS 之间的路由选择必须考虑有关策略

由于上述情况,边界网关协议 BGP 只能是力求选择出一条能够到达目的网络前缀且比较好的路由(不能兜圈子),而并非要计算出一条最佳路由BGP采用了路径向量(path vector)路由选择协议,它与距离向量协议(如 RIP)和链路状态协议(如 OSPF)都有很大的区别。

2. BGP 路由

3. 三种不同的自治系统 AS

4. BGP 的路由选择

5. BGP 的四种报文

4.6.5 路由器的构成

1. 路由器的结构

图4-54 典型的路由器的结构(图中的数字1~3表示相应层次的构件)

从图4-54 可以看出,整个的路由器结构可划分为两大部分:路由选择部分和分组转发部分

2. 交换结构

4.7 IP 多播

4.7.1 IP 多播的基本概念

4.7.2 在局域网上进行硬件多播

4.7.3 网际组管理协议 IGMP 和多播路由选择协议

4.8 虚拟专用网 VPN 和网络地址转换 NAT

4.8.1 虚拟专用网 VPN(安全)

为了解决这种仅在内部使用的本地地址和互联网中某个 IP 地址重合所出现地址的二义性问题,RFC 1918 指明了一些专用地址(private address,即私有地址)。专用地址只能用作本地地址而不能用作全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。2013 年 4 月,RFC 6890 全面地给出了所有特殊用途的 IPv4 和 IPv6 地址,但三个 IPv4 专用地址块的指派并无变化,即

(1)10.0.0.0/8,即从 10.0.0.0 到 10.255.255.255。

(2)172.16.0.0/12,即从 172.16.0.0 到 172.31.255.255。

(3)192.168.0.0/16,即从 192.168.0.0 到 192.168.255.255。

有时一个机构的 VPN 需要有某些外部机构(通常就是合作伙伴)参加进来。这样的 VPN 就称为外联网(extranet 或 extranet VPN,即外联网 VPN)。

4.8.2 网络地址转换

装有 NAT 软件的路由器叫作 NAT 路由器,它至少有一个有效的外部全球 IP 地址。

4.9 多协议标签交换 MPLS

4.9.1 MPLS 的工作原理

4.9.2 MPLS 首部的位置与格式

4.9.3 新一代的 MPLS

4.10 软件定义网络 SDN 简介

本章的重要概念

习题

4-15

相关文章:

计算机网络(第8版)-第4章 网络层

4.1 网络层的几个重要概念 4.1.1 网络层提供的两种服务 如果主机(即端系统)进程之间需要进行可靠的通信,那么就由主机中的运输层负责(包括差错处理、流量控制等)。 4.1.2 网络层的两个层面 4.2 网际协议 IP 图4-4 网…...

chromadb 0.4.0 后的改动

本文基于一篇上次写的博客:[开源项目推荐]privateGPT使用体验和修改 文章目录 一.上次改好的ingest.py用不了了,折腾了一会儿二.发现privateGPT官方更新了总结下变化效果 三.others 一.上次改好的ingest.py用不了了,折腾了一会儿 pydantic和c…...

Windows环境下下载安装Elasticsearch和Kibana

Windows环境下下载安装Elasticsearch和Kibana 首先说明这里选择的版本都是7.17 ,为什么不选择新版本,新版本有很多坑,要去踩,就用7就够了。 Elasticsearch下载 Elasticsearch是一个开源的分布式搜索和分析引擎,最初由…...

机器学习:随机森林

集成学习 集成学习(Ensemble Learning)是一种机器学习方法,通过将多个基本学习算法的预测结果进行组合,以获得更好的预测性能。集成学习的基本思想是通过结合多个弱分类器或回归器的预测结果,来构建一个更强大的集成模…...

ctfshow-web11(session绕过)

php代码审计: function replaceSpecialChar($strParam){$regex "/(select|from|where|join|sleep|and|\s|union|,)/i";return preg_replace($regex,"",$strParam);} 首先定义了一个函数,主要是使用preg_replace函数对我们提交的内…...

状态模式:对象状态的变化

欢迎来到设计模式系列的第十七篇文章。在本文中,我们将深入探讨状态模式,这是一种行为型设计模式,用于管理对象的状态以及状态之间的变化。 什么是状态模式? 状态模式是一种允许对象在内部状态发生变化时改变其行为的设计模式。…...

解耦常用方法

1、类别 DIP依赖倒置、IoC控制反转、DI依赖注入(Dependency Injection) c11 实现依赖注入 控制反转、依赖注入、依赖倒置傻傻分不清楚? 我曾想深入了解的:依赖倒置、控制反转、依赖注入 2、方法 解耦基本方法 step1&#xff1a…...

根据二叉树创建字符串--力扣

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻强烈推荐优质专栏: 🍔🍟🌯C的世界(持续更新中) 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔…...

代码事件派发机制(观察者模式)

事件派发机制主要用来解决: 代码解耦和维护,一般在代码中会要管理一些闭包函数 然后在指定的业务中触发运行闭包函数逻辑用了事件派发机制 就可以先把要处理的事件 挂在在一个事件管理类中 上面挂满要处理的闭包函数然后通过dispatch 出发要执行的任务 也就是闭包1. PHP中实…...

微服务技术栈-Nacos配置管理和Feign远程调用

文章目录 前言一、统一配置管理1.添加配置文件2.微服务拉取配置3.配置共享 三、Feign远程调用总结 前言 在上篇文章中介绍了微服务技术栈中Nacos这个组件的概念,Nacos除了可以做注册中心,同样可以做配置管理来使用。同时我们将学习一种新的远程调用方式…...

操作系统 OS

本文章是学习《操作系统》慕课版 和 王道《2024年 操作系统 考研复习指导》后所做的笔记,其中一些图片来源于学习资料。 目录 概念(定义) 目标 方便性 有效性 可扩充性 开放性 作用 OS 作为用户与计算机硬件系统之间的接口 — 人机交…...

基于ffmpeg给视频添加时间字幕

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,我们可以基于ffmpeg对视频进行各种操作。本文主要介绍基于ffmpeg给视频添加字幕,字幕的内容为视频所播放的时间(故需要安装ffmpeg,具…...

爬虫基础知识点快速入门

以下是一个包含注释的Python示例,演示了基本的网页爬取过程,以及一些常见的爬虫知识点: # 导入必要的库 import requests # 用于发送HTTP请求 from bs4 import BeautifulSoup # 用于解析HTML import csv # 用于数据存储# 1. 指定目标网站…...

解释器模式 行为型模式之五

1.定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器。比如加减乘除在代码里是一种表示,我们需要翻译成可以阅读的数学公式,并且可以供用户输入数字得到输出结果。 2.组成结构 抽象表达式(Abstract Expres…...

2023年中国汽车座舱行业发展现状及趋势分析:高级人机交互(HMI)系统将逐步提升[图]

2022年有22.3%的汽车用户认为座舱内车载娱乐功能成为影响使用体验的关键因素。当前智能电动汽车的用户画像与娱乐、游戏等应用的用户画像相似,均以年轻人作为目标用户。年轻化的用户将娱乐功能的使用习惯延伸至汽车座舱内,对于座舱功能的需求不再局限于导…...

常见的通用型项目管理软件推荐

常用项目管理软件有很多。按适合的行业来分,有针对各种垂直行业定制的,也有全行业通用的。从厂商来看,有国外研发的,也有国内厂商的,体现在软件的设计思路不同,上手的手感也很不一样。从体量来看&#xff0…...

手机总是提醒系统更新,到底要不要更新呢?

不知道你们会不会和我一样,在收到手机系统更新的通知时,犹豫要不要更新? 更新完了手机会变卡顿吗? 每次都要更新吗?怎样才能关闭它呢? 01 手机系统更新啥内容? 手机系统更新可以分为大版本更新和小版本更新。 (1) 大版本更新 如iOS15升…...

什么是API

API (Application Programming Interface,应用程序编程接口) Java中的API 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层封装起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档…...

RedissonClient 分布式锁 处理并发访问共享资源

1.分布式锁的概念及需求 分布式锁是一种在多个进程或线程之间同步访问共享资源的机制。在分布式系统中,由于各个节点之间的通信延迟以及资源访问的竞争,可能导致数据不一致和并发问题。为了解决这些问题,我们需要一种能够在不同节点上保证同…...

Hadoop-2.5.2平台环境搭建遇到的问题

文章目录 一、集群环境二、MySQL2.1 MySQL初始化失败2.2 MySQL启动报错2.3 启动时报不能打开日志错2.4 mysql启动时pid报错 二、Hive2.1 mr shuffle不存在2.1.2 查看yarn任务:2.1.3 问题描述:2.1.4 参考文档 一、集群环境 java-1.8.0-openjdk-1.8.0.181…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐)​​ 在 save_images 方法中,​​删除或注释掉所有与 metadata …...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...

软件工程 期末复习

瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...