TCP 的其他机制
TCP头部的标志位
SYN:请求建立连接标志位
ACK:响应报文标志位
PSH:携带数据标志位,通知接收方该从缓冲区读数据
FIN:请求断开连接标志位
RST:复位标志位
URG:紧急数据标志位
安全可靠机制
三次握手和四次挥手机制
应答机制
TCP对于每一包数据都会给出相应的应答。
发送数据时序列号表示这包数据的起始编号,响应报文中的确认号是接收方收到的最后一个字节编号+1。
超时重传机制
当数据发送出去等待指定时间没有收到响应,此时认为这包数据丢失,则进行重传。
滑动窗口机制
一段缓冲区,缓存TCP已发送未收到响应、准备发送等数据。
提高效率机制
延迟应答机制:发送数据的同时可以等待应答。
流量控制机制:结合TCP头部的窗口大小,动态调整发送速率。
捎带应答机制:ACK报文可能和应用层的数据同时发送。
HTTP 协议
WWW(万维网)
万维网服务器后台如何标记万维网数据
URL:统一资源定位符
万维网客户端与万维网服务器之间通信方式
HTTP:超文本传输协议
万维网客户端如何展示请求的数据
HTML:超文本标记语言
示例 URL:
https://www.baidu.com/
百度主页
https://www.baidu.com/s?wd=%E7%89%B9%E6%9C%97%E6%99%AE%E5%B7%A6%E6%89%8B%E5%8F%88%E6%B7%BB%E2%80%9C%E6%96%B0%E6%B7%A4%E9%9D%92%E2%80%9D+%E7%99%BD%E5%AE%AB%E5%9B%9E%E5%BA%94&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1
HTTP 协议基本信息
应用层协议
端口:80
备用端口:8080
基于传输层的TCP协议
HTTP通信过程
1.HTTP的报文格式
(1)开始行,用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行(Request-Line),而在响应报文中的开始行叫做状态行(Status-Line)。在开始行的三个字段之间都以空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”。
(2)首部行,用来说明浏览器、服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有“回车”和“换行”。整个首部行结束时,还有一空行将首部行和后面的实体主体分开。
(3)实体主体(entity body),在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。
2. HTTP 请求报文
GET / HTTP/1.1\r\n
Host: news.sohu.com\r\n
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\n
Accept-Language: en-US,en;q=0.5\r\n
Connection: keep-alive\r\n
\r\n
2.1HTTP 请求报文分析
GET / HTTP/1.1\r\n
GET:请求方法,表示客户端要获取资源。
/:请求的资源路径,这里是网站根目录。
HTTP/1.1:使用的 HTTP 协议版本。
Host: news.sohu.com\r\n
Host:指定请求的目标主机域名(HTTP/1.1 必须带)。
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0\r\n
User-Agent:客户端软件信息,通常用来识别浏览器类型、操作系统。
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\n
Accept:客户端能接收的数据类型(MIME 类型),并带权重(q=0.9 表示优先级)。
Accept-Language: en-US,en;q=0.5\r\n
Accept-Language:客户端支持的语言,优先 en-US(美式英语),其次 en。
Connection: keep-alive\r\n
Connection:连接方式。
keep-alive:保持长连接,复用 TCP 连接,提升效率。
close(如果是)表示请求完成后关闭连接。
\r\n
空行:分隔 请求头部 和 请求体。
GET 请求一般没有请求体。
3. HTTP 响应报文
HTTP/1.1 200 OK\r\n
Date: Mon, 25 Aug 2025 06:14:56 GMT\r\n
Content-Type: text/html;charset=utf-8\r\n
Server: openresty\r\n
Vary: Accept-Encoding\r\n
Vary: Origin\r\n
Vary: Access-Control-Request-Method\r\n
Vary: Access-Control-Request-Headers\r\n
Trace-Id: 15e6e7862abd49fdb1c327a6dbeb200d.10490.17561024969448219\r\n
Data-Source:\r\n
X-Content-Type-Options: nosniff\r\n
X-XSS-Protection: 0\r\n
S-REQ-ID: 17348448226369344247\r\n
S-REQ-TYPE: 0\r\n
X-Cache-Lookup: Cache Miss\r\n
Content-Encoding: gzip\r\n
Cache-Control: no-cache\r\n
Transfer-Encoding: chunked\r\n
X-NWS-LOG-UUID: 17348448226369344247\r\n
Connection: keep-alive\r\n
X-Cache-Lookup: Cache Miss\r\n
\r\n
<!DOCTYPE html>
<html>
<head>
<script>
if(window&&window.performance&&typeof window.performance.now==='function'){!window.MptcfePerf?window.MptcfePerf={headst:+new Date()}:window.MptcfePerf.headst=+new Date()
}
</script>
<meta charset=utf-8>
<meta http-equiv=X-UA-Compatible content="IE=edge">
<meta http-equiv=x-dns-prefetch-control content=on>
<meta name
3.1HTTP 响应报文分析
HTTP/1.1 200 OK\r\n
HTTP/1.1:协议版本。
200 OK:状态码 + 状态描述,表示请求成功。
Date: Mon, 25 Aug 2025 06:14:56 GMT\r\n
Date:服务器生成响应的时间(GMT)。
Content-Type: text/html;charset=utf-8\r\n
Content-Type:响应内容的类型(这里是 HTML),编码方式为 UTF-8。
Server: openresty\r\n
Server:服务器软件信息(这里是 openresty)。
Vary: Accept-Encoding\r\n
Vary: Origin\r\n
Vary: Access-Control-Request-Method\r\n
Vary: Access-Control-Request-Headers\r\n
Vary:缓存相关头部,表示缓存时需考虑不同的请求头差异。
Trace-Id: 15e6e7862abd49fdb1c327a6dbeb200d.10490.17561024969448219\r\n
Trace-Id:请求跟踪 ID,方便排查问题。
Data-Source:\r\n
Data-Source:可能是内部使用的字段,这里没有值。
X-Content-Type-Options: nosniff\r\n
X-Content-Type-Options:安全相关,阻止浏览器 MIME 类型猜测。
X-XSS-Protection: 0\r\n
X-XSS-Protection:是否启用 XSS 防护(0 = 关闭)。
S-REQ-ID: 17348448226369344247\r\n
S-REQ-TYPE: 0\r\n
S-REQ-ID / S-REQ-TYPE:服务器自定义字段,用于内部请求标记。
X-Cache-Lookup: Cache Miss\r\n
X-Cache-Lookup:缓存命中情况,这里是未命中(Miss)。
Content-Encoding: gzip\r\n
Content-Encoding:传输时采用 gzip 压缩。
Cache-Control: no-cache\r\n
Cache-Control:缓存控制,这里禁止缓存。
Transfer-Encoding: chunked\r\n
Transfer-Encoding:分块传输编码,适合动态内容。
X-NWS-LOG-UUID: 17348448226369344247\r\n
X-NWS-LOG-UUID:日志追踪 ID。
Connection: keep-alive\r\n
Connection:响应后的 TCP 连接状态,这里保持长连接。
\r\n
空行:分隔 响应头部 和 响应体。
<!DOCTYPE html><html><head>...
响应体:实际的网页 HTML 内容。