网络协议HTTP、TCP(草稿)

概述

如何让数据具有自我描述性?

使数据携带自身的信息

为什么网络有层级的划分?

目的是通过通过模块化和分工协作,解决复杂的系统设计、管理和操作问题

交换机、路由器要不要阅读一个信息的头部?要不要阅读数据部分?

要阅读头部,要知道数据从哪来,到哪去,但不用阅读数据部分

复制代码
网卡:网卡可以完成帧的封装和解封装,工作在数据链路层。
中继器:中继器以比特方式将网络信号进行再生和重定时,使其能够传输更长的距离。
放大器
集线器:
集线器实际上就是一个多端口的中继器。
网桥/桥接器:连接两个局域网的一种存储转发设备,可以将一个大的LAN分割为多个网段,或者将两个以上的LAN互联为一个逻辑LAN。
交换机:交换机有一张交换表,可以记录MAC帧和对应端口。(相当于网桥+集线器) 路由器:路由选择、存储转发、连接外部网络。
协议名 协议功能 占用端口 号
HTTP 超文本传输协议 应用层 传输Web网站网页和其他资源 80
FTP文件传输协议 应用层 文件上传和下载 20/21
Telnet 远程连接协议 应用层 远程登录(无加密) 23
SSH安全外壳协议 应用层 远程登陆(加密) 22
SMTP 简单邮件传输协 议 应用层 电子邮件(邮件在服务器之间提交和传 送) 25
POP3 邮局协议版本3 应用层 电子邮件(邮件最终交付协议) 110
TCP 传输层 可靠的面向连接的传输层协议
UDP 传输层 不可靠的基于数据报的传输层协议
IP 网络层 网际互联协议
ICMP 网络层 网络控制消息协议
IGMP 网络层 网络组管理协议
ARP 数据链路 层 地址转换协议
RARP 数据链路 层 反向地址转换协议

万维网

万维网(World Wide Web,简称 WWW)的诞生和发展依赖于以下三个核心要素,它们共同构成了现代互联网信息交互的基础:

1. URL(统一资源定位符)

作用 :为网络中的资源(如网页、图片、API)提供唯一标识和访问地址

https://www.example.com:443/path/to/resource?query=value#fragment

↑ ↑ ↑ ↑ ↑ ↑

协议 主机名 端口 路径 查询参数 片段

以下是URL各组成部分的表格化总结:

组成部分 作用 示例 注意事项
协议(Scheme) 指定访问资源使用的应用层协议 https://ftp:// 后跟://,现代浏览器默认隐藏http://https://
主机名(Host) 标识资源所在的服务器地址(域名或IP) www.example.com192.168.1.1 可包含子域(如blog.example.com
端口(Port) 指定服务器服务的网络端口 :443(HTTPS)、:8080(自定义端口) 默认端口可省略(HTTP=80,HTTPS=443)
路径(Path) 标识服务器上资源的具体位置(类似文件路径) /articles/2023//index.html 区分大小写(取决于服务器配置)
查询参数(Query) 向服务器传递额外参数(以?开头,&分隔) ?id=123&lang=zh 常用于搜索(?q=keyword)、分页(?page=2
片段(Fragment) 指向资源内的锚点(以#开头),仅客户端使用 #section-2/#/home(SPA路由) 不发送到服务器,用于页面内跳转或前端路由

2. HTTP(超文本传输协议)

HTTP 的中文全称是 超文本传输协议(HyperText Transfer Protocol)。

超文本(HyperText)含义:超越普通文本的交互式文本,支持嵌入链接、图片、视频等多媒体资源。

  • GET:通过 URL 的查询字符串(?key=value)传递数据,可见且长度受限(约 2048 字符)。

  • POST:通过请求体(body)传输数据,不可见且支持大量数据(如文件上传)。

发送

发送的HTTP请求一般称之为HTTP请求报文,分为请求行请求头/消息头空行请求体/请求正文四部分.其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开.

XML 复制代码
GET /stm32/index.html?toc=0&ws=off&reset=true HTTP/1.1  # 请求行:使用GET方法获取/stm32/index.html资源,附带3个查询参数,使用HTTP/1.1协议
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7  # 可接受的响应内容类型及优先级(q值)
Accept-Encoding: gzip, deflate  # 支持的压缩编码格式
Accept-Language: zh-CN,zh;q=0.9  # 优先接收中文内容
Cache-Control: max-age=0  # 禁用缓存,强制向服务器验证
Connection: keep-alive  # 要求保持TCP连接
Cookie: __itrace_wid=f3d24dcd-1c13-4bec-8cc9-11d91bc0475e; __itrace_wid=6d823e9c-84aa-43bd-1109-18aee93b70cd  # 发送的Cookie信息(包含两个相同的键,可能是错误)
Host: 47.97.82.68:8080  # 目标服务器地址和端口
If-Modified-Since: Tue, 06 May 2025 12:41:12 GMT  # 条件请求:如果资源在此时间后未修改则返回304
If-None-Match: W/"681a0368-b41d8"  # 条件请求:如果ETag匹配则返回304
Upgrade-Insecure-Requests: 1  # 表示客户端优先选择HTTPS
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 QuarkPC/4.2.5.446  # 客户端浏览器信息(Windows系统,Chrome内核,Quark浏览器)

请求正文

请求行(Request Line):第一行

请求头(Request Headers) :从第二行开始到空行前的所有内容均为请求头,用于传递附加信息

响应

服务器发送的HTTP响应一般称之为HTTP响应报文,分为响应行响应头/消息头空行响应体四部分.其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开.

XML 复制代码
HTTP/1.1 304 Not Modified  # 响应行:HTTP/1.1协议,状态码304表示资源未修改
Server: nginx/1.18.0 (Ubuntu)  # 服务器类型及版本(Ubuntu系统下的Nginx 1.18.0)
Date: Fri, 25 Jul 2025 13:47:28 GMT  # 服务器响应时间(2025年7月25日13:47:28 GMT)
Last-Modified: Tue, 06 May 2025 12:41:12 GMT  # 资源最后修改时间(与请求中的If-Modified-Since一致)
Connection: keep-alive  # 保持TCP连接不关闭
ETag: "681a0368-b41d8"  # 资源标识符(与请求中的If-None-Match一致)

响应正文
状态码范围 类别 说明 常见例子
1XX 信息性状态码 请求已被接收,继续处理 101 Switching Protocols(协议切换)
2XX 成功状态码 请求已成功处理 200 OK(成功)
3XX 重定向状态码 需进一步操作以完成请求 301 Moved Permanently(永久重定向)
4XX 客户端错误 请求包含语法错误或无法完成 404 Not Found(资源不存在)
5XX 服务器错误 服务器处理请求失败 500 Internal Server Error(服务器内部错误)

3. HTML(超文本标记语言)

  • 作用 :定义网页的结构和内容,并支持超链接(Hyperlink)实现资源互联。

  • 关键点

    • 超文本特性 :通过 <a> 标签链接其他资源,形成网状信息结构。

    • 跨平台兼容:纯文本格式,可在不同设备和浏览器中渲染。

    • 多媒体整合:支持嵌入图片、脚本(JavaScript)、样式(CSS)等。

  • 意义:解决了"如何呈现和关联资源"的问题,是万维网的"内容载体"。

三者的协作关系

1.浏览器输入URL → 2. DNS解析获取IP → 3. 建立TCP连接 → 4. 发送HTTP请求报文 → 5. 服务器返回响应 HTML→ 6. 浏览器渲染页面

DNS解析 (Domain Name System Resolution)是将人类易读的域名 (如 www.example.com)转换为机器可识别的IP地址 (如 192.0.2.1)的过程。

不同的域名可以用同一个服务器?

答案是肯定的! 多个域名可以指向同一台服务器,通过监视程序统一管理。

HTTPS

safe:安全的

TCP

长连接 和 短连接的区别

类型 定义 典型应用场景
短连接 每次通信后立即断开连接,下次通信需重新建立TCP连接。 HTTP/1.0、简单的请求-响应模型(如早期Web)
长连接 建立连接后保持连接不关闭,允许多次数据传输(通过心跳保活)。 HTTP/1.1、数据库连接、实时通信(如WebSocket)

TCP头部结构(共20字节基础长度 + 可选选项)

字段名 位数 作用说明 示例/备注
源端口(Source Port) 16 bit 发送方的端口号。 80(HTTP服务端口)
目的端口(Destination Port) 16 bit 接收方的端口号。 54321(客户端临时端口)
序列号(Sequence Number) 32 bit 当前数据段的第一个字节的序列号,用于数据排序和重组。 初始值随机生成(ISN),后续累加数据长度。
确认号(Acknowledgment Number) 32 bit 期望收到的下一个字节的序列号(仅当ACK=1时有效)。 如收到seq=1000,则回复ack=1001
数据偏移(Data Offset) 4 bit TCP头部的长度(以4字节为单位),用于定位数据开始位置。 最小值为5(20字节头部)。
保留(Reserved) 6 bit 保留字段,必须置0。 未来扩展使用。
控制标志(Flags) 6 bit 控制连接状态的关键标志位:
- URGUrgent 1 bit 紧急指针有效(高优先级数据)。 如Telnet中断命令。
- ACKAcknowledgment 1 bit 确认号有效(建立连接后通常为1)。 三次握手中第二次开始ACK=1。
- PSHPush 1 bit 接收方应立即将数据推送给应用层(避免缓冲区延迟)。 如实时聊天消息。
- RST 1 bit 重置连接(异常终止)。 收到无效报文时强制断开。
- **SYN :**Synchronize 1 bit 同步序列号(用于建立连接)。 三次握手中前两次SYN=1。
- FIN 1 bit 终止连接(正常关闭)。 四次挥手中FIN=1。
窗口大小(Window Size) 16 bit 接收方的可用缓冲区大小(流量控制),表示当前能接收的字节数。 动态调整(滑动窗口机制)。
校验和(Checksum) 16 bit 校验头部和数据部分的完整性(包括伪头部)。 防止传输错误。
紧急指针(Urgent Pointer) 16 bit 当URG=1时有效,指向紧急数据的末尾偏移量。 需配合URG标志使用。
选项(Options) 可变 可选字段(长度由数据偏移决定),用于扩展功能:
- MSS(Maximum Segment Size) 可变 协商最大报文段大小(通常1460字节,以太网MTU=1500)。 三次握手时协商。
- SACK(Selective ACK) 可变 选择性确认,支持部分重传。 提高重传效率。
- 时间戳(Timestamp) 可变 计算RTT(往返时间)和防止序列号回绕。 高带宽网络必备。
填充(Padding) 可变 确保TCP头部长度是4字节的整数倍。 选项字段不足时补0。

三次握手的作用

  1. 第一次握手(SYN)

    • 客户端发送SYN,携带自己的初始序列号ISN(Sequence Number:857960100)。

    • 目的 :告知服务端"我想建立连接,我的序列号是X=857960100"。

  2. 第二次握手(SYN-ACK)

    • 服务端返回SYN-ACK,携带自己的初始序列号ISN(Sequence Number:304853757),并确认客户端的ISN ( ACK=X+1),也就是ACK=857960100+1。

    • 目的 :回应客户端"我收到你的SYN了,我的序列号是Y=304853757,下次请发X+1"。

  3. 第三次握手(ACK)

    • 客户端发送ACK,确认服务端的ISN(ACK=Y+1)也就是304853757+1。

    • 目的 :告知服务端"我收到你的SYN-ACK了,下次请发Y+1"。

关键点:第三次握手是客户端对服务端序列号的显式确认,确保双方序列号同步,且服务端知道客户端是活跃的。

TCP三次握手流程详解

步骤 发送方 报文内容 目的
第一次握手 客户端 SYN=1, seq=X 告知服务端:"我想建立连接,我的初始序列号是X"。
第二次握手 服务端 SYN=1, ACK=1, seq=Y, ack=X+1 回应客户端:"我收到你的SYN了,我的序列号是Y,下次请从X+1开始发数据"。
第三次握手 客户端 ACK=1, seq=X+1, ack=Y+1 确认服务端:"我收到你的SYN-ACK了,下次请从Y+1开始发数据"。

为什么TCP需要三次握手?两次握手为什么不行?

两次握手:类似"你约朋友吃饭,朋友说'好',但你不确认他是否听到你的约定"。

风险:朋友可能没听清,但你默认他已同意。

三次握手:你约朋友 → 朋友说"好" → 你回复"收到"。

双方明确约定已达成。

TCP两次握手的问题 vs 三次握手的解决方案

问题分类 两次握手的缺陷 三次握手的解决方案
历史连接干扰 服务端收到旧SYN会直接建立连接,客户端因序列号不匹配拒绝,导致服务端资源浪费。 客户端通过第三次ACK确认有效性,服务端仅对有效ACK分配资源。
初始序列号(ISN)同步 服务端无法确认客户端是否收到自己的SYN-ACK(ISN可能丢失),后续数据传输不可靠。 客户端的第三次ACK显式确认服务端的ISN(ACK=Y+1),确保双方序列号同步。
重复SYN导致的资源浪费 服务端无法区分重复SYN(如网络重传),会为每个SYN创建连接,耗尽资源。 服务端仅在收到客户端的ACK后分配资源,避免无效连接。

TCP协议如何保证数据的可靠传输?

机制 解决的问题 实现方式
三次握手 可靠连接建立 SYN、ACK同步序列号
序列号与确认号 数据顺序、丢包检测 每个字节标记序列号,ACK确认接收范围
超时重传 丢包恢复 RTO超时未收到ACK则重传
滑动窗口 流量控制 动态调整发送窗口大小(RWND)
拥塞控制 网络拥塞避免 慢启动、拥塞避免、快重传、快恢复

下面表格通过举例说明了超时重传、滑动窗口动态调整大小和快重传机制

步骤 发送方(Client) 接收方(Server) 机制触发
1 发送seq=1~1000 未收到(丢包) 超时重传(RTO触发)
2 超时后重传seq=1~1000 收到并回复ACK=1001, RWND=4096 滑动窗口更新
3 发送seq=1001~5000 收到但缓冲区满,回复ACK=5001, RWND=2048 流量控制(窗口调小)
4 发送seq=5001~7048(2KB) 收到seq=5001~7048,回复ACK=7049 正常传输
5 发送seq=8001~9000(丢包) 收到seq=9001~10000,回复3次ACK=8001 快重传 + 快恢复

发送方可能一次发送很多TCP报文, 目的方着急回复确认吗? 不着急,偶尔回复

为什么发送数据时要携带源端口? 接收端需要知道从哪个端口回复

超时重传和快重传有什么区别?见上

完整处理流程示例

假设发送 20KB 数据(MSS=1460B,初始 CWND=2 MSS):

  1. 分片:分成 14 个段(14×1460B)。

  2. 慢启动

    • 发送 2 段 → 收到 ACK → CWND=4 → 发送 4 段 → ...
  3. 流量控制:若接收方 RWND=0,暂停发送。

  4. 拥塞控制:丢包后触发快重传,CWND 减半。

  5. 重组数据:接收方按序列号排序,提交给应用层。

补充:TCP协议核心术语对照表

英文缩写 英文全称 中文解释
TCP Transmission Control Protocol 传输控制协议,提供可靠的、面向连接的字节流服务。
IP Internet Protocol 网际协议,负责数据包的路由和寻址。
MTU Maximum Transmission Unit 最大传输单元,单次数据传输的最大长度(如以太网MTU=1500字节)。
MSS Maximum Segment Size 最大报文段长度,TCP数据段的最大负载(MSS = MTU - IP头 - TCP头)。
SYN Synchronize Sequence Numbers 同步序列号,用于建立连接(三次握手的第一步)。
ACK Acknowledgment 确认号,表示已成功接收数据(ACK=1时有效)。
FIN Finish 终止连接标志,用于正常关闭连接(四次挥手)。
RST Reset 重置连接标志,强制终止异常连接。
URG Urgent 紧急指针标志,表示数据需优先处理(如中断命令)。
PSH Push 推送标志,要求接收方立即将数据提交给应用层。
ISN Initial Sequence Number 初始序列号,TCP连接开始时随机生成的序列号。
RTT Round-Trip Time 往返时间,数据从发送到确认接收的时间。
RTO Retransmission Timeout 重传超时时间,超时未收到ACK则触发重传。
RWND Receive Window 接收窗口,接收方当前可用的缓冲区大小(流量控制)。
CWND Congestion Window 拥塞窗口,发送方根据网络拥塞程度动态调整的发送窗口。
SACK Selective Acknowledgment 选择性确认,允许接收方告知发送方哪些数据已收到(优化重传)。
MSS Maximum Segment Size 最大报文段长度,TCP单次传输的数据段最大值。
NAT Network Address Translation 网络地址转换,将私有IP映射为公有IP(解决IPv4地址不足)。
LAN Local Area Network 局域网,小范围内的私有网络(如家庭、办公室)。
WAN Wide Area Network 广域网,跨越长距离的网络(如互联网)。
相关推荐
guts°2 小时前
17-VRRP
网络·智能路由器
Jewel Q2 小时前
动态路由协议基础
网络·智能路由器
宇称不守恒4.03 小时前
2025暑期—06神经网络-常见网络2
网络·人工智能·神经网络
Dreams_l3 小时前
网络编程2(应用层协议,传输层协议)
运维·服务器·网络
7ACE4 小时前
Wireshark TS | 发送数据超出接收窗口
网络协议·tcp/ip·wireshark
数据与人工智能律师4 小时前
数字迷雾中的安全锚点:解码匿名化与假名化的法律边界与商业价值
大数据·网络·人工智能·云计算·区块链
xzkyd outpaper4 小时前
QUIC协议如何在UDP基础上解决网络切换问题
网络·计算机网络·udp·quic
碳酸的唐5 小时前
Inception网络架构:深度学习视觉模型的里程碑
网络·深度学习·架构
Jewel Q5 小时前
VRRP技术
网络·智能路由器