浏览器第一步 - 解析 URL
生成发给 Web 服务器的请求信息
http: 访问数据的协议
// : 后面的字符是服务器名字
/ : 数据源的路径
web 服务器配置文件中指定根 / - /var/www/html
请求行 | 方法 | sp | URL | sp | 版本 | cr | lf |
消息头 | 首部字段名 | sp | 字段值 | cr | lf | ||
... | |||||||
... | |||||||
cr | lf | ||||||
消息体 | data | ||||||
GET 请求报文 消息体数据为空
GET /path HTTP/1.1 Accept: "/"
POST 请求报文
POST /login HTTP/1.1 Accept: "/" { "name": "用户名" "password": "xxxx" }
状态行 | 版本 | sp | 状态码 | sp | 短语 | cr | lf |
消息头 | 首部字段名 | sp | 字段值 | cr | lf | ||
... | |||||||
... | |||||||
cr | lf | ||||||
消息体 | data | ||||||
HTTP/1.1 200 OK Content-Length: 1024 Content-Type: text/html <html> ... </html>
查询服务器域名对应的 IP 地址
保存 Web 服务器域名与 IP 对应关系
浏览器查询域名缓存,else if 查询操作系统缓存, else if 查看 hosts 文件, else 查询本地服务器
- 根 DNS 服务器 .
- 顶级域 DNS 服务器 .com
- 权威 DNS 服务器 server.com
从 any DNS 找到根域 DNS 服务器,再找到 any DNS 服务器
- TCP/IP 设置中回设置本地 DNS 服务器
完成 HTTP的传输工作
应用程序调用 socket 库,使协议栈工作
- 收发数据 TCP / UDP
-
IP 协议控制网络包收发操作
- ICMP: 告知网络包传送过程的错误与控制信息
- 根据IP地址查询以太网MAC地址,确定路由
- 驱动程序控制网卡
- 网卡完成网线中 信号发送和接收操作
源端口号 (16 bit) | 目的端口号 (16 bit) | ||||||
序号 (32 bit) | |||||||
确认序列 (32 bit) | |||||||
首部长度 (4 bit) | 保留 (6 bit) | URG / ACK / PSH / RST / SYN / FIN | 窗口大小 (16 bit) | ||||
校验和 (16 bit) | 紧急指针 (16 bit) | ||||||
选项 | |||||||
数据 |
TCP 模块在执行连接、收发、断开等阶段操作时,都需要委托 IP 模块将数据封装成 网络包 发送给通信对象
版本 (4 bit) | 首部长度 (4 bit) | 服务类型 TOS (8 bit) | |
总长度 (16 bit) | |||
标识 (16 bit) | |||
标志 (3 bit) | 片偏移 (13 bit) | ||
TTL (8 bit) | 协议 (8 bit) | ||
首部校验和 (16 bit) | |||
源 IP 地址 (32 bit) | |||
目标 IP 地址 (32 bit) | |||
选项 | |||
数据 data |
根据路由表规则,通过掩码选择对应源地址网卡
0.0.0.0 掩码 0.0.0.0 最后会发到路由器,即 gateway 路由器地址
有了 IP 报头,还需要 MAC 头部
接受方 MAC 地址 (48 bit) |
发送方 MAC 地址 (48 bit) |
协议类型 (16 bit) |
- 0800: IP 协议
- 0806: ARP 协议
查找路由表,把相应条目发给 gateway 列出的 IP 地址
或者用 ARP 协议,在以太网中广播,寻找目标 IP 的 MAC 地址
将内存中二进制数字信息,转换为电信号在网线上传播
需要网卡驱动程序 操作网卡
- 获取网络包
- 复制到网卡缓存区
- 在开头加上报头和起始帧分界符
- 在末尾加上用于检测错误的帧校验序列
为了将网络包原样转发到目的地,工作在 MAC 层
- 网线接口输入交换机
- 转换为数字信号,拖末尾的 FCS 没有错误,加入缓冲区
- 交换机不核对 MAC 地址,不具有 MAC 地址
-
查询接收方 MAC 地址是否已经在地址表中记录
- 设备的 MAC 地址
- 该设备在交换机哪个端口上 (MAC地址与网线端口映射表
-
如果找不到,就会发给所有端口(not 源端口)
- 广播地址 MAC: FF:FF:FF:FF:FF:FF IP: 255.255.255.255
路由器基于 IP,三层网络设备,每个端口都有MAC/IP地址
交换机基于以太网,二层网络设备,端口不具有MAC地址
路由器可以成为以太网 发送/接收方
路由表 查看转发目标,从响应端口发出
接收时检验是否是自己的MAC地址,确认发给自己
接收后回去掉MAC头部(MAC头部完成送达路由器的使命)
根据IP头部进行包的转发