网络协议HTTP、TCP/UDP
概述
如何让数据具有自我描述性?
使数据携带自身的信息
为什么网络有层级的划分?
目的是通过通过模块化和分工协作,解决复杂的系统设计、管理和操作问题
交换机、路由器要不要阅读一个信息的头部?要不要阅读数据部分?
要阅读头部,要知道数据从哪来,到哪去,但不用阅读数据部分
网卡:网卡可以完成帧的封装和解封装,工作在数据链路层。中继器:中继器以比特方式将网络信号进行再生和重定时,使其能够传输更长的距离。放大器集线器:集线器实际上就是一个多端口的中继器。网桥/桥接器:连接两个局域网的一种存储转发设备,可以将一个大的LAN分割为多个网段,或者将两个以上的LAN互联为一个逻辑LAN。交换机:交换机有一张交换表,可以记录MAC帧和对应端口。(相当于网桥+集线器) 路由器:路由选择、存储转发、连接外部网络
万维网
万维网(World Wide Web,简称 WWW)的诞生和发展依赖于以下三个核心要素,它们共同构成了现代互联网信息交互的基础:
1. URL(统一资源定位符)
作用:为网络中的资源(如网页、图片、API)提供唯一标识和访问地址。
https://www.example.com:443/path/to/resource?query=value#fragment ↑ ↑ ↑ ↑ ↑ ↑协议 主机名 端口 路径 查询参数 片段
以下是URL各组成部分的表格化总结:
https://
、ftp://
://
,现代浏览器默认隐藏http://
或https://
www.example.com
、192.168.1.1
blog.example.com
):443
(HTTPS)、:8080
(自定义端口)/articles/2023/
、/index.html
?
开头,&
分隔)?id=123&lang=zh
?q=keyword
)、分页(?page=2
)#
开头),仅客户端使用#section-2
、/#/home
(SPA路由)2. HTTP(超文本传输协议)
HTTP 的中文全称是 超文本传输协议(HyperText Transfer Protocol)。
超文本(HyperText)含义:超越普通文本的交互式文本,支持嵌入链接、图片、视频等多媒体资源。
GET:通过 URL 的查询字符串(
?key=value
)传递数据,可见且长度受限(约 2048 字符)。POST:通过请求体(body)传输数据,不可见且支持大量数据(如文件上传)。
发送
发送的HTTP请求一般称之为HTTP请求报文
,分为请求行
、请求头/消息头
、空行
、请求体/请求正文
四部分.其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开.
请求行(Request Line):第一行
请求头(Request Headers):从第二行开始到空行前的所有内容均为请求头,用于传递附加信息
响应
服务器发送的HTTP响应一般称之为HTTP响应报文
,分为响应行
、响应头/消息头
、空行
、响应体
四部分.其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开.
101 Switching Protocols
(协议切换)200 OK
(成功)301 Moved Permanently
(永久重定向)404 Not Found
(资源不存在)500 Internal Server Error
(服务器内部错误)3. HTML(超文本标记语言)
-
作用:定义网页的结构和内容,并支持超链接(Hyperlink)实现资源互联。
-
关键点:
-
意义:解决了“如何呈现和关联资源”的问题,是万维网的“内容载体”。
三者的协作关系
1.浏览器输入URL → 2. DNS解析获取IP → 3. 建立TCP连接 → 4. 发送HTTP请求报文 → 5. 服务器返回响应 HTML
DNS解析(Domain Name System Resolution)是将人类易读的域名(如 www.example.com
)转换为机器可识别的IP地址(如 192.0.2.1
)的过程。
不同的域名可以用同一个服务器?
答案是肯定的! 多个域名可以指向同一台服务器,通过监视程序统一管理。
HTTPS
safe:安全的
SSL/TLS
对称加密(如 AES)传输数据
非对称加密(如 RSA)交换密钥
HTTPS 通过 数字证书 验证服务器身份
对称加密(如 AES)与非对称加密(如 RSA)在 HTTPS 中的协作流程
-
客户端 → 服务器:
Hello,支持 HTTPS 吗?
-
服务器 → 客户端:
这是我的证书(含公钥)
-
客户端 验证证书有效性(如是否过期、是否受信任)。
-
客户端 生成随机 AES 密钥,用服务器公钥加密后发送。
-
服务器 用私钥解密,获取 AES 密钥。
-
双方 使用 AES 密钥加密所有后续通信。
TCP
长连接 和 短连接的区别
TCP头部结构
(共20字节基础长度 + 可选选项)
80
(HTTP服务端口)54321
(客户端临时端口)seq=1000
,则回复ack=1001
。5
(20字节头部)。URG
标志使用。
三次握手
-
第一次握手(SYN)
-
客户端发送SYN,携带自己的初始序列号ISN(Sequence Number:857960100)。
-
目的:告知服务端“我想建立连接,我的序列号是X=857960100”。
-
-
第二次握手(SYN-ACK)
-
服务端返回SYN-ACK,携带自己的初始序列号ISN(Sequence Number:304853757),并确认客户端的ISN ( ACK=X+1),也就是ACK=857960100+1。
-
目的:回应客户端“我收到你的SYN了,我的序列号是Y=304853757,下次请发X+1”。
-
-
第三次握手(ACK)
-
客户端发送ACK,确认服务端的ISN(ACK=Y+1)也就是304853757+1。
-
目的:告知服务端“我收到你的SYN-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
为什么TCP需要三次握手?两次握手为什么不行?
两次握手:类似“你约朋友吃饭,朋友说‘好’,但你不确认他是否听到你的约定”。
风险:朋友可能没听清,但你默认他已同意。
三次握手:你约朋友 → 朋友说“好” → 你回复“收到”。
双方明确约定已达成。
TCP两次握手的问题 vs 三次握手的解决方案
四次挥手
发送方设置
PSH=1
,要求接收方的 TCP 协议栈立即将当前数据段(Segment)提交给应用层(如 HTTP、FTP 等),而不是暂存在缓冲区等待更多数据。
为什么 TCP 断开连接需要四次挥手,而不是三次?
TCP 连接是全双工的。TCP 连接允许数据双向独立传输(客户端→服务端,服务端→客户端)。因此,关闭连接需要双向独立关闭:
-
客户端主动发起终止(发送
FIN
)。 -
服务端也需要独立发起终止(发送另一个
FIN
)。
类比:就像两个人打电话,必须双方都明确说“再见”才能挂断。
如果合并为三次:
服务端将 ACK
和 FIN
合并发送(即第二次挥手直接发 FIN + ACK
),但前提是服务端没有剩余数据要发送。这种情况在 HTTP 短连接中常见(表现为“三次挥手”),但不是 TCP 的标准行为。
下面就是合并为三次的情况
完整过程
TIME_WAIT=2MSL: 什么是MSL?为什么客户端最后还要等待2MSL?
什么是MSL?
MSL是指TCP传输中,TCP报文段在网络中存在的最大生存时间。(MSL的主要目的是定义一个时间限制,以确保TCP报文段在网络中不会无限期地存在。是TCP允许不同的实现可以设置不同的MSL值)
为什么客户端最后还要等待2MSL?
确保对方收到最终ACK:TIME_WAIT状态确保连接的另一方(服务器)有足够的时间接收到最后一个ACK。因为如果服务器没有收到这个ACK,并且第三次挥手超时, 服务端可能认为它发送的第三次挥手失败(迷失在网络中), 服务器它会重新发送FIN报文段(第三次挥手)。客户端在TIME_WAIT状态可以处理这种情况,确保连接的可靠终止。
端口和资源的正确释放:这个等待期还允许操作系统正确地清理和释放用于连接的资源,如端口号。在2MSL结束后,相同的端口号可以安全地被新的连接使用,不会受到旧连接残留数据的影响。
TCP协议如何保证数据的可靠传输?
下面表格通过举例说明了超时重传、滑动窗口动态调整大小和快重传机制
seq=1~1000
seq=1~1000
ACK=1001, RWND=4096
seq=1001~5000
ACK=5001, RWND=2048
seq=5001~7048
(2KB)seq=5001~7048
,回复ACK=7049
seq=8001~9000
(丢包)seq=9001~10000
,回复3次ACK=8001
发送方可能一次发送很多TCP报文, 目的方着急回复确认吗? 不着急,偶尔回复
为什么发送数据时要携带源端口? 接收端需要知道从哪个端口回复
超时重传和快重传有什么区别?见上
UDP
UDP是一种保留消息边界的简单的面向数据报的传输层协议。
- 无连接:UDP是一种无连接协议。这意味着在数据包发送之前,发送方和接收方之间不需要建立连接。每个数据包之间独立发送,彼此之间没有依赖关系。
- 低开销:UDP协议头部较小,只有8字节,相比之下,TCP协议头部最少20字节。UDP的简单性使得它在传输数据时增加的开销更少。
- 不可靠传输:UDP不提供数据到达的保证。因为它不进行错误检查或者纠正,意味着网络上的数据包可能会丢失、重复或乱序到达,且发送方不会得到通知。
- 无拥塞控制:UDP不实现拥塞控制机制。它以相同的速度发送数据,不论网络条件如何。这可能导致在网络质量较差时数据包被丢弃。
- 快速传输:由于缺乏连接建立、确认响应、流量控制等机制,UDP可以更快速地传输数据(能不能到目的地是另外一件事)。
由于其特性,UDP通常用于那些对实时性要求高但对可靠性要求不高的应用,例如视频流、VoIP(语音通信)、在线游戏、早期的聊天软件等。