参考: cyc2018
下面是在浏览器中输入url请求页面可能经历的过程:
1. DHCP配置主机信息
- 假设主机最开始没有IP地址以及其他信,那么就需要先使用DHCP来获取。
- 主机生成一个DHCP请求报文(应用层),并将这个报文放入具有目的端口67和源端口68的UDP报文中(传输层)。
- 该报文段被放入在一个具有目的地址255.255.255.255,即广播地址,源IP地址0.0.0.0的IP数据报中(网络层)。
- 该数据报则被放置在以太网帧中,该帧具有目的地址FF:FF:FF:FF:FF:FF,将广播到与交换机连接的所有设备。
- 连接在交换机的DHCP服务器受到广播帧后,不断地向上分解得到IP数据段、UDP数据段、DHCP请求报文;DHCP服务器生成DHCP ACK报文,该报文包含信息有:IP地址、DNS服务器的IP地址、默认网关路由器的IP地址和子网掩码。该报文被放入UDP报文段中,UDP报文段被放入IP数据报中,最后被放入MAC帧中。
- 该帧的目的地址是请求主机的MAC地址,因为交换机有自主学习能力,之前主机发送了广播帧时,交换机就记录了MAC地址到其转发接口的交换表项,因此现在交换机可以直接指导应该向哪个接口发送该帧。
- 主机收到该帧后,不断分解得到DHCP报文。之后就配置它的IP地址、子网掩码和DNS服务器的IP地址,并在其IP转发表中安装默认网关。
注意上面没有涉及到任何路由器,只涉及到交换机:
主机生成DHCP请求报文——>封装——>交换机学习到主机的MAC地址及转发端口——>连接在交换机的DHCP服务器收到帧——>解封装——>生成DHCP ACK报文,报文中有IP地址等信息,目的MAC地址是主机——>封装——>交换机从之前学习到的内容确定转发端口——>主机收到DHCP ACK报文,从中获取IP地址等信息。
2.ARP解析ARP地址
- 主机通过浏览器生成一个TCP套接字,套接字向HTTP服务器发送HTTP请求。为了生成该套接字,主机需要知道网站的域名对应的IP地址。
- 主机生成一个DNS查询报文,该报文具有53号端口,因为DNS服务器的端口是53(传输层)。
- 该DNS查询报文被放入IP数据报中,目的地址为DNS服务器的IP地址。
- 上述IP数据报被放入以太网帧中,该帧将被发送到网关路由器中。
- DHCP构成只获取了网关路由器的IP,但未知其MAC地址,因此需要ARP协议。
- 主机生成一个包含目的地址为为网关路由器IP地址的ARP查询报文,放入目的IP地址是网关路由器的IP地址的IP数据报中。
- 将上述IP数据报放入一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将会广播该帧,包括网关路由器。
- 网关路由器受到该帧后,不断向上分解得到ARP报文,发现其中的IP地址与其接口的IP地址匹配,因此发送一个ARP应答报文,其中包含了它的MAC地址。
3. DNS解析域名
- 主机是递归查询,DNS服务器是迭代查询
- 知道了网关路由器的MAC地址之后,就可以继续DNS的解析过程了。
- 住进发送DNS报文,网关路由器收到以后,解封装到网络层,获取目的IP地址(DNS服务器的地址)决定要转发的下一个路由器。
- 因为路由器具有内部网关协议(RIP、OSPF)和外部网关协议(BGP)这两种路由选择协议,因此路由表中已经配置了网关路由器到达DNS服务器的路由表现。
- 到达DNS服务器后,DNS服务器抽取出其中的查询报文,通过迭代查询找到对应的IP地址。
- 找到DNS记录之后,发送DNS应答报文,该报文放到UDP报文段中,封装然后转发到主机。