protocol
约 716 字大约 2 分钟
2025-09-24
1. HTTP 与 TCP 的关系
- HTTP 本身是应用层协议,它定义了浏览器和服务器之间如何组织与解释请求和响应。
- HTTP 并不是“直接使用 TCP”,而是通常基于 TCP 来传输数据(HTTP/1.1、HTTP/2 使用 TCP;而HTTP/3 使用 QUIC/UDP)。
- 在计算机系统中,TCP 既是一份协议规范(RFC 文档),也有实际实现:通常由操作系统内核的 TCP/IP 协议栈负责。
2. 浏览器请求网页的过程
DNS 解析:浏览器将域名解析为服务器 IP。
建立连接:浏览器通过 Socket API(如
socket()+connect())向服务器发起 TCP 连接。客户端会随机选择一个 临时端口(ephemeral port),例如 52341。
服务器监听在 443 端口(HTTPS),或 80 端口(HTTP)。
连接实际上是:
客户端IP:52341 <——TCP连接——> 服务器IP:443
三次握手:TCP 建立连接,确保可靠传输通道存在。
TLS 握手(若为 HTTPS):在 TCP 连接上进行 TLS 加密协商。
传输数据:浏览器发送 HTTP 请求报文,服务器返回 HTTP 响应报文。
3. “HTTP 报文送到 TCP”是什么意思?
从应用层(HTTP 客户端)角度:调用 Socket API(如
send()),把 HTTP 报文交给操作系统。在操作系统内部:
- 内核的 TCP 模块接收报文字节,放进 发送缓冲区。
- TCP 协议栈将报文切分为合适大小的 TCP 段(segment)。
- 每个段加上 TCP 头部(端口、序列号、校验和等)。
- 交给 IP 层,继续封装为 IP 数据报。
- 最终交给链路层/物理层,经由网卡发出。
因此,“送到 TCP”实际上就是:应用层把数据交给内核的 TCP 协议栈,由它负责分段、加头、传递给下层。
4. TCP 的物理实现
- TCP 不是硬件,而是操作系统内核里的一个软件模块:
- 运行在 CPU 上。
- 使用内存缓冲区存放待发送和接收的数据。
- 网卡只懂链路层和物理层,它并不了解 TCP 协议。
- 网卡收发的是以太网帧。
- 报文送到主机后,由驱动交给内核协议栈,逐层剥离直到 TCP 层。
5. HTTP是无状态协议
在服务器向客户发送被请求的文件时,服务器本身不会存储任何关于该客户的状态信息。比如说某个客户在几秒内多次重复 请求同一个对象,服务器并不会因为刚刚为该客户提供此对象就不再做出反应,而是重新发送该对象,就像服务器已经忘记 之前做过的事情一样。这也就是为什么常说 HTTP协议是一个无状态协议
