# 生成 HTTP 请求消息
输入网址
浏览器解析 URL
生成 HTTP 请求信息
收到响应
状态码 含义 1** 告知请求的处理进度和情况 2** 成功 3** 表示需要进一步操作 4** 客户端错误 5** 服务端错误
# 向 DNS 服务器查询 Web 服务器的 IP 地址
- Socket 库提供查询 IP 地址的功能
- 通过解析器向 DNS 服务器发出查询
# 全世界 DNS 服务器的大接力
- 寻找相应的 DNS 服务器并获取 IP 地址
- 通过缓存加快 DNS 服务器的响应
# 委托协议栈发送消息
协议栈通过 TCP 协议收发数据的操作
# 创建套接字
- 浏览器,邮件等一般的应用程序收发数据时用 TCP
- DNS 查询等手法较短的控制数据时用 UDP
# 连接服务器
浏览器调用 Socket.connect
- 在 TCP 模块处创建表示连接控制信息的头部
- 通过 TCP 头部中的发送方和接收方端口号找到要连接的套接字
# 收发数据
浏览器调用 Socket.write
将 HTTP 请求消息交给协议栈
对焦的数据进行拆分,拆分的每一块数据加上 TCP 头,由 IP 模块来发送
使用 ACK 号确认网络包已收到
根据网络包平均往返时间调整 ACK 号等待时间
使用窗口有效管理 ACK 号
ACK 和窗口合并
接收 HTTP 响应消息
# 断开管道并删除套接字
浏览器调用 Socket.close
数据发送完毕后断开连接
删除套接字
- 客户端发送 FIN
- 服务端返回 ACK 号
- 服务端发送 FIN
- 客户端返回 ACK 号
← 对称加密和非对称加密.md 网络协议.md →