简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français

站内搜索

搜索

活动公告

11-02 12:46
10-23 09:32
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,将及时处理!
10-23 09:31
10-23 09:28
通知:签到时间调整为每日4:00(东八区)
10-23 09:26

TCP/IP协议与互联网协议族构建数字世界的通信基石揭秘现代网络如何连接全球数十亿设备

3万

主题

423

科技点

3万

积分

大区版主

木柜子打湿

积分
31916

三倍冰淇淋无人之境【一阶】财Doro小樱(小丑装)立华奏以外的星空【二阶】⑨的冰沙

发表于 2025-10-7 19:50:01 | 显示全部楼层 |阅读模式 [标记阅至此楼]

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 引言:数字世界的通信基础

在当今数字化时代,互联网已经成为人类社会不可或缺的基础设施。从智能手机到超级计算机,从家用电器到工业控制系统,全球数十亿设备通过互联网实现互联互通。而支撑这一庞大网络体系的核心技术,正是TCP/IP协议族。本文将深入探讨TCP/IP协议族的工作原理、结构组成以及它如何构建起连接全球的数字通信网络。

2. TCP/IP协议族的历史演进

TCP/IP协议族的发展可以追溯到20世纪60年代末的美国。当时,美国国防部高级研究计划局(ARPA)启动了一个名为ARPANET的项目,旨在建立一个能够抵抗部分网络故障仍能正常运行的通信网络。

1969年,ARPANET建立了第一个节点,连接了加州大学洛杉矶分校和斯坦福研究所。随着网络规模的扩大,研究人员意识到需要一套标准化的通信协议来确保不同类型计算机之间的可靠通信。

1974年,文顿·瑟夫(Vinton Cerf)和罗伯特·卡恩(Robert Kahn)发表了一篇开创性论文,描述了一种新的协议设计,这就是TCP/IP协议的雏形。1983年1月1日,ARPANET正式从NCP(网络控制协议)切换到TCP/IP协议,这一天被视为现代互联网的诞生日。

随着时间的推移,TCP/IP协议族不断发展和完善,逐渐成为全球互联网的标准通信协议。今天,无论是浏览网页、发送电子邮件,还是观看在线视频,背后都有TCP/IP协议族的支持。

3. TCP/IP协议族的分层结构

TCP/IP协议族采用分层架构设计,通常被划分为四层或五层模型。这种分层设计使得协议族具有高度的灵活性和可扩展性。下面我们详细介绍TCP/IP的四层模型:

3.1 应用层(Application Layer)

应用层是TCP/IP协议族的最高层,直接为用户应用程序提供网络服务。常见的应用层协议包括:

• HTTP(超文本传输协议):用于万维网(WWW)上的数据传输
• FTP(文件传输协议):用于在客户端和服务器之间传输文件
• SMTP(简单邮件传输协议):用于发送电子邮件
• DNS(域名系统):用于将域名解析为IP地址
• Telnet:用于远程登录和管理网络设备

应用层协议的主要特点是它们都依赖于下层的传输层提供的服务,而自身则专注于处理特定的应用程序需求。

示例:HTTP请求过程

当用户在浏览器中输入一个网址(如https://www.example.com)时,应用层的HTTP协议会创建一个HTTP请求报文,如下所示:
  1. GET /index.html HTTP/1.1
  2. Host: www.example.com
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
复制代码

这个HTTP请求会被传递给传输层,进行进一步处理。

3.2 传输层(Transport Layer)

传输层的主要功能是为应用程序提供端到端的通信服务。在TCP/IP协议族中,传输层主要有两个核心协议:TCP(传输控制协议)和UDP(用户数据报协议)。

TCP是一种面向连接的、可靠的传输协议。它提供以下关键特性:

• 面向连接:在数据传输前,通信双方需要先建立连接(三次握手)
• 可靠传输:通过序列号、确认应答、重传机制等确保数据不丢失、不重复、按序到达
• 流量控制:通过滑动窗口机制控制发送速率,避免接收方被淹没
• 拥塞控制:通过慢启动、拥塞避免等算法防止网络拥塞

示例:TCP三次握手过程

TCP连接的建立过程如下:
  1. 1. 客户端 -> 服务器:SYN=1, seq=x
  2. 2. 服务器 -> 客户端:SYN=1, ACK=1, seq=y, ack=x+1
  3. 3. 客户端 -> 服务器:ACK=1, seq=x+1, ack=y+1
复制代码

完成这三次握手后,TCP连接就建立成功,双方可以开始传输数据。

UDP是一种无连接的、不可靠的传输协议。与TCP相比,UDP具有以下特点:

• 无连接:不需要事先建立连接,直接发送数据
• 不可靠:不保证数据一定到达目的地,也不保证按序到达
• 轻量级:头部开销小(仅8字节),传输效率高
• 无流量控制和拥塞控制

UDP适用于对实时性要求高但对可靠性要求相对较低的应用,如视频会议、在线游戏、DNS查询等。

示例:UDP数据报结构

UDP数据报的头部结构如下:
  1. 0      7 8     15 16    23 24    31
  2. +--------+--------+--------+--------+
  3. |     源端口      |   目的端口      |
  4. +--------+--------+--------+--------+
  5. |     长度        |    校验和       |
  6. +--------+--------+--------+--------+
  7. |          数据(如果有)             |
  8. +--------+--------+--------+--------+
复制代码

3.3 网络层(Internet Layer)

网络层是TCP/IP协议族的核心,主要负责将数据包从源主机路由到目标主机。网络层的核心协议是IP(网际协议),此外还包括ICMP(互联网控制报文协议)、IGMP(互联网组管理协议)等辅助协议。

IP协议是一种无连接的、不可靠的网络层协议。它主要完成以下功能:

• 寻址:为互联网上的每台主机分配唯一的IP地址
• 路由:确定数据包从源到目的地的路径
• 分片与重组:当数据包大小超过网络MTU(最大传输单元)时,进行分片传输,并在目的地重组

目前,IP协议有两个主要版本:IPv4和IPv6。

IPv4地址示例:
  1. 192.168.1.1
复制代码

IPv6地址示例:
  1. 2001:0db8:85a3:0000:0000:8a2e:0370:7334
复制代码

IPv4数据包的头部结构如下:
  1. 0                   1                   2                   3
  2. 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  3. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4. |版本|  头部长度  |服务类型|          总长度                    |
  5. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  6. |         标识         |标志|        片偏移                     |
  7. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8. |  生存时间  |  协议  |         头部校验和                     |
  9. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  10. |                        源IP地址                            |
  11. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  12. |                      目的IP地址                            |
  13. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  14. |        选项(如果有)        |        填充(如果有)          |
  15. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
复制代码

3.4 网络接口层(Network Interface Layer)

网络接口层是TCP/IP协议族的最低层,负责在同一本地网络上的设备之间传输数据。这一层通常与特定的物理网络技术相关,如以太网、Wi-Fi等。

网络接口层的主要功能包括:

• 帧封装:将IP数据包封装成适合在特定物理网络上传输的帧
• 物理寻址:使用MAC地址(媒体访问控制地址)标识同一网络中的设备
• 错误检测:通过校验和等机制检测数据在物理传输过程中可能出现的错误

示例:以太网帧结构
  1. +--------+--------+--------------+--------+--------+
  2. | 目的MAC| 源MAC | 以太网类型 |  数据  |  FCS  |
  3. | 地址(6B)| 地址(6B)|   (2B)    | (46-1500B)| (4B) |
  4. +--------+--------+--------------+--------+--------+
复制代码

4. TCP/IP协议族如何实现全球设备互联

TCP/IP协议族通过一系列精巧的设计,实现了全球范围内数十亿设备的互联互通。下面我们详细分析这一过程。

4.1 IP地址与子网划分

互联网上的每台设备都需要一个唯一的IP地址,以便其他设备能够找到它。IPv4地址由32位二进制数组成,通常表示为四个十进制数(每个数范围0-255),用点分隔,如192.168.1.1。

为了有效管理IP地址空间,互联网采用了子网划分技术。通过子网掩码,可以将一个大的网络划分为多个更小的子网。例如,一个C类网络192.168.1.0,默认子网掩码为255.255.255.0,表示前24位是网络位,后8位是主机位。

示例:子网划分计算

假设有一个网络192.168.1.0/24,需要划分为4个子网:

1. 确定需要借用的主机位数:4个子网需要2位(2^2=4)
2. 新的子网掩码:/24 + /2 = /26,即255.255.255.192
3. 每个子网的大小:2^(32-26) - 2 = 62个可用主机地址
4. 子网划分结果:子网1:192.168.1.0/26,可用IP范围:192.168.1.1 - 192.168.1.62子网2:192.168.1.64/26,可用IP范围:192.168.1.65 - 192.168.1.126子网3:192.168.1.128/26,可用IP范围:192.168.1.129 - 192.168.1.190子网4:192.168.1.192/26,可用IP范围:192.168.1.193 - 192.168.1.254
5. 子网1:192.168.1.0/26,可用IP范围:192.168.1.1 - 192.168.1.62
6. 子网2:192.168.1.64/26,可用IP范围:192.168.1.65 - 192.168.1.126
7. 子网3:192.168.1.128/26,可用IP范围:192.168.1.129 - 192.168.1.190
8. 子网4:192.168.1.192/26,可用IP范围:192.168.1.193 - 192.168.1.254

• 子网1:192.168.1.0/26,可用IP范围:192.168.1.1 - 192.168.1.62
• 子网2:192.168.1.64/26,可用IP范围:192.168.1.65 - 192.168.1.126
• 子网3:192.168.1.128/26,可用IP范围:192.168.1.129 - 192.168.1.190
• 子网4:192.168.1.192/26,可用IP范围:192.168.1.193 - 192.168.1.254

4.2 路由与数据包转发

在互联网中,数据包从源主机到目的主机需要经过多个路由器的转发。路由器是网络层的核心设备,负责根据IP数据包中的目的IP地址,选择最佳的转发路径。

路由器内部维护着一个路由表,记录了不同目的网络对应的下一跳地址。当路由器收到一个数据包时,它会查询路由表,确定下一跳地址,然后将数据包转发给相应的路由器,直到数据包到达目的地。

示例:路由表结构

典型的路由表条目包含以下字段:
  1. 目的网络      子网掩码        网关          接口    度量
  2. 192.168.2.0   255.255.255.0   192.168.1.2   eth0    1
  3. 10.0.0.0      255.0.0.0       192.168.1.1   eth0    2
  4. 0.0.0.0       0.0.0.0         203.0.113.1   eth1    10
复制代码

其中,0.0.0.0/0(默认路由)表示当没有更具体的路由匹配时,数据包应该被转发到网关203.0.113.1。

4.3 域名系统(DNS)

虽然IP地址能够唯一标识互联网上的设备,但对人类来说,记忆一串数字并不方便。域名系统(DNS)提供了一种将人类可读的域名(如www.example.com)转换为机器可读的IP地址的机制。

DNS采用分层分布式数据库结构,由根域名服务器、顶级域名服务器、权威域名服务器和本地域名服务器组成。当用户输入一个域名时,系统会通过一系列DNS查询,最终获取对应的IP地址。

示例:DNS查询过程

以查询www.example.com的IP地址为例:

1. 用户计算机向本地DNS服务器发送递归查询请求
2. 本地DNS服务器检查缓存,如果没有记录,则向根域名服务器发送迭代查询请求
3. 根域名服务器返回负责.com域的顶级域名服务器地址
4. 本地DNS服务器向顶级域名服务器查询,获得负责example.com域的权威域名服务器地址
5. 本地DNS服务器向权威域名服务器查询,获得www.example.com的IP地址
6. 本地DNS服务器将IP地址返回给用户计算机,并缓存结果

4.4 网络地址转换(NAT)

由于IPv4地址空间有限(约43亿个地址),而互联网设备数量激增,IPv4地址面临耗尽的问题。网络地址转换(NAT)技术允许多台设备共享一个公共IP地址,从而缓解了IPv4地址短缺的问题。

NAT通常部署在路由器或防火墙上,它维护一个转换表,记录内部私有IP地址与外部公共IP地址及端口的映射关系。当内部设备发送数据包到外部网络时,NAT会将源IP地址和端口替换为公共IP地址和一个新的端口;当外部响应返回时,NAT会根据转换表将目标IP地址和端口还原为内部设备的私有IP地址和端口。

示例:NAT转换过程

假设内部网络有一台设备(192.168.1.100:3000)要访问外部服务器(203.0.113.10:80),路由器的公共IP地址是198.51.100.1:

1. 内部设备发送数据包:源IP:端口 = 192.168.1.100:3000目的IP:端口 = 203.0.113.10:80
2. 源IP:端口 = 192.168.1.100:3000
3. 目的IP:端口 = 203.0.113.10:80
4. 路由器进行NAT转换:源IP:端口 = 198.51.100.1:50000(假设分配的端口是50000)目的IP:端口 = 203.0.113.10:80路由器在NAT表中添加条目:(192.168.1.100:3000) <-> (198.51.100.1:50000)
5. 源IP:端口 = 198.51.100.1:50000(假设分配的端口是50000)
6. 目的IP:端口 = 203.0.113.10:80
7. 路由器在NAT表中添加条目:(192.168.1.100:3000) <-> (198.51.100.1:50000)
8. 外部服务器响应:源IP:端口 = 203.0.113.10:80目的IP:端口 = 198.51.100.1:50000
9. 源IP:端口 = 203.0.113.10:80
10. 目的IP:端口 = 198.51.100.1:50000
11. 路由器进行反向NAT转换:源IP:端口 = 203.0.113.10:80目的IP:端口 = 192.168.1.100:3000数据包被转发到内部设备
12. 源IP:端口 = 203.0.113.10:80
13. 目的IP:端口 = 192.168.1.100:3000
14. 数据包被转发到内部设备

内部设备发送数据包:

• 源IP:端口 = 192.168.1.100:3000
• 目的IP:端口 = 203.0.113.10:80

路由器进行NAT转换:

• 源IP:端口 = 198.51.100.1:50000(假设分配的端口是50000)
• 目的IP:端口 = 203.0.113.10:80
• 路由器在NAT表中添加条目:(192.168.1.100:3000) <-> (198.51.100.1:50000)

外部服务器响应:

• 源IP:端口 = 203.0.113.10:80
• 目的IP:端口 = 198.51.100.1:50000

路由器进行反向NAT转换:

• 源IP:端口 = 203.0.113.10:80
• 目的IP:端口 = 192.168.1.100:3000
• 数据包被转发到内部设备

5. 关键协议详解

5.1 HTTP/HTTPS协议

HTTP(超文本传输协议)是应用层协议,用于在Web浏览器和Web服务器之间传输超文本数据。HTTPS(安全超文本传输协议)是HTTP的安全版本,通过SSL/TLS协议提供加密通信。

HTTP请求方法:

• GET:请求获取指定资源
• POST:向指定资源提交数据进行处理
• PUT:更新指定资源
• DELETE:删除指定资源
• HEAD:获取资源的元信息
• OPTIONS:获取服务器支持的HTTP方法

HTTP状态码:

• 1xx:信息性状态码
• 2xx:成功状态码(如200 OK)
• 3xx:重定向状态码(如301 Moved Permanently)
• 4xx:客户端错误状态码(如404 Not Found)
• 5xx:服务器错误状态码(如500 Internal Server Error)

示例:HTTP请求与响应

HTTP请求示例:
  1. GET /index.html HTTP/1.1
  2. Host: www.example.com
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
复制代码

HTTP响应示例:
  1. HTTP/1.1 200 OK
  2. Date: Mon, 23 May 2022 12:00:00 GMT
  3. Server: Apache/2.4.41 (Unix)
  4. Content-Type: text/html
  5. Content-Length: 1234
  6. <!DOCTYPE html>
  7. <html>
  8. <head>
  9.     <title>Example Page</title>
  10. </head>
  11. <body>
  12.     <h1>Welcome to Example.com</h1>
  13.     <p>This is an example page.</p>
  14. </body>
  15. </html>
复制代码

5.2 TCP拥塞控制算法

TCP拥塞控制是TCP协议的重要组成部分,旨在防止网络拥塞并确保网络资源的公平使用。TCP拥塞控制主要包括以下四个核心算法:

1. 慢启动(Slow Start):连接开始时,拥塞窗口(cwnd)初始化为一个较小的值(通常为1 MSS),每收到一个ACK,cwnd增加1 MSS,呈指数增长。
2. 拥塞避免(Congestion Avoidance):当cwnd达到慢启动阈值(ssthresh)后,进入拥塞避免阶段,cwnd每经过一个RTT增加1 MSS,呈线性增长。
3. 快重传(Fast Retransmit):当发送方连续收到三个重复ACK时,不等待超时,立即重传丢失的报文段。
4. 快恢复(Fast Recovery):在快重传后,将ssthresh设置为当前cwnd的一半,然后进入拥塞避免阶段。

慢启动(Slow Start):连接开始时,拥塞窗口(cwnd)初始化为一个较小的值(通常为1 MSS),每收到一个ACK,cwnd增加1 MSS,呈指数增长。

拥塞避免(Congestion Avoidance):当cwnd达到慢启动阈值(ssthresh)后,进入拥塞避免阶段,cwnd每经过一个RTT增加1 MSS,呈线性增长。

快重传(Fast Retransmit):当发送方连续收到三个重复ACK时,不等待超时,立即重传丢失的报文段。

快恢复(Fast Recovery):在快重传后,将ssthresh设置为当前cwnd的一半,然后进入拥塞避免阶段。

示例:TCP拥塞控制过程

假设MSS=1460字节,初始cwnd=1,ssthresh=65535字节:

1. 慢启动阶段:发送1个报文段(1460字节)收到ACK,cwnd=2发送2个报文段(2920字节)收到2个ACK,cwnd=4发送4个报文段(5840字节)收到4个ACK,cwnd=8发送8个报文段(11680字节)收到8个ACK,cwnd=16…(指数增长)
2. 发送1个报文段(1460字节)
3. 收到ACK,cwnd=2
4. 发送2个报文段(2920字节)
5. 收到2个ACK,cwnd=4
6. 发送4个报文段(5840字节)
7. 收到4个ACK,cwnd=8
8. 发送8个报文段(11680字节)
9. 收到8个ACK,cwnd=16
10. …(指数增长)
11. 当cwnd达到ssthresh或检测到丢包时,进入拥塞避免阶段:假设ssthresh=16 MSS,当cwnd=16时,进入拥塞避免每经过一个RTT,cwnd增加1 MSScwnd从16线性增长到17、18、19…
12. 假设ssthresh=16 MSS,当cwnd=16时,进入拥塞避免
13. 每经过一个RTT,cwnd增加1 MSS
14. cwnd从16线性增长到17、18、19…
15. 如果检测到丢包(如超时或收到3个重复ACK):设置ssthresh = cwnd / 2如果是超时,cwnd=1,重新进入慢启动如果是收到3个重复ACK,cwnd=ssthresh+3,进入快恢复
16. 设置ssthresh = cwnd / 2
17. 如果是超时,cwnd=1,重新进入慢启动
18. 如果是收到3个重复ACK,cwnd=ssthresh+3,进入快恢复

慢启动阶段:

• 发送1个报文段(1460字节)
• 收到ACK,cwnd=2
• 发送2个报文段(2920字节)
• 收到2个ACK,cwnd=4
• 发送4个报文段(5840字节)
• 收到4个ACK,cwnd=8
• 发送8个报文段(11680字节)
• 收到8个ACK,cwnd=16
• …(指数增长)

当cwnd达到ssthresh或检测到丢包时,进入拥塞避免阶段:

• 假设ssthresh=16 MSS,当cwnd=16时,进入拥塞避免
• 每经过一个RTT,cwnd增加1 MSS
• cwnd从16线性增长到17、18、19…

如果检测到丢包(如超时或收到3个重复ACK):

• 设置ssthresh = cwnd / 2
• 如果是超时,cwnd=1,重新进入慢启动
• 如果是收到3个重复ACK,cwnd=ssthresh+3,进入快恢复

5.3 IPv6与下一代互联网

随着互联网的快速发展,IPv4地址空间已经接近耗尽。IPv6作为IPv4的继任者,提供了几乎无限的地址空间和许多改进特性。

IPv6的主要特点:

• 更大的地址空间:128位地址,理论上有2^128个地址
• 简化的头部格式:基本头部固定为40字节,提高路由效率
• 无需NAT:巨大的地址空间使得每个设备都可以拥有唯一的公共IP地址
• 内置安全性:IPsec是IPv6的强制要求
• 即插即用:支持地址自动配置
• 更好的服务质量支持:通过流标签字段提供QoS

IPv6地址表示:IPv6地址由8组4位十六进制数组成,用冒号分隔,例如:
  1. 2001:0db8:85a3:0000:0000:8a2e:0370:7334
复制代码

可以省略前导零和连续的零组,上述地址可以简写为:
  1. 2001:db8:85a3::8a2e:370:7334
复制代码

示例:IPv6地址类型

IPv6地址分为几种类型:

1. 单播地址(Unicast):标识单个接口全球单播地址:类似IPv4的公共地址,前缀为2000::/3链路本地地址:仅在本地链路有效,前缀为FE80::/10唯一本地地址:在本地网络内唯一,前缀为FC00::/7
2. 全球单播地址:类似IPv4的公共地址,前缀为2000::/3
3. 链路本地地址:仅在本地链路有效,前缀为FE80::/10
4. 唯一本地地址:在本地网络内唯一,前缀为FC00::/7
5. 组播地址(Multicast):标识一组接口,前缀为FF00::/8
6. 任播地址(Anycast):标识一组接口中的任意一个,与单播地址格式相同

单播地址(Unicast):标识单个接口

• 全球单播地址:类似IPv4的公共地址,前缀为2000::/3
• 链路本地地址:仅在本地链路有效,前缀为FE80::/10
• 唯一本地地址:在本地网络内唯一,前缀为FC00::/7

组播地址(Multicast):标识一组接口,前缀为FF00::/8

任播地址(Anycast):标识一组接口中的任意一个,与单播地址格式相同

6. 实际应用案例

6.1 网页浏览过程分析

让我们分析一个完整的网页浏览过程,看看TCP/IP协议族是如何协同工作的。

假设用户在浏览器中输入www.example.com并访问:

1. DNS解析:浏览器检查本地缓存是否有www.example.com的IP地址记录如果没有,向操作系统发起DNS解析请求操作系统检查本地缓存,如果没有,向本地DNS服务器发送请求本地DNS服务器通过递归查询获取www.example.com的IP地址(假设为93.184.216.34)IP地址返回给浏览器
2. 浏览器检查本地缓存是否有www.example.com的IP地址记录
3. 如果没有,向操作系统发起DNS解析请求
4. 操作系统检查本地缓存,如果没有,向本地DNS服务器发送请求
5. 本地DNS服务器通过递归查询获取www.example.com的IP地址(假设为93.184.216.34)
6. IP地址返回给浏览器
7. 建立TCP连接:浏览器向93.184.216.34的80端口发起TCP连接请求进行TCP三次握手:浏览器发送SYN=1, seq=x服务器响应SYN=1, ACK=1, seq=y, ack=x+1浏览器发送ACK=1, seq=x+1, ack=y+1TCP连接建立成功
8. 浏览器向93.184.216.34的80端口发起TCP连接请求
9. 进行TCP三次握手:浏览器发送SYN=1, seq=x服务器响应SYN=1, ACK=1, seq=y, ack=x+1浏览器发送ACK=1, seq=x+1, ack=y+1
10. 浏览器发送SYN=1, seq=x
11. 服务器响应SYN=1, ACK=1, seq=y, ack=x+1
12. 浏览器发送ACK=1, seq=x+1, ack=y+1
13. TCP连接建立成功
14.
  1. 发送HTTP请求:浏览器构建HTTP请求报文:GET / HTTP/1.1
  2. Host: www.example.com
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8HTTP请求被封装到TCP段中TCP段被封装到IP数据包中IP数据包被封装到以太网帧中以太网帧通过物理网络传输到路由器
复制代码
15.
  1. 浏览器构建HTTP请求报文:GET / HTTP/1.1
  2. Host: www.example.com
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
复制代码
16. HTTP请求被封装到TCP段中
17. TCP段被封装到IP数据包中
18. IP数据包被封装到以太网帧中
19. 以太网帧通过物理网络传输到路由器
20. 数据包路由:路由器收到以太网帧,解封装获取IP数据包检查IP数据包的目的地址(93.184.216.34)查询路由表,确定下一跳地址将IP数据包重新封装到适合下一跳网络的帧中,转发给下一跳路由器重复此过程,直到数据包到达目标服务器
21. 路由器收到以太网帧,解封装获取IP数据包
22. 检查IP数据包的目的地址(93.184.216.34)
23. 查询路由表,确定下一跳地址
24. 将IP数据包重新封装到适合下一跳网络的帧中,转发给下一跳路由器
25. 重复此过程,直到数据包到达目标服务器
26.
  1. 服务器处理请求:服务器收到以太网帧,逐层解封装,最终获得HTTP请求Web服务器处理HTTP请求,获取请求的资源(index.html)构建HTTP响应:
  2. “`
  3. HTTP/1.1 200 OK
  4. Date: Mon, 23 May 2022 12:00:00 GMT
  5. Server: Apache/2.4.41 (Unix)
  6. Content-Type: text/html
  7. Content-Length: 1234<!DOCTYPE html><title>Example Page</title><h1>Welcome to Example.com</h1>
  8. <p>This is an example page.</p>
复制代码
27. 服务器收到以太网帧,逐层解封装,最终获得HTTP请求
28. Web服务器处理HTTP请求,获取请求的资源(index.html)
29.
  1. 构建HTTP响应:
  2. “`
  3. HTTP/1.1 200 OK
  4. Date: Mon, 23 May 2022 12:00:00 GMT
  5. Server: Apache/2.4.41 (Unix)
  6. Content-Type: text/html
  7. Content-Length: 1234
复制代码

DNS解析:

• 浏览器检查本地缓存是否有www.example.com的IP地址记录
• 如果没有,向操作系统发起DNS解析请求
• 操作系统检查本地缓存,如果没有,向本地DNS服务器发送请求
• 本地DNS服务器通过递归查询获取www.example.com的IP地址(假设为93.184.216.34)
• IP地址返回给浏览器

建立TCP连接:

• 浏览器向93.184.216.34的80端口发起TCP连接请求
• 进行TCP三次握手:浏览器发送SYN=1, seq=x服务器响应SYN=1, ACK=1, seq=y, ack=x+1浏览器发送ACK=1, seq=x+1, ack=y+1
• 浏览器发送SYN=1, seq=x
• 服务器响应SYN=1, ACK=1, seq=y, ack=x+1
• 浏览器发送ACK=1, seq=x+1, ack=y+1
• TCP连接建立成功

• 浏览器发送SYN=1, seq=x
• 服务器响应SYN=1, ACK=1, seq=y, ack=x+1
• 浏览器发送ACK=1, seq=x+1, ack=y+1

发送HTTP请求:

  1. 浏览器构建HTTP请求报文:GET / HTTP/1.1
  2. Host: www.example.com
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
复制代码
• HTTP请求被封装到TCP段中
• TCP段被封装到IP数据包中
• IP数据包被封装到以太网帧中
• 以太网帧通过物理网络传输到路由器
  1. GET / HTTP/1.1
  2. Host: www.example.com
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
复制代码

数据包路由:

• 路由器收到以太网帧,解封装获取IP数据包
• 检查IP数据包的目的地址(93.184.216.34)
• 查询路由表,确定下一跳地址
• 将IP数据包重新封装到适合下一跳网络的帧中,转发给下一跳路由器
• 重复此过程,直到数据包到达目标服务器

服务器处理请求:

• 服务器收到以太网帧,逐层解封装,最终获得HTTP请求
• Web服务器处理HTTP请求,获取请求的资源(index.html)
  1. 构建HTTP响应:
  2. “`
  3. HTTP/1.1 200 OK
  4. Date: Mon, 23 May 2022 12:00:00 GMT
  5. Server: Apache/2.4.41 (Unix)
  6. Content-Type: text/html
  7. Content-Length: 1234
复制代码

<!DOCTYPE html>
  1. <title>Example Page</title>
复制代码
  1. <h1>Welcome to Example.com</h1>
  2. <p>This is an example page.</p>
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

频道订阅

频道订阅

加入社群

加入社群

联系我们|TG频道|RSS

Powered by Pixtech

© 2025 Pixtech Team.