网络是怎样连接的-终极浓缩篇
🌐 网络工作原理
“网络是一个复杂的系统,理解其全貌能够帮助我们掌握各种网络技术的本质意义。”
网络的全貌
通过探索浏览器输入网址到网页内容显示的全过程,帮助读者理解网络的基本运作机制。
网络交互的基本步骤
浏览器请求:浏览器向Web服务器发送请求,要求获取特定网页的数据。
Web服务器响应:Web服务器收到请求后,返回相应的数据给浏览器。
探索之旅路线图
在这一过程中,涉及多个硬件和软件组件,它们共同合作完成请求和响应的传递。以下是主要的组件及其功能:
组件 功能描述
浏览器 生成请求消息并发送到Web服务器
Web服务器 处理请求并返回数据
协议栈 负责数据的打包和地址信息的添加
网卡 将数据转换为电信号并发送出去
交换机 在局域网内部转发数据包
路由器 将数据包从局域网转发到互联网
防火墙 检查进入的包,确保无危险数据通过
缓存服务器 存储可重复利用的数据,减少对Web服务器的请求
重要概念
协议栈
“协议栈是网络控制软件,负责将数据打包并加上目的地址等控制信息。”
网络包
“网络包是信息传输的基本单位,类似于邮政中的信件或包裹。”
网络中的各个环节
浏览器的工作方式:输入网址后,浏览器解析并生成请求消息。
搬运机制:
协议栈将消息打包并发送给网卡。
网卡将包转换为电信号,进入网络。
数据传输路径:
数据包通过交换机到达路由器,然后进入互联网。
路由器负责将数据包传递到目标Web服务器。
Web服务器的处理:
收到数据包后,解包并分析请求。
生成响应消息并返回给浏览器。
具体技术和设备
接入网:连接用户与互联网的线路。
接入点(Point of Presence, PoP):运营商的路由器,负责接收和分发数据。
骨干网:由多个运营商和路由器组成的庞大网络,负责长距离数据传输。
网络的复杂性
理解网络的复杂性有助于我们在遇到问题时更快找到解决方案。例如,一个简单的网络故障可能涉及多个因素,如DNS设置、路由器配置等。通过实践和实验,可以更深入地理解网络的工作原理。
“不理解网络的全貌,就无法理解每一种网络技术背后的本质意义。”
🌐 浏览器生成消息
- 生成HTTP请求消息
1.1 探索之旅从输入网址开始
网址(URL): URL 是统一资源定位符,通常以 http:// 开头,但也可以是其他协议如 ftp:、file:、mailto: 等。
网址的多样性源于浏览器的多功能性,能够访问不同类型的服务器。
1.2 浏览器解析URL
解析步骤:
浏览器首先对输入的URL进行解析,识别其中的各个元素。
例如,访问 http://www.lab.glasscom.com/dir1/file1.html 时,浏览器会提取出服务器名称 www.lab.glasscom.com 和文件路径 /dir1/file1.html。
1.3 生成请求消息
请求消息是浏览器告知服务器用户所需数据的方式。
理解请求消息的结构有助于掌握HTTP协议的基本原理。
- 向DNS服务器查询IP地址
2.1 查询过程
浏览器必须查询Web服务器的IP地址,通常通过DNS(域名系统)进行。
使用域名,浏览器会向DNS服务器发送查询请求。 - 全世界DNS服务器的大接力
3.1 DNS工作原理
全球有成千上万的DNS服务器,它们通过相互“接力”来完成IP地址的查询。 - 委托协议栈发送消息
4.1 委托给操作系统
一旦获得IP地址,浏览器将请求消息委托给操作系统以发送到Web服务器。
这一过程涉及详细的规则和操作,理解这些规则将帮助我们理解网络的潜在能力。 - 服务器端的局域网中有什么玄机
5.1 Web服务器和防火墙
Web服务器: 部署地点可能在公司内部或数据中心中。
防火墙: 主要用于包过滤,保护内部网络安全。
防火墙的功能包括设置包过滤规则和限制访问。
- 请求到达Web服务器,响应返回浏览器
6.1 服务器的接收操作
Web服务器接收到请求后,会解析请求消息并生成相应的响应消息。
6.2 浏览器显示内容
浏览器根据响应的数据类型判断内容,并最终显示网页。 - 章节结构
各章内容分为热身问答、探索之旅的看点、正文、小测验等部分,帮助读者理解网络的基本概念与操作。
章节部分 描述
热身问答 一些简单的判断题,帮助读者准备进入正文。
探索之旅的看点 概述将要介绍的主题,方便读者了解章节梗概。
正文 详细讲解网络的相关知识。
小测验 测试对正文内容的理解程度。
7.1 网络术语的简单解释
本书中对一些难懂的网络术语进行词源解释,使其更易于理解。
🌐 URL 解析与 HTTP 请求生成 - URL 及其构成
1.1 URL 的定义
URL(统一资源定位符)是用于指定互联网上某一资源的地址,如网页、图片等。
示例: http://www.lab.glasscom.com/dir1/file1.html
组成部分:
协议: http 表示超文本传送协议(HTTP)。
Web 服务器名: www.lab.glasscom.com
目录名: dir1
文件名: file1.html
1.2 URL 解析过程
解析步骤:
识别协议类型(如 HTTP)。
识别服务器名。
识别目录和文件名。
1.3 省略文件名的情况
情况: URL 以 / 结尾,例如 http://www.lab.glasscom.com/dir/。
解释: 省略的文件名会被服务器设置为默认文件名,通常是 index.html 或 default.htm。
URL 示例 解析结果
http://www.lab.glasscom.com/dir/ 访问 /dir/index.html
http://www.lab.glasscom.com/ 访问 /index.html
http://www.lab.glasscom.com/whatisthis 根据服务器判断是文件或目录
2. HTTP 协议的基本思路
2.1 HTTP 请求消息的生成
请求消息组成:
请求行: 包含方法、URI 和 HTTP 版本。
消息头: 附加信息。
消息体: 发送的数据(如使用 POST 方法时)。
2.2 HTTP 方法
方法 HTTP 版本 含义
GET 1.0, 1.1 获取指定 URI 的信息。
POST 1.0, 1.1 从客户端向服务器发送数据。
HEAD 1.0, 1.1 获取响应头,不返回实际内容。
OPTIONS 1.0 查询通信选项。
PUT 1.1 替换或创建指定 URI 的文件。
DELETE 1.1 删除指定 URI 的文件。
TRACE 1.0 返回服务器收到的请求内容。
CONNECT 1.0 使用代理传输加密消息。
2.3 请求消息示例
GET 请求:
text
Copy
GET /dir1/file1.html HTTP/1.1
Host: www.lab.glasscom.com
POST 请求:
text
Copy
POST /cgi/sample.cgi HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Field1=ABCDEFG&SendButton=SEND
2.4 响应消息
响应消息组成:
状态行: 包含状态码和响应短语。
消息头: 附加信息。
消息体: 实际返回的数据。
状态码示例
状态码 含义
200 请求成功
404 找不到请求的文件
500 服务器内部错误
3. 重要概念总结
URI: 统一资源标识符,用于指定资源。
CGI 程序: 处理 Web 服务器请求的程序。
HTTP 方法: 用于指定客户端请求的操作类型。
请求和响应消息: 通过严格的格式和结构进行交互。
3.1 HTTP 头字段
头字段 含义
User-Agent 客户端软件的名称和版本信息
Accept 客户端可支持的数据类型
Content-Type 消息体的数据类型
Date 请求和响应生成的日期
理解这些概念和结构有助于掌握浏览器与服务器之间的交互过程。
🌐 浏览器生成消息
1.1 生成HTTP请求消息
当网页中包含图片时,浏览器会在网页中的相应位置嵌入表示图片文件的标签。编写网页所使用的HTML(超文本标记语言)中规定的控制信息,如:
html
Copy
请求图片的步骤
浏览器在显示文字时搜索相应的标签。
遇到图片相关的标签时,会在屏幕上留出用来显示图片的空间。
浏览器再次访问Web服务器,按照标签中指定的文件名请求获取相应的图片。
每条请求消息中只能写1个URI(统一资源标识符),因此每个文件必须单独发送请求。
例如,一个网页中包含3张图片,总共需要向Web服务器发送4条请求(1个网页 + 3张图片)。
浏览器与Web服务器的交互
浏览器作为整体的指挥者,负责判断所需的文件并获取这些文件,Web服务器对每条单独的请求返回响应。
图示:交互消息实例
在获取名为sample1.htm的网页时,网页中包含一张名为picture.jpg的图片,交互过程中的消息如下:
请求消息格式 响应消息示例
GET /sample1.htm HTTP/1.1 HTTP/1.1 200 OK
Accept: text/html Content-Type: text/html

网络号:表示整个子网的地址。
主机号:表示子网中具体设备的地址。
IP地址结构:32比特的数字,通常分为4组,每组8比特,格式为十进制表示并用圆点隔开。
1.2.2 域名和IP地址并用的理由
为了方便人类记忆,网址中使用服务器名称而非IP地址。虽然用IP地址替代名称可以正常工作,但由于IP地址难以记忆,因此采用名称更符合人类的使用习惯。
特性 IP地址 域名
长度 32比特(4字节) 变动,最长可达255字节
处理效率 固定长度,处理简单 长度不固定,处理复杂
1.2.3 Socket库提供查询IP地址的功能
Socket库是用于调用网络功能的程序组件集合,包含解析器(resolver),用于执行域名解析操作。
1.2.4 通过解析器向DNS服务器发出查询
调用解析器的方法简单,通过Socket库调用gethostbyname函数进行DNS查询,示例代码如下:
c
Copy
内存地址 = gethostbyname(“www.lab.glasscom.com”);
1.2.5 解析器的内部原理
当应用程序调用解析器时,控制流程转移到解析器内部,解析器会生成查询消息并发送给DNS服务器。DNS服务器根据查询内容返回IP地址。
控制流程示意图
应用程序执行到调用解析器的部分,暂停。
解析器运行,生成查询消息。
委托操作系统发送消息至DNS服务器。
DNS服务器返回响应,包含查询到的IP地址。
通过这些步骤,浏览器可以从指定的内存地址获取IP地址,并将其与HTTP请求消息一起发送给操作系统。
🌐 DNS 服务器与域名解析
📡 内存地址与解析器的工作
“解析器的工作是将域名转换为计算机能够理解的IP地址,控制流程重新回到应用程序(浏览器)。”
在程序代码中,指定的内存地址用“<内存地址>”表示,实际代码中应写为代表该内存地址的名称。
应用程序能够从内存中取出IP地址,说明IP地址是通过这种方式传递给应用程序的。
🔄 计算机内部结构
计算机的内部结构分为多个层次:
每层程序负责完成部分工作,并将剩余工作委派给下一层。
🌍 DNS 服务器的基本工作
查询消息的组成
DNS服务器的基本工作是接收来自客户端的查询消息,并返回响应。查询消息包含以下三种信息:
信息类型 描述
域名 服务器或邮件服务器的名称
Class 识别网络的信息(通常为IN)
记录类型 表示域名对应的记录类型(如A、MX)
查询示例
示例:查询 www.lab.glasscom.com 的IP地址
域名 = www.lab.glasscom.com
Class = IN
记录类型 = A
DNS服务器返回与查询匹配的IP地址(如192.0.2.226)。
记录类型
记录类型 描述
A 对应IP地址
MX 对应邮件服务器
PTR 根据IP地址反查域名
CNAME 查询域名相关别名
NS 查询DNS服务器IP地址
SOA 查询域名属性信息
🏗️ 域名的层次结构
域名以句点分隔,形成层次结构:
例如, www.lab.glasscom.com 表示:
com域
glasscom子域
lab子域
www子域
每个域作为一个整体处理,不能拆分存放在多台DNS服务器中。
子域的管理
为各事业集团或子公司分配不同的子域:
例: example.co.jp 下的 sub1.example.co.jp 和 sub2.example.co.jp。
🔍 查找DNS服务器并获取IP地址
查询过程
客户端访问最近的DNS服务器。
如果未找到信息,向根域DNS服务器查询。
根域返回下级DNS服务器的IP地址。
重复查询过程,直至找到目标DNS服务器。
根域DNS服务器
根域DNS服务器保管着顶级域(如com、jp)的DNS服务器信息。
客户端只需找到任意一台DNS服务器,即可通过它找到根域DNS服务器。
⚡️ 缓存机制
DNS服务器具有缓存功能,可以存储之前查询过的域名信息。
如果信息在缓存中,查询可以直接从缓存位置开始,减少时间消耗。
缓存中的信息设置有效期,过期后会被删除。
📤 委托协议栈发送消息
数据收发操作概览
知道IP地址后,通过协议栈向目标IP地址发送HTTP消息。
数据收发操作适用于所有网络应用程序。
收发数据的步骤
创建套接字并连接。
发送数据。
断开连接。
“收发数据的过程可以想象成数据在管道中流动。”
套接字的作用
套接字是数据出入口,连接后才能进行数据收发。
数据发送完成后,连接的管道会被断开。
重要概念回顾
DNS服务器:负责域名解析,将域名转换为IP地址。
记录类型:包括A、MX、CNAME等,决定返回的信息类型。
层次结构:域名和DNS服务器的组织形式,便于管理和查询。
📡 套接字通信的四个阶段
- 创建套接字阶段
在这一阶段,应用程序通过调用 Socket 库 中的 socket 程序组件来创建套接字。创建套接字的步骤如下:
调用程序组件:使用 socket 程序组件创建套接字。
获取描述符:协议栈返回一个描述符,用于识别不同的套接字。
描述符是用来识别套接字的唯一标识,类似于酒店寄存行李时的号码牌。
操作 说明
调用 socket 创建套接字并返回描述符
存储描述符 应用程序将描述符存放在内存中,用于后续操作
2. 连接阶段
在连接阶段,客户端通过调用 Socket 库 中的 connect 程序组件将创建的套接字与服务器的套接字连接起来。连接操作需要三个参数:
描述符:在创建套接字时返回的描述符。
服务器IP地址:通过 DNS 查询得到的目标服务器的 IP 地址。
端口号:指定连接的具体套接字,常见的 Web 服务器使用 80 号端口。
端口号用于区分同一台计算机中的不同服务,帮助识别具体的套接字。
参数 说明
描述符 标识客户端使用的套接字
服务器IP地址 目标服务器的 IP 地址
端口号 识别具体服务的端口,如 HTTP 的 80 号端口
3. 通信阶段
当套接字连接成功后,应用程序可以通过 write 程序组件发送数据。具体步骤如下:
准备数据:应用程序在内存中准备要发送的数据。
调用 write:指定描述符和发送的数据,协议栈将数据发送到服务器。
通信的过程是通过协议栈完成的,应用程序无法直接控制套接字。
操作 说明
准备数据 根据用户输入生成 HTTP 请求消息
调用 write 将数据发送到服务器
4. 断开阶段
数据收发完成后,需要调用 Socket 库 的 close 程序组件来断开连接。断开过程如下:
调用 close:Web 服务器首先调用 close 断开连接。
通知客户端:断开操作传达到客户端,客户端也调用 close 进入断开阶段。
HTTP 协议规定,服务器在发送完响应后应主动断开连接。
操作 说明
调用 close Web 服务器断开连接
通知客户端 客户端接收到断开消息并执行 close 操作
重要概念
描述符:应用程序用来识别套接字的机制。
IP 地址与端口号:客户端和服务器之间用来识别对方套接字的机制。
通过理解这四个阶段,您可以掌握浏览器与 Web 服务器之间消息收发的基本过程。
📡 数据收发与协议栈
- 应用程序与数据收发
“尽管不同的应用程序收发的数据内容不同,但收发数据的操作是共通的。”
1.1 数据收发的统一性
应用程序:例如浏览器和电子邮件服务器,都将数据的收发工作委派给下层的协议栈。
Socket 库:应用程序通过 Socket 库与协议栈交互,进行数据的收发。
1.2 协议栈的结构
协议栈分层:
上层:应用程序(如浏览器、邮件程序)
中层:Socket 库和解析器
下层:操作系统网络协议栈,包含TCP/UDP协议处理。
2. 套接字的创建与控制信息
2.1 套接字的定义
“套接字是用来控制通信操作的控制信息的集合。”
2.1.1 套接字的实体
套接字的实体是存放控制信息的内存空间,记录了通信对象的 IP 地址、端口号及通信状态等信息。
2.2 创建套接字
步骤:
应用程序调用 socket 创建套接字。
协议栈分配内存空间用于存储控制信息。
初始化控制信息状态,表示“即将开始通信”。
2.2.1 描述符的作用
描述符是用来区分多个套接字的标识符,应用程序在通信时需要提供这一描述符。
3. 连接操作
3.1 连接的含义
“连接是通信双方交换控制信息的过程。”
当应用程序调用 connect 时,协议栈会将本地套接字与服务器的套接字进行连接。
3.2 连接过程
步骤:
客户端调用 connect,提供服务器的 IP 地址和端口号。
TCP 模块在客户端创建控制信息的头部。
头部中的发送方和接收方端口号用于找到对应的套接字。
4. 控制信息的交换
4.1 控制信息的类型
头部信息:记录连接、收发、断开等信息。
套接字信息:记录用于控制协议栈操作的信息。
4.2 TCP 头部格式
字段名称 长度(比特) 含义
发送方端口号 16 发送网络包的程序的端口号
接收方端口号 16 网络包的接收方程序的端口号
序号 32 发送方告知接收方的发送字节顺序编号
ACK 号 32 接收方告知发送方已收到的字节序号
控制位 6 代表各种控制含义(URG、ACK、PSH、RST、SYN、FIN)
校验和 16 检查数据是否出现错误
5. 数据收发
5.1 收发数据的准备
在连接建立后,应用程序将 HTTP 请求消息交给协议栈进行处理。
6. 重要概念总结
TCP(传输控制协议):用于传输数据的主要协议,特别适用于需要可靠传输的应用。
UDP(用户数据报协议):用于较短控制数据的收发,效率高但不保证可靠传输。
套接字:用于存放控制信息的实体,记录通信状态和双方的必要信息。
“理解控制信息和协议栈的工作过程,有助于掌握数据收发的整体流程。”
📡 数据收发操作
数据发送的基本流程
“数据收发操作是从应用程序调用 write 将要发送的数据交给协议栈开始的。”
应用程序调用 write 方法,指定发送数据的长度。
协议栈收到数据后,将数据存放在内部的发送缓冲区中。
协议栈等待应用程序的下一段数据,而不是立即发送。
发送缓冲区的作用
发送缓冲区:用于存放应用程序要发送的数据,以避免发送大量小包,导致网络效率下降。
发送数据的方式 描述
应用程序传递所有数据 一次性传递所有数据。
逐字节或逐行传递 数据分段发送。
MTU 和 MSS
MTU(最大传输单元)
MTU 是一个网络包的最大长度,以太网中一般为 1500 字节。
MTU 包含头部的总长度,需要从 MTU 减去头部长度得到实际能容纳的数据长度。
MSS(最大分段大小)
MSS 是除去头部之后,一个网络包所能容纳的 TCP 数据的最大长度。
计算方式:
KaTeX can only parse string typed expression
MSS=MTU−TCP/IP 头部长度,一般 TCP/IP 头部长度为 40 字节。
参数 描述
MTU 最大传输单元,通常为 1500 字节。
MSS 最大分段大小,通常为 1460 字节(1500 - 40)。
发送条件与时机
判断发送的要素
数据长度:接收到的数据长度接近或超过 MSS 时,协议栈会发送数据。
时间延迟:如果发送频率不高,可能会直接发送数据,避免因等待而造成的延迟。
数据拆分与发送
拆分数据的必要性
HTTP 请求消息一般不会很长,但表单数据可能超过一个网络包的容量。
当发送缓冲区中的数据超过 MSS 时,协议栈会将数据以 MSS 长度为单位进行拆分。
发送过程
每一块数据前加上 TCP 头部,标记发送方和接收方的端口号,交给 IP 模块发送。
确认网络包已收到的机制
ACK 号的使用
TCP 具备确认对方是否成功收到网络包的功能。
发送数据时,TCP 头部中包含“序号”字段,用于标识数据的起始字节。
接收方通过 ACK 号确认收到的字节。
确认原理
接收方检查序号以确认是否有数据包遗漏,并返回 ACK 号。
序号字段 描述
序号 表示从哪个字节开始发送的数据。
ACK 号 表示接收方已经收到的字节数。
超时时间与ACK号的动态调整
超时时间的设定
超时时间需要根据网络状况动态调整,以避免因网络延迟导致的重传。
滑动窗口机制
滑动窗口的作用
在发送一个包后,不等待 ACK 号返回,而是直接发送后续的数据包,提升效率。
窗口大小
窗口大小是接收方能接收的最大数据量,通常与接收方的缓冲区大小一致。
窗口大小 描述
窗口大小 接收方能接收的最大数据量。
数据接收与HTTP响应
接收HTTP响应的过程
浏览器调用 read 方法获取服务器响应。
协议栈在接收缓冲区中暂存响应数据。
若响应数据尚未到达,则挂起接收操作,等待响应。
通过上述机制,TCP 协议确保数据的可靠发送与接收,优化了网络传输的效率和准确性。
📡 TCP/IP数据传输
- 协议栈的工作
“当协议栈暂停时,协议栈会继续执行其他工作,挂起的工作并没有在执行,因此看上去和暂停是一样的。”
数据接收过程
协议栈接收数据的具体操作过程包括:
检查收到的数据块和TCP头部的内容,判断是否有数据丢失。
如果没有问题,则返回ACK号(确认号)。
将数据块暂存到接收缓冲区中,并按顺序连接还原出原始的数据。
最后,将数据交给应用程序。
数据交给应用程序
协议栈将接收到的数据复制到应用程序指定的内存地址中,并将控制流程交回应用程序。
2. 断开连接与删除套接字
2.1 数据发送完毕后断开连接
收发数据结束的时间点由应用程序判断所有数据是否发送完毕。
数据发送完毕的一方会发起断开过程,具体情况如下:
以Web为例,浏览器向Web服务器发送请求消息,服务器返回响应消息后,服务器发起断开过程。
某些程序则可能在客户端发送完数据后立即断开。
2.2 断开过程的操作
服务器一方的应用程序调用Socket库的close程序,协议栈生成包含断开信息的TCP头部(将控制位中的FIN比特设为1),然后发送给客户端。
客户端收到FIN为1的TCP头部后,将自己的套接字标记为进入断开操作状态,并返回ACK号。
2.3 删除套接字
在与服务器的通信结束后,套接字不会立即删除,而是等待一段时间,以防止误操作。
例如,客户端如果先发起断开,而ACK号丢失,服务器可能会重发FIN。如果此时客户端的套接字已删除,可能导致错误的断开操作。
3. 数据收发操作小结
3.1 套接字的创建与连接
数据收发操作的第一步是创建套接字,服务器在启动时创建,客户端在需要访问服务器时创建。
客户端向服务器发起连接操作,生成一个SYN为1的TCP包并发送给服务器。
3.2 数据收发阶段
连接操作完成后,双方进入数据收发阶段。
客户端向服务器发送请求消息,TCP将请求消息切分成数据块,附加TCP头部后发送给服务器。
服务器收到数据后,返回ACK号。
3.3 断开操作
服务器先发送一个FIN为1的TCP包,客户端返回ACK号。双方交换FIN和ACK号后,通信结束。
4. IP与以太网的包收发操作
4.1 网络包的基本知识
网络包由头部和数据两部分构成:
头部包含目的地址等控制信息。
数据部分为发送的数据。
4.2 包传输过程
发送方创建包,生成头部并附加数据。
包被发送到最近的网络转发设备,转发设备根据头部信息发往正确的方向。
4.3 IP模块的作用
IP模块负责将包发给对方,但具体的传输由集线器、路由器等设备完成。
IP模块会添加IP头部和MAC头部,确保包正确送达。
4.4 IP头部格式
字段名称 长度(比特) 含义
版本号 4 IP协议版本号,目前使用的是版本4
头部长度(IHL) 4 IP头部的长度
服务类型(ToS) 8 表示包传输优先级
总长度 16 表示IP消息的总长度
ID号 16 用于识别包的编号
标志(Flag) 3 表示是否允许分片,当前包是否为分片包
生存时间(TTL) 8 包的生存时间
协议号 8 表示协议的类型
发送方IP地址 32 网络包发送方的IP地址
接收方IP地址 32 网络包接收方的IP地址
🌐 IP 地址与网络接口
“IP 地址是分配给网络接口的,而不是计算机本身。每个网络接口都拥有自己的唯一 IP 地址。”
IP 地址的分配
IP 地址在计算机启动时由操作系统初始化过程中分配。
单网卡计算机: 只有一个 IP 地址。
多网卡计算机: 每块网卡有自己的 IP 地址。
判断发送方 IP 地址
在多网卡环境中,需判断使用哪块网卡发送数据包。
这类似于路由器根据路由表判断数据包的发送路径。
路由表的作用
路由表(Routing Table)用于判断数据包的转发路径。
使用 route print 命令可以查看路由表。
路由表的组成
列名 含义
Network Destination 目的地 IP 地址
Interface 网络接口(网卡)
Gateway 下一个路由器的 IP 地址
通过目的地 IP 地址与路由表进行匹配,找到合适的转发路径。
IP 头部的填写
接收方 IP 地址: 填写通信对象的 IP 地址。
发送方 IP 地址: 填写使用的网卡的 IP 地址。
MAC 头部的生成
“MAC 头部用于以太网中,包含接收方和发送方的 MAC 地址等信息。”
MAC 头部的组成
接收方 MAC 地址: 网络包接收方的 MAC 地址。
发送方 MAC 地址: 网络包发送方的 MAC 地址。
以太类型: 表示使用的协议类型。
以太网的基本知识
以太网是一种设计用于多台计算机自由通信的技术。
发送的信号将会被所有连接设备接收到,但只有目标设备会处理该信号。
ARP 查询过程
“ARP(地址解析协议)用于将 IP 地址转换为 MAC 地址。”
通过广播询问局域网内的设备,获取目标设备的 MAC 地址。
ARP 缓存可以存储已查询的 MAC 地址,以减少查询次数。
ARP 缓存的作用
缓存内容 含义
有效 MAC 地址 存储在缓存中,避免重复查询
过时的 MAC 地址 会在几分钟后自动删除,以避免不一致问题
网卡的初始化与工作
网卡在计算机启动时需要经过初始化操作。
网卡驱动程序负责读取 MAC 地址并分配给 MAC 模块。
网卡的包发送过程
将数据包复制到网卡内的缓冲区。
MAC 模块处理包,加上报头和起始帧分界符。
将包转换为电信号发送到网络。
网卡的基本结构
网卡内部包含多个模块,其中 MAC 模块负责控制包的发送与接收。
以太网包的组成
字段名称 长度(比特) 含义
接收方 MAC 地址 48 接收方设备的 MAC 地址
发送方 MAC 地址 48 发送方设备的 MAC 地址
以太类型 16 包含的协议类型(如 IP、ARP)
数据发送与接收的基本过程
网卡将 IP 包转换为电信号后,通过以太网发送。
接收方根据信号中的 MAC 地址判断接收包的时机和内容。
重要概念总结
“在以太网中,使用 MAC 地址来识别发送方和接收方,而 IP 地址则用于网络层级的通信。”
以太网的基本性质未改变:发送到接收方 MAC 地址,识别发送方 MAC 地址,判断内容类型。
📡 用电信号传输TCP/IP数据
- 电信号与数字信息
“用电信号来表达数字信息时,我们需要让0和1两种比特分别对应特定的电压和电流。”
比特与电信号
比特:二进制数字的基本单位,表示为0或1。
电压与电流:通过不同的电压和电流来表示这两个比特。
数据读取过程
通过测量信号中的电压和电流变化,还原出0和1的值。
实际信号中没有分隔每个比特的辅助线,必须判断比特的界限。
2. 时钟信号的作用
信号界限的判断
图2.26(a)所示的信号中,当信号连续为1或0时,比特之间的界限消失。
**时钟信号(Clock Signal)**的叠加可以帮助判断比特之间的界限。
测量信号的时机
在时钟信号变化时,读取电压和电流值,进行比特的对应。
3. 包收发操作
3.1 数据与时钟信号的叠加
在较长距离的传输中,时钟信号可能会发生偏移。
通过将数据信号与时钟信号叠加来解决时钟偏移问题。
3.2 报头的作用
报头用于测量时钟信号的特殊信号,帮助确定数据包的起始位置。
信号类型 作用
数据信号 表达0和1
时钟信号 确定比特界限
报头 测量时钟信号
3.3 帧校验序列(FCS)
“FCS用于检查包传输过程中因噪声导致的波形紊乱。”
FCS是一串32比特的序列,通过特定公式计算包中所有内容。
FCS的值在传输过程中如果发生变化,说明数据发生了错误。
4. 半双工与全双工模式
4.1 半双工模式
在半双工模式中,必须判断网线中是否存在其他设备的信号。
如果发生信号碰撞,发送操作会终止,并发送阻塞信号。
4.2 全双工模式
在全双工模式中,发送和接收可以同时进行,无需担心信号碰撞。
5. 接收返回包的操作
接收信号的流程
接收全部信号:无论是否发给自己的信号都会通过接收线路传入。
报头解析:通过报头同步时钟,遇到起始帧分界符时开始转换信号为数字信息。
FCS校验:检查FCS以确认数据是否完整。
中断机制
网卡通过中断机制通知计算机收到包,CPU会暂时挂起任务处理接收操作。
6. UDP协议的收发操作
6.1 UDP的优势
对于不需要重发的数据,UDP协议提供了更高效的发送方式。
不需建立连接,直接发送数据包。
6.2 不同于TCP的特性
UDP没有接收确认和窗口机制,仅负责单纯地发送包。
适用于短数据传输,如DNS查询等。
特性 TCP UDP
连接管理 需要建立和断开连接 不需要
可靠性 确认接收,重发丢失的数据 不保证可靠性
复杂性 复杂的传输控制 简单的发送机制
7. ICMP消息
“ICMP用于在包的接收和转发过程中报告错误。”
主要ICMP消息类型
消息类型 意义
Echo reply 响应Echo消息
Destination unreachable 包未能到达目的地,通知发送方
Source quench 路由器的转发能力不足,通知发送方降低发送速率
Redirect 提示发送方直接转发包
Echo ping命令发送的消息
Time exceeded 因TTL超时丢弃包,通知发送方
Parameter problem IP头部字段存在错误,通知发送方
通过上述内容,学生可以深入理解用电信号传输TCP/IP数据的基本原理和操作过程。
📦 UDP协议与数据传输
监控包的送达状态
“对包的送达状态进行监控,所以协议栈也不知道有没有发生错误。但这样并不会引发什么问题。”
应用程序注意到错误时,会重新发送数据。
这样的操作不会增加应用程序的负担。
UDP的最大数据长度
最大长度计算
UDP可发送的数据最大长度为IP包的最大长度减去IP头部和UDP头部的长度。
IP包的最大长度由IP头部中的“全长”字段决定,长度为16比特。
计算内容 长度(字节)
IP包最大长度 65,535
IP头部 20
UDP头部 8
UDP最大数据长度 65,535 - 20 - 8 = 65,507
在实际应用中,UDP的最大数据长度为65,507字节,但这通常会受到以太网和通信线路的最大传输长度限制。
UDP头部控制信息
字段名称 长度(比特) 含义
发送方端口号 16 网络包发送方的端口号
接收方端口号 16 网络包接收方的端口号
数据长度 16 UDP头部后面数据的长度
校验和 16 用于校验错误
音频和视频数据的传输
使用UDP的原因
音频和视频数据必须在规定的时间内送达,延迟会导致播放时机的错过。
使用TCP进行重发会消耗时间,可能导致已错过播放时机的数据延迟。
数据丢失的容忍度
音频和视频数据中缺少某些包通常不会产生严重的问题,只会产生失真或卡顿。
在无需重发数据或者重发无效的情况下,使用UDP能提高传输效率。
网络包的传输过程
“本章我们探索了在收发数据时,操作系统中的协议栈是如何工作的,以及网卡是如何将包转换成电信号通过网线发送出去的。”
网络包从客户端计算机发出,经过集线器、交换机和路由器最终到达互联网。
小测验题目
表示网络包收件人的接收方IP地址是位于IP头部还是TCP头部中?
端口号用来指定服务器程序的种类,位于TCP头部还是IP头部中?
会对包是否正确送达进行确认的是TCP还是IP?
根据IP地址查询MAC地址的机制叫什么?
在收到ACK号之前继续发送下一个包的方式叫什么?
小测验答案
IP头部
TCP头部
TCP
ARP
滑动窗口方式
这部分内容涵盖了UDP协议的基本知识及其在音频和视频数据传输中的应用,以及网络包的传输过程。
📦 交换机的包转发操作
3.2 交换机的包转发操作
3.2.1 交换机根据地址表进行转发
“交换机的设计是将网络包原样转发到目的地。”
当信号到达网线接口时,由**PHY(物理层设备)模块进行接收。
信号转换为通用格式后,传递给MAC(媒体访问控制)模块。
MAC模块将信号转换为数字信息,并通过包末尾的FCS(帧校验序列)**进行错误校验。
如果没有问题,数字信息存放到缓冲区中。
重要概念:
交换机的每个网线接口后面都视为一块网卡,称为一个端口。
交换机的端口不核对接收方的MAC地址,而是直接接收所有的包。
组件 作用
PHY模块 接收信号并转换为通用格式
MAC模块 转换为数字信息并校验
FCS校验 检测包错误
3.2.2 MAC 地址表的维护
“交换机在转发包的过程中,需要对MAC地址表的内容进行维护。”
当交换机收到包时,将发送方MAC地址和输入端口号码写入MAC地址表。
删除过时记录以防止设备移动时的错误。
维护操作示例
操作类型 描述
添加记录 记录发送方MAC地址及端口
删除记录 删除一段时间不使用的过时记录
注意: 地址表中的记录一般在几分钟后过时,若设备移动则需更新。
3.2.3 特殊操作
当交换机发现目标端口与源端口相同,直接丢弃该包以防止循环。
如果地址表中找不到指定的MAC地址,包将被转发到除源端口之外的所有端口。
3.2.4 全双工模式
“全双工模式是交换机特有的工作模式,可以同时进行发送和接收操作。”
交换机的端口在全双工模式下能够同时发送和接收信号,无需等待其他信号结束。
这一模式提高了数据传输的效率和速度。
3.2.5 自动协商
“自动协商是确定最优传输速率的功能。”
设备通过脉冲信号相互探测支持的工作模式和传输速率。
确定双方都支持的最优组合以实现高效传输。
传输速率/工作模式 网卡 交换机
1 Gbit/s 全双工 ○ ×
100 Mbit/s 全双工 ○ ○
10 Mbit/s 半双工 ○ ○
3.2.6 交换机的转发能力
交换机仅将包转发到具有特定MAC地址的设备连接的端口,其他端口空闲。
相较于集线器,交换机能够同时转发多个包,提高网络效率。
3.3 路由器的包转发操作
3.3.1 路由器的基本知识
“路由器的转发模块和端口模块的关系类似于协议栈的IP模块和网卡。”
路由器包括转发模块和端口模块。
转发模块判断包的转发目的地,端口模块负责包的收发操作。
3.3.2 路由表中的信息
路由器根据IP地址判断转发目标。
路由表中存储目标地址和对应的传输信息。
目标地址 描述
网络号 代表子网部分的比特值
主机号 全部为0,表示网络号部分
总结: 交换机与路由器在查找转发目标时的工作原理相似,但所使用的地址不同。
📡 路由器的包转发操作
3.3.1 路由器的路由表
路由器的路由表是其工作的核心,包含以下重要信息:
网络号:用于判断目标地址的匹配。
子网掩码:指示网络号的比特数,能够帮助路由器判断地址的归属。
子网掩码的功能与第1章中介绍的概念相同,可以判断出网络号的比特数。
路由器的路由表结构与计算机的路由表相似,虽然列名可能因厂家或型号不同而有所差异。
列名 描述
目标地址 需要转发的目标地址
子网掩码 确定网络号比特数
网关 包转发的目标IP地址
接口 指定的网络接口或端口
跃点计数 表示距离目标的远近
3.3.2 路由器的转发过程
路由器在接收到数据包后,将通过路由表判断转发目标。
忽略主机号:路由器只匹配网络号。
路由聚合:多个子网可以合并为一个子网以减少路由表中的记录数量。
路由聚合示例
如果路由器需要转发到多个子网,如10.10.1.0/24、10.10.2.0/24和10.10.3.0/24,可以将其合并为10.10.0.0/16,这样路由表中只需一条记录。
3.3.3 包接收操作
路由器的包接收过程如下:
接收信号:信号通过以太网端口传入。
错误校验:通过FCS(帧校验序列)进行错误校验。
MAC地址检查:检查接收方的MAC地址,只有匹配的包会被放入接收缓冲区。
关键点
路由器的端口具有MAC地址,只接收与自身地址匹配的包,遇到不匹配的包则丢弃。
3.3.4 查询路由表确定输出端口
完成包接收后,路由器将丢弃MAC头部,并根据IP头部进行包的转发操作。
查询路由表:根据IP地址匹配路由表中的记录。
匹配原则
最长匹配原则:优先选择网络号比特数最长的记录,以确保准确转发。
如果无法找到匹配记录,路由器将丢弃包,并通过ICMP(Internet控制报文协议)告知发送方。
3.3.5 默认路由
在互联网中,转发目标数量庞大,不可能每个目标都配置在路由表中。此时,可以设置默认路由。
默认路由的定义:子网掩码为0.0.0.0,表示不需要匹配任何比特。
通过设置默认网关,路由器可以处理所有未知的目标地址。
3.3.6 包的有效期
在转发包之前,路由器需更新IP头部中的TTL(生存时间)字段。TTL字段表示包的有效期,经过每个路由器后减1,直到为0时包被丢弃。
3.3.7 分片功能
不同的网络端口支持不同的包长度。当转发的包长度超过输出端口的最大传输单元(MTU)时,路由器需要对包进行分片。
分片过程
检查MTU:确认输出端口的MTU是否足够。
更新IP头部:根据分片的信息更新IP头部字段。
3.3.8 发送操作
路由器发送包的过程与计算机类似。根据输出端口的类型,将包转换为电信号并发送。
发送目标判断
如果网关列内容为IP地址,则该地址是下一个转发目标。
如果网关为空,则使用IP头部中的接收方IP地址作为目标。
3.3.9 路由器与交换机的关系
路由器与交换机之间的关系在于,路由器负责将包发送到通信对象,而包的实际传输则由交换机负责。
IP(路由器)负责将包送达通信对象,而包的传输到下一个路由器则由以太网(交换机)来负责。
这种设计使得不同通信技术可以灵活应用于网络中,构建出规模巨大的互联网。
📡 路由器的附加功能
3.4 路由器的附加功能
3.4.1 地址转换功能
地址是用来识别每台设备的标志,每台设备都应该有一个唯一不重复的地址。
地址转换的背景
互联网中所有设备应有固定地址,但随着设备数量快速增长,地址的需求超过了可用地址。
过去公司需要向地址管理机构申请 IP 地址,每台设备都有固定地址。
随着互联网普及,固定地址用光的问题开始显现,影响网络包的传输。
私有地址与公有地址
公司内部设备的地址不必与其他公司重复,网络包在公司内流动,不会冲突。
通过设定特定地址范围为私有地址,以节省公有地址的使用:
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
私有地址不需要申请,任何人可以使用,但必须避免在内网中出现重复地址。
3.4.2 地址转换的基本原理
地址转换在转发网络包时对 IP 头部进行改写,包括 IP 地址和端口号。
例如,访问 Web 服务器时,发送方的私有地址被改写为公有地址,端口号也随机选择空闲端口。
地址转换设备的功能
地址转换设备会保存改写前的私有地址和端口号与改写后的公有地址和端口号的对应关系。
3.4.3 改写端口号的原因
早期的地址转换机制只改写地址,不改写端口号,限制了可用的公有地址数量。
改写端口号可以使一个公有地址对应多个私有地址,极大提高公有地址的利用率。
3.4.4 从互联网访问公司内网
从互联网访问公司内网的包,必须在对应表中有记录,否则无法转发。
可以通过手动添加记录,使互联网访问公司内网中的设备成为可能。
3.4.5 包过滤功能
包过滤是通过检查 MAC 头部、IP 头部和 TCP 头部的内容来决定是否转发包。
设置适当的规则以区分合法和非法访问是复杂的,简单的规则可能会影响正常访问。
功能 描述
地址转换 改写 IP 地址和端口号以节省公有地址
包过滤 根据规则决定包的转发或丢弃
私有地址规则 规定私有地址范围,避免重复
小测验
局域网中使用的双绞线中为什么要将信号线缠绕在一起?
将输入的信号广播到所有端口上的设备是交换机还是集线器?
用来指定网络号和主机号比特数的值叫什么?
将大网络包进行拆分的功能叫什么?
路由器的路由表中有时可以看到子网掩码为0.0.0.0的记录,这代表什么意思?
答案
为了抑制噪声的影响。
集线器。
子网掩码。
分片。
默认路由。
📡 ADSL接入网的结构和工作方式
ADSL与FTTH的基本概念
ADSL(非对称数字用户线)
ADSL是一种通过电话线提供高速互联网接入的技术。
FTTH(光纤到户)
FTTH(Fiber To The Home)指的是将光纤直接接入家庭,从而提供更快的互联网速度。
调制解调器(Modem)
定义:调制解调器是将数字信号转换为模拟信号并进行传输的设备。
功能:
将互联网信号转换成用户可以理解的格式。
包括集成了互联网接入路由器的多功能ADSL调制解调器。
以太网和信号包的处理
以太网连接
连接方式:互联网接入路由器与ADSL调制解调器通过以太网相连。
信号包处理:
网络包在发送时会加上MAC头部、PPPoE头部和PPP头部。
头部类型 功能描述
MAC头部 确保数据包在以太网中的传输
PPPoE头部 处理点对点协议封装
PPP头部 提供数据包的具体信息
信元的概念
信元:是传输数据的最小单位,开头有5个字节的头部,后面是48个字节的数据。
作用:将数据包拆分为更小的部分,便于传输和处理。
ADSL调制过程
调制技术
调制:将数字信号转换为模拟信号的过程。
技术:
振幅调制(ASK):用信号的强弱表示0和1。
相位调制(PSK):根据信号的相位来表示0和1。
正交振幅调制(QAM):结合振幅和相位调制来提高传输速率。
示例
在振幅调制中:
振幅小的信号表示0,振幅大的信号表示1。
在相位调制中:
0度表示0,180度表示1。
噪声干扰的影响
噪声来源
外部噪声:例如电车线路旁产生的电火花。
内部噪声:例如相邻信号线之间的串扰。
噪声的影响
噪声会导致信号失真,影响数据传输速率。
ADSL信号在多个频段上分布,只有与噪声频率相同的信号会受到影响。
DSLAM与BAS的作用
DSLAM(数字用户线接入复用设备)
功能:将多个ADSL调制解调器的功能集中在一个设备里。
工作:
将电信号还原为数字信息(信元)。
BAS(包转发设备)
功能:接收ATM信元并将其还原为网络包。
过程:
丢弃包前的MAC头部和PPPoE头部,只保留PPP头部和数据。
光纤接入网(FTTH)的基本知识
光纤结构
组成:由纤芯和包层构成,纤芯用于传导光信号。
信号传输原理:光信号通过光纤传输,亮表示1,暗表示0。
光信号转换过程
数字信息转换为电信号,再转换为光信号。
接收端使用光敏元件将光信号转换回电信号,最终还原为数字信息。
单模与多模光纤
单模光纤:纤芯直径小,适合长距离传输。
多模光纤:纤芯直径大,适合短距离传输。
总结
ADSL和FTTH技术各有优缺点,ADSL主要通过电话线提供互联网接入,而FTTH则利用光纤技术实现更高的传输速度。
📡 光纤传导与光纤接入网
- 光的全反射现象
“只有一定角度以内的光线会被纤芯和包层的边界全反射,从而继续前进。”
类比水波
投入水面的石子产生的波纹类似于光纤中的光波。
水波中的相位变化与光波中的相位变化相似。
2. 波的相位与干涉
相位干涉
相位相同的波叠加,振幅增加:
波峰与波峰叠加,波谷与波谷叠加,结果振幅变为原来的两倍。
相位相反的波叠加,互相抵消,最终变平直。
图示
图示 描述
图4.12 (a) 相位相同的波叠加
图4.12 (b) 相位相反的波叠加
3. 光纤的反射与相位变化
光纤中的光波
光在纤芯与包层的边界反射时,会发生相位变化。
特定角度下,反射光和入射光的相位一致,光才能继续传导。
特殊角度
光纤的设计与纤芯直径相关,纤芯直径影响光的传导性质。
4. 单模光纤与多模光纤
光纤类型
类型 纤芯直径 入射角度 特性
单模光纤 8~10 μm 仅允许小角度 信号失真小,只能传导一条光线
多模光纤 50 μm或62.5 μm 允许大角度 多条光线同时传导,失真大
特点比较
单模光纤: 适合长距离传输,信号失真小。
多模光纤: 适合短距离传输,成本低,但信号失真较大。
5. 光纤接入网(FTTH)
连接方式
FTTH(光纤到户)连接方式有两种:
直连方式: 一根光纤直接连接用户到电话局。
分路方式: 使用分光器将光纤分路,连接多个用户。
分路方式详解
分光器: 将光信号分配给多个用户,避免信号碰撞。
ONU(光网络单元): 将电信号转换为光信号的设备。
波分复用
上行与下行信号采用不同波长,利用棱镜原理进行分离。
6. 用户认证与配置下发
认证过程
用户输入用户名和密码。
通过RADIUS协议进行认证。
下发配置,包括IP地址。
PPPoE(以太网点对点协议)
PPPoE在ADSL和FTTH中使用,确保用户身份和配置下发。
7. 接入网的整体工作过程
工作流程
用户端的互联网接入路由器配置用户名和密码,通过PPPoE发现机制查询BAS的MAC地址。
进行用户认证与下发配置,然后用户可以发送网络包。
隧道传输
隧道类似于TCP连接,用于将网络包从用户端传送到运营商路由器。
隧道的实现方式
实现方式 描述
基于TCP连接的隧道 在网络上建立TCP连接进行数据传输
基于封装的隧道 将整个包封装在另一个包中进行传输
8. 重要概念总结
相位: 波的周期性变化,影响波的干涉。
光纤类型: 单模光纤与多模光纤的区别。
FTTH: 光纤接入网的两种接入方式,直连与分路。
PPPoE: 用户认证与配置的关键协议。
📡 通过接入网进入互联网内部
🚦 路由器与ADSL Modem的窃听方式
“在路由器和ADSL Modem之间进行窃听,或者爬到电线杆上安装窃听装置来拾取电缆中泄漏的电磁波。光纤因为不泄漏电磁波,无法通过这种方式进行窃听。”
光纤的安全性
光纤不会泄漏电磁波,因而在网络安全上具有优势。
🔑 BAS向用户下发TCP/IP配置信息
TCP/IP配置信息内容
BAS(宽带接入服务器)下发的配置信息包括:
分配给上网设备的 IP地址
DNS服务器的IP地址
默认网关的IP地址
路由器配置过程
路由器根据下发的配置信息配置自身参数,完成接入互联网的准备。
📦 网络包的发送与转发
客户端发送网络包
当用户在浏览器中输入网址时,客户端开始发送网络包。
默认路由的选择
如果包的目的地不在互联网接入路由器的路由表中,则路由器会选择默认路由,并转发给默认路由的网关地址。
包转发过程
包的转发遵循PPPoE(点对点协议 over 以太网)规则,主要步骤如下:
网络包加上头部信息并设置相应字段。
MAC头部中填写接收方和发送方的MAC地址,表示PPPoE的以太类型为8864(十六进制)。
📬 PPPoE头部与PPP头部
头部字段描述
除载荷长度外,PPPoE和PPP头部的其他字段值均可事先确定。
包的发送过程
网络包在转发操作中,基本不需要根据头部信息判断,只需将事先准备好的头部加上。
🔄 无编号端口的概念
无编号的定义
一对一连接的端口可以不分配IP地址,这种方式称为 无编号(unnumbered)。
无编号的优势
在这种情况下,BAS下发配置时不会下发默认网关的IP地址,减少了地址管理的复杂性。
🔄 公有地址与私有地址的转换
地址转换过程
当使用路由器连接互联网时,计算机会被分配一个私有地址,发送的包需要通过路由器进行地址转换才能访问互联网。
应用程序的影响
一些应用程序可能由于地址转换无法正常工作,这需要注意。
🖥️ 其他接入方式
PPPoA与DHCP方式
PPPoA(点对点协议 over ATM) 方式直接将PPP消息装入信元,而不需要添加MAC头部和PPPoE头部。
DHCP(动态主机配置协议) 是另一种接入方式,通过简单的请求和响应机制下发TCP/IP配置信息。
🏢 网络运营商的内部结构
POP与NOC
**POP(接入点)**是用户与互联网之间的关键连接点,网络包从接入网进入运营商的POP。
**NOC(网络运行中心)**是运营商的核心设备,负责网络包的集中转发。
路由器的类型
路由器类型 功能描述
一般路由器 用于专线连接,不需要用户认证和参数配置
RAS 用于拨号接入,需要进行用户认证和配置下发
BAS 处理PPPoE连接的路由器,负责包的转发
📡 运营商之间的连接
路由表与网络包的转发
网络包在达到POP后,路由器根据路由表信息判断转发目标,可以是相邻的POP或NOC。
运营商间的路由信息交换
运营商的路由器之间会交换路由信息,以便自动更新路由表,实现网络包的有效转发。
🌐 跨越运营商的网络包
4.5 跨越运营商的网络包
4.5.1 目标地址转发
“一旦目标地址确定,包将按照路由表中的信息转发,最终到达Web服务器所在的POP。这样,我们就可以将包发送到任何地方,包括地球的另一面。”
4.5.2 运营商之间的路由信息交换
路由表中的信息是如何写入的?
如果路由表中没有相应的信息,路由器无法判断某个网络的位置,无法进行包转发。
运营商之间的路由信息交换是通过相连的路由器告知对方的路由信息。
路由信息交换的类型
类型 描述
转接 运营商之间将互联网中的全部路由信息告知对方,以实现更广泛的访问。
非转接 运营商之间仅将与各自网络相关的路由信息告知对方,限制访问范围。
这种路由交换过程是由路由器自动完成的,使用的机制称为BGP(边界网关协议)。
4.5.3 与公司网络中自动更新路由表机制的区别
在公司网络中,路由器之间寻找最短路由,平等对待所有路由器。
运营商之间的路由交换机制会区分哪些运营商交了费用,哪些没有,以避免义务劳动。
4.5.4 IX 的必要性
IX(互联网交换中心)是减少运营商之间连接线路数量的中心设备。
通过IX,运营商能够更高效地相互连接。
日本的代表性IX包括JPIX、NSPIXP-2、JPNAP。
4.5.5 运营商如何通过IX 互相连接
IX所在的建筑物需具备安全性,能应对自然灾害等事故。
IX的核心是高速以太网交换机,连接各个运营商的路由器。
网络包的传输
IX 交换机与一般交换机工作方式相同,通过ARP查询下一跳路由器的MAC地址。
网络包最终会到达服务器所在的运营商,通过POP进入服务器的网络。
小测验
什么是接入网?
使用ADSL服务时需要的设备叫什么?
距离电话局越远,ADSL通信速率越低,为什么?
BAS(宽带接入服务器)与一般路由器有什么不同?
将多个运营商汇聚在一起的设备叫什么?
小测验答案
用于连接网络运营商的线路。
分离器。
因为离电话局越远,信号越弱。
BAS具有身份认证、下发IP地址等配置功能。
IX(互联网交换中心)。
🔥 防火墙的结构和原理
5.2 防火墙的基本概念
包过滤的基本原理
防火墙通过对网络数据包的过滤来保护网络安全。以下是用于设置规则的字段:
头部类型 规则判断条件 含义
MAC 头部 发送方MAC地址 路由器转发时改写MAC地址,了解上一个转发路由器的MAC地址
IP 头部 发送方IP地址 发送包的原始设备的IP地址
接收方IP地址 包的目的地IP地址
协议号 每个协议的编号
TCP/UDP 头部 发送方端口号 发送包的程序对应的端口号
接收方端口号 包的目的地程序对应的端口号
TCP 控制位 SYN, ACK, FIN等 用于控制连接操作的TCP协议控制信息
ICMP 消息中的规则
ICMP(互联网控制消息协议)消息用于通知包传输过程中的错误或确认通信对象的状态。主要包括以下类型:
ICMP 消息类型 含义
0 针对ping命令的响应
8 ICMP echo消息,当执行ping命令时发送
5.2.3 通过端口号限定应用程序
为确保安全,防火墙需要限制除了必要服务以外的所有应用程序的包。例如,Web服务器的端口号为80,因此可以设置接收方IP地址为Web服务器地址且接收方端口号为80的包允许通过。
5.2.4 通过控制位判断连接方向
TCP协议是双向的,需根据控制位判断连接方向。通过TCP控制位判断连接的第一个包,若第一个包是从Web服务器发往互联网,则阻止该包。
控制位 含义
SYN=1 连接操作中发送的首个包
ACK=0 表示接收方尚未确认数据的状态
5.2.5 从公司内网访问公开区域的规则
确保公司内网与公开区域之间的网络包自由流动时,需要设置合适的包过滤规则,避免让来自互联网的包无条件进入公开区域。
5.2.6 从外部无法访问公司内网
包过滤方式的防火墙可以根据接收方和发送方的IP地址进行判断,互联网无法直接访问公司内网。
5.2.7 通过防火墙的操作
当包到达防火墙时,依据设置的规则判断其是否允许通过。被阻止的包会被丢弃并记录,以便分析可能的入侵手法。
5.2.8 防火墙无法抵御的攻击
防火墙仅凭包的起点和终点无法筛选所有有风险的包,例如包中含有特定数据导致Web服务器宕机。修复Web服务器程序中的Bug是解决此类问题的一种方法。
5.3 负载均衡
5.3.1 性能不足时需要负载均衡
当服务器访问量上升时,使用多台服务器分担负载是有效的解决方案。负载均衡的方式可以通过DNS轮询来实现。
5.3.2 使用负载均衡器分配访问
负载均衡器用于判断将请求转发给哪台Web服务器。根据Web服务器的负载状况或事先设置的性能指数来进行请求的分配。
判断条件 说明
根据CPU、内存使用率 定期采集服务器负载情况
根据性能指数分配请求 按比例分配请求,避免某一台服务器过载
负载均衡器需具备能够处理跨多个页面请求的能力,以确保操作的一致性。
🌐 使用缓存服务器分担负载
5.4 使用缓存服务器分担负载
5.4.1 如何使用缓存服务器
“缓存服务器是一台通过代理机制对数据进行缓存的服务器。”
缓存服务器的功能
代理机制: 缓存服务器位于Web服务器和客户端之间,能够中转请求并缓存返回的数据。
缓存数据: 保存Web服务器返回的数据,以便更快地提供给客户端。
提高响应速度: 缓存服务器比Web服务器更快地返回数据,减少了Web服务器的负担。
5.4.2 缓存服务器通过更新时间管理内容
工作过程
接收HTTP请求: 客户端向缓存服务器发送请求。
检查缓存: 缓存服务器检查请求的数据是否已缓存。
未命中缓存: 如果不存在缓存数据,缓存服务器将请求转发给Web服务器,并添加Via字段。
命中缓存: 如果缓存中存在数据,缓存服务器会检查数据是否更新。
数据更新的处理
如果Web服务器的数据没有变化,返回304 Not Modified状态。
如果数据已更新,返回最新数据并更新缓存。
5.4.3 最原始的代理——正向代理
“正向代理是客户端侧部署的代理,最早用于缓存和防火墙。”
正向代理的功能
缓存: 用于缓存已访问的数据,提高访问速度。
防火墙功能: 过滤不必要的网络请求,保护内部网络。
请求消息的变化
在使用正向代理时,浏览器将请求发送至正向代理,而不是直接发送至Web服务器。
5.4.4 正向代理的改良版——反向代理
“反向代理不需要在客户端进行设置,能够自动转发请求。”
反向代理的特点
自动转发: 根据请求中的URI与Web服务器关联,自动转发请求。
无浏览器设置: 客户端无需配置代理。
5.4.5 透明代理
“透明代理结合了正向代理和反向代理的优点。”
透明代理的工作原理
请求拦截: 透明代理位于客户端和Web服务器之间,能够拦截请求并转发。
无需设置: 用户无感知,不需要在浏览器中设置代理。
5.5 内容分发服务
5.5.1 利用内容分发服务分担负载
缓存服务器的部署方式
部署方式 优点 缺点
服务器端缓存 减轻Web服务器负担 无法减少互联网流量
客户端缓存 减少拥塞点影响,更稳定的网络流量 运营者无法控制客户端缓存
运营商处缓存 结合两者优点,运营者可控制缓存服务器 需要在多个运营商处部署,数量庞大不现实
内容分发服务
CDSP: 专门提供缓存服务器的服务商,负责部署和管理缓存服务器。
效果: 提高数据访问速度,减轻Web服务器负担。
📡 内容分发服务
- 缓存服务器的作用
“缓存服务器可以缓存多个网站的数据,从而降低每个网站运营者的平均成本,减少他们的负担。”
1.1 缓存服务器与Web服务器的配合
CDSP(内容分发服务运营商)会与Web服务器运营者签约,使得CDSP的缓存服务器能够与Web服务器协同工作。
客户端访问Web服务器时,实际上是访问CDSP的缓存服务器。
2. 如何找到最近的缓存服务器
2.1 内容分发服务
“内容分发服务也叫CDS(Content Delivery Service),现在更常用的名称叫CDN(内容分发网络)”
有些CDSP会在互联网中部署几百台缓存服务器。
2.2 机制与方法
用户无需手动设置浏览器,通过机制自动将请求发送到最近的缓存服务器。
DNS服务器可以用来分配访问。
2.3 DNS的基本工作方式
客户端用要访问的Web服务器域名生成查询消息,发送给本地DNS服务器。
DNS服务器通过域名层次结构找到负责管理该域名的DNS服务器,并返回相应的IP地址。
如果一个域名对应多个IP地址,DNS服务器按照轮询方式返回所有IP地址。
3. 优化访问缓存服务器的策略
3.1 判断距离的方法
DNS服务器收集路由信息,查询客户端DNS服务器的路由信息。
通过比较找出距离客户端最近的路由器,并返回其对应的缓存服务器IP地址。
3.2 重定向服务器的使用
“HTTP规格中定义了很多头部字段,其中有一个叫作Location的字段”
当Web服务器数据转移到其他服务器时,可以使用Location字段将客户端引导到最近的缓存服务器。
重定向过程增加了HTTP消息的交互次数,但精度较高。
4. 缓存的更新方法
4.1 更新方法影响性能
“缓存的思路是将曾经访问过的数据保存下来,但第一次访问时无效”
更新方法的选择影响缓存服务器的效率。
一种方法是Web服务器在原始数据发生更新时立即通知缓存服务器,确保数据保持最新。
4.2 动态与静态内容的处理
动态页面(由CGI程序生成)不能保存在缓存服务器上。
将动态部分与静态部分分开,静态部分保存在缓存中,提高效率。
5. 小测验
现在主流的防火墙方式叫什么?
当防火墙需要确定应用程序种类时要检查什么信息?
用于分担Web服务器负载的设备叫什么?
部署在服务器端的代理是正向代理还是反向代理?
在互联网中部署多台缓存服务器的服务叫什么?
6. 小测验答案
包过滤方式
端口号
负载均衡器
反向代理
内容分发服务(CDS 或 CDN)
🌐 服务器与客户端通信
- 任务与线程的区别
“任务是作为单独的程序来对待的,而线程则是一个程序中的一部分。”
任务:独立的程序。
线程:程序内部的执行单位。
2. 客户端与服务器的连接
2.1 连接角色
客户端:发起连接的一方。
服务器:等待连接的一方。
2.2 数据收发的四个阶段(客户端)
创建套接字(创建套接字阶段)
连接服务器(连接阶段)
收发数据(收发阶段)
断开连接(断开阶段)
2.3 数据收发的四个阶段(服务器)
创建套接字(创建套接字阶段)
等待连接(等待连接阶段)
接受连接(接受连接阶段)
收发数据(收发阶段)
断开连接(断开阶段)
3. 伪代码示例
plaintext
Copy
socket = socket(AF_INET, SOCK_STREAM, 0)
bind(socket, (server_address, server_port))
listen(socket, backlog)
client_socket = accept(socket, (client_address, client_port))
read(client_socket, data)
write(client_socket, response)
close(client_socket)
4. 连接过程详解
4.1 套接字创建
绑定端口号:使用 bind 将端口号写入套接字。
设置监听状态:使用 listen 开始等待来自客户端的连接。
4.2 接受连接
调用 accept:接受连接并创建新的套接字副本。
保持原套接字:原套接字继续处于等待连接状态。
4.3 数据传输
数据在客户端和服务器之间进行收发,使用相同的流程。
5. 套接字与端口号
端口号的重要性:用来识别不同的套接字。
多个套接字的处理:通过客户端的IP地址、端口号和服务器的IP地址、端口号来唯一标识。
识别信息 内容
客户端IP地址 用于识别发起连接的客户端
客户端端口号 用于识别发起连接的客户端
服务器IP地址 用于识别服务器
服务器端口号 用于识别服务器
6. 接收操作
6.1 信号转换
网卡接收信号:将电信号转换为数字信息。
校验FCS:确保数据的完整性。
6.2 IP模块接收操作
检查IP头部:
确认接收方IP地址是否匹配。
检查数据包是否被分片。
6.3 TCP模块处理连接包
处理连接请求:
确认TCP头部中的控制位SYN。
检查接收方端口号。
为相应的套接字复制一个新的副本。
7. 数据收发阶段
7.1 数据包处理
找到对应套接字:通过发送方IP地址、发送方端口号、接收方IP地址、接收方端口号找到匹配的套接字。
拼合数据:将接收到的数据块拼合并存储。
7.2 断开操作
断开连接:可由客户端或服务器发起,遵循TCP协议的规则。
操作顺序 HTTP 1.0 HTTP 1.1
断开操作发起方 服务器先发起 客户端先发起
断开过程 发送FIN,等待ACK 发送FIN,等待ACK
通过以上内容,学生可以更好地理解服务器与客户端之间的通信原理和相关操作。
📡 Web 服务器程序的请求处理
6.3 Web 服务器程序解释请求消息并作出响应
6.3.1 将请求的URI转换为实际的文件名
“服务器程序会根据收到的请求消息中的内容进行相应的处理,并生成响应消息,再通过write返回给客户端。”
服务器程序工作流程
Web 服务器的工作过程包括接收HTTP请求、处理请求消息、生成响应消息并返回给客户端。
请求消息包含“方法”和URI(统一资源标识符),服务器根据这些信息决定如何处理请求。
示例:处理GET请求
当请求方法为GET,URI为一个HTML文件名时,服务器只需读取文件并返回。
读取文件时,URI的路径名与磁盘文件的路径名格式相同(UNIX和Windows系统的差异处理)。
6.3.2 运行CGI程序
“Web 服务器可以启动的程序有几种类型,每种类型的具体工作方式有所区别。”
CGI程序处理请求
当URI指定的文件内容为程序时,服务器会运行程序并返回输出的数据。
浏览器在HTTP请求中加入需要程序处理的数据,如表单中的输入。
数据传递方法
方法 数据传递方式
GET 参数附加在URI后
POST 数据放在请求消息的消息体中
6.3.3 Web 服务器的访问控制
“Web 服务器可以检查事先设置的一些规则,并根据规则允许或禁止访问。”
访问控制规则
客户端IP地址:检查请求的IP地址是否被允许访问。
客户端域名:通过DNS查询IP地址对应的域名,并进行双重检查。
用户名和密码:需要在请求中添加相应的身份验证信息。
6.3.4 返回响应消息
“当服务器完成对请求消息的处理之后,就可以返回响应消息了。”
响应消息的生成过程
服务器调用Socket库的write,将响应消息交给协议栈。
通过套接字描述符发送响应数据,协议栈将数据拆分成多个网络包发送给客户端。
6.4 浏览器接收响应消息并显示内容
6.4.1 通过响应的数据类型判断内容
“Web 服务器发送的响应消息会被分成多个包发送给客户端,然后客户端需要接收数据。”
数据类型判断
根据响应消息中的Content-Type头部字段判断数据类型。
表6.1列出了主要的数据类型和其定义。
主类型 含义 子类型示例
text 表示文本数据 text/html, text/plain
image 表示图像数据 image/jpeg, image/gif
audio 表示音频数据 audio/mpeg
video 表示视频数据 video/mpeg, video/quicktime
application 除上述以外的数据 application/pdf, application/msword
multipart 消息体中包含多个部分 multipart/mixed
6.4.2 浏览器显示网页内容
“判断完数据类型,我们离终点就只有一步之遥了。”
内容显示
根据数据类型调用相应的程序进行显示,浏览器自身负责显示HTML文档、纯文本和图片等内容。
小结
Web 服务器通过解析请求消息、处理数据并返回响应,完成客户端的请求。
访问控制机制确保了数据的安全性,而数据类型的判断和显示则保证了用户体验的流畅性。
🌐 HTML 文档与浏览器操作
HTML 文档的结构
“HTML 文档通过标签表示文档的布局和字体等样式信息,浏览器需要解释这些标签的含义,按照指定的样式显示文档的内容。”
标签:用于定义文档的结构和样式。
浏览器:负责解析标签并渲染内容。
图片的嵌入与请求过程
图片的引用
HTML 文档和图片存储在不同的文件中。
HTML 文档中包含图片的标签,例如 标签。
请求图片的过程
当浏览器读取 HTML 文档时,遇到 标签时,会向服务器请求相应的图片文件。
请求过程与请求 HTML 文档的过程相同,使用 HTTP 请求消息的 URI 中包含图片的文件名。
图像格式与显示
JPEG 和 GIF 格式的图片经过压缩,浏览器需要解压后显示。
显示时需要为图片留出相应的空间,以避免与文字重叠。
数据类型与浏览器的处理
可显示数据:如 HTML 文档和图片,浏览器可以直接显示。
不可显示数据:例如文字处理和幻灯片应用程序的数据,浏览器需要调用相应的程序进行处理。
数据处理的程序类型
可以是浏览器的插件或独立程序。
不同类型的数据需要调用不同的程序,这些程序的对应关系在浏览器中设置。
📦 服务器与客户端的操作
服务器与客户端的区别
特征 服务器 客户端
角色 提供资源和服务 请求资源
数据处理方式 同时处理多个客户端的请求 发送请求并接收响应
包收发操作
网卡接收信号:当包到达服务器时,网卡会接收信号并通知 CPU。
中断机制:此时使用的机制称为中断。
服务器的多任务处理
Web 服务器可以同时处理多个客户端的访问,利用操作系统的多任务和多线程功能。
🚪 网关(Gateway)的概念
“网关是通往异世界的入口,Web 服务器的 CGI(通用网关接口)功能就是一个例子。”
CGI 的工作原理
Web 服务器运行 CGI 程序处理用户发送的数据。
客户端发送的消息通过 CGI 接口进入 CGI 程序,处理完后返回结果。
默认网关的定义
在 TCP/IP 设置中,默认网关通常指路由器。
早期没有路由器一词,网关是通向其他网络的入口。
小测验
服务器和客户端的区别是什么?
当包到达服务器时,网卡会接收信号并通知 CPU,此时使用的机制是什么?
Web 服务器如何同时处理多个客户端的访问?
Web 服务器访问的限制条件有哪些?
客户端如何判断返回数据的不同类型?
📊 网络包的旅程
步骤 描述
用户输入网址 触发浏览器发起请求
浏览器生成 HTTP 消息 通过 Socket 库转交给协议栈
TCP 拆分数据包 在每个包前加上 TCP 头部并转交给 IP
网卡驱动发送信号 将数据转交给网卡并发出发送指令
数据通过网络传输 经过交换机和路由器,最终达到 Web 服务器
通过以上内容,学生可全面掌握 HTML 文档与浏览器的交互过程,理解网络中服务器与客户端的角色及其操作机制。