本文仅作为学习笔记记录,内容可能不是很完整。
假设有一台局域网电脑对 http://www.baidu.com 这个ip地址发起get请求。
局域网电脑网络设置如下:
- IP:192.168.1.10
- 子网掩码: 255.255.255.0
- 网关:192.168.1.1
- DNS:8.8.8.8
具体流程如下:
1. 使用DNS协议,像8.8.8.8发起请求查询www.baidu.com对应的ip地址为:39.156.66.14
2. 判断目的ip和本机ip是否同一个局域网:
1. 求本机的网络号: 192.168.1.10 & 255.255.255.0 = 192.168.1.0
2. 求目的IP的网络号:39.156.66.14 & 255.255.255.0 = 39.156.66.0
3. 显然 192.168.1.0 != 39.156.66.0 ,因此不在同一个局域网
3. 操作系统构造IP报文,目的IP填写39.156.66.14。因为经过上述判断,目的IP与本机IP不在同一个局域网,因此IP报文中的目的MAC地址字段填写网关(192.168.1.1)的MAC地址。(如果目的IP与本机IP在同一个局域网,则目的MAC地址填写目的IP的MAC地址。 MAC地址可通过ARP协议获取)
4. 网卡发送数据报文,数据报文到达交换机。
5. 交换机工作在OSI模型第二层数据链路层,其只针对MAC地址进行数据转发,而不认识IP地址。收到数据包后,根据路由表,查询目的MAC对应的转发端口然后进行转发。如果无法查询到目的端口,则向除了此数据接收端口以外的所有端口广播此数据。
6. 数据经过交换机转发(有可能是N个交换机级联转发),最终来到了路由器(网关192.168.1.1)。路由器工作在OSI模型第三层,可以识别IP地址。路由器按照一定的规则根据路由表判断下一跳地址,按照最长网络号匹配原则进行数据转发。(转发前会更新ip数据包中的目的MAC地址以适应后续的链路层传输)。如果路由表中无法匹配到目标端口,则会向默认路由端口进行转发。
7. 数据包经过层层转发,最终到达百度服务器。