五、计算机网络
TCP 三次握手
TCP 三次握手流程
第一次
客户端发送:
text
SYN
作用:
- 请求建立连接
- 发送初始序列号
第二次
服务端回复:
text
SYN + ACK
作用:
- 确认客户端请求
- 发送自己的序列号
第三次
客户端发送:
text
ACK
作用:
- 确认收到服务端响应
三次握手作用
一、同步序列号
保证:
- 后续数据有序传输
二、防止历史连接
避免:
- 旧 SYN 导致资源浪费
为什么不能两次握手
问题:
- 服务端无法确认客户端是否收到 ACK
结果:
- 可能建立无效连接
TCP 四次挥手
TCP 四次挥手流程
第一次
客户端发送:
text
FIN
表示:
- 不再发送数据
第二次
服务端回复:
text
ACK
表示:
- 收到关闭请求
第三次
服务端发送:
text
FIN
表示:
- 数据发送完成
第四次
客户端回复:
text
ACK
然后进入:
text
TIME_WAIT
为什么是四次挥手
原因:
- TCP 是全双工
特点:
- 两个方向独立关闭
为什么不能三次
因为:
- 服务端收到 FIN 时
- 可能还有数据没发送完
所以:
- ACK 和 FIN 不能合并
TIME_WAIT
TIME_WAIT 作用
一、保证最后 ACK 到达
如果 ACK 丢失:
- 服务端会重发 FIN
客户端必须还能响应。
二、防止旧报文影响新连接
等待:
text
2MSL
保证:
- 网络中的旧报文全部消失
为什么等待 2MSL
第一原因
确保:
- 服务端能收到最后 ACK
第二原因
防止:
- 延迟报文污染新连接
HTTP 请求头和响应头
题目 2:HTTP 请求头和响应头的结构
一、HTTP 请求结构
请求格式
http
<method> <path> <version>
<headers>
<body>
请求示例
http
POST /api/user HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Content-Type: application/json
Content-Length: 27
Authorization: Bearer xxxxx
{"name":"张三","age":25}
二、HTTP 响应结构
响应格式
http
<version> <statusCode> <statusText>
<headers>
<body>
响应示例
http
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 52
Cache-Control: no-cache
Set-Cookie: sessionId=abc123
{"code":200,"message":"success","data":{}}
三、常见请求头
| 请求头 | 作用 |
|---|---|
| Host | 指定服务器域名 |
| User-Agent | 客户端信息 |
| Content-Type | 请求体格式 |
| Authorization | 认证信息 |
| Cookie | 会话信息 |
四、常见响应头
| 响应头 | 作用 |
|---|---|
| Content-Type | 响应体格式 |
| Content-Length | 响应体长度 |
| Set-Cookie | 设置 Cookie |
| Cache-Control | 缓存策略 |
| Location | 重定向地址 |
HTTP 状态码
题目 3:常见 HTTP 响应码 + 502/504 区别
一、HTTP 状态码分类
| 分类 | 范围 | 含义 | 示例 |
|---|---|---|---|
| 1xx | 100~199 | 信息响应 | 100 Continue |
| 2xx | 200~299 | 成功 | 200 OK、201 Created |
| 3xx | 300~399 | 重定向 | 301、302、304 |
| 4xx | 400~499 | 客户端错误 | 400、401、403、404 |
| 5xx | 500~599 | 服务端错误 | 500、502、504 |
二、502 和 504 区别
| 状态码 | 含义 | 场景 | 本质 |
|---|---|---|---|
| 502 Bad Gateway | 网关收到无效响应 | 后端挂了/返回异常 | 上游不可用 |
| 504 Gateway Timeout | 网关等待超时 | 后端响应太慢 | 上游超时 |
三、形象理解
502
你给 A 打电话:
- A 接了
- 但胡言乱语
- 或者直接挂断
本质:
- 上游服务异常
504
你给 A 打电话:
- 一直响铃
- 没人接
本质:
- 上游服务超时
502 场景
- 后端服务挂掉
- Nginx 无法建立连接
- 返回 502
504 场景
- 后端处理超过 60 秒
- Nginx 等待超时
- 返回 504
WebSocket
题目 3:WebSocket 用途
一、WebSocket 是什么
特点:
- 全双工通信协议
能力:
- 服务端主动推送消息
解决:
- HTTP 单向通信问题
二、典型场景
- 即时通讯
- 网约车位置推送
- 股票行情
- 协同编辑
- 游戏对战