一个http请求是如何到达目的地的
1.程序构造一个http请求:
请求行:GET PATHHTTP/1.1
请求头 referer cache cookie user-agent host
请求体
2.构造TCP请求:
请求头: 源程序端口(浏览器端口),目的端口80(http默认是80)
请求体: http请求(在下图的数据里面)
3.构造IP请求:
请求头: 本机IP地址,[DNS解析]*返回的目标IP地址
请求体: TCP请求
4.1 根据子网掩码判断,如果目标IP在同一个子网,则通过[ARP协议]*广播获取目标IP的MAC地址,通过mac地址构造以太网请求广播到目标机器。
192.168.0.1
192.168.0.2
255.255.255.0
4.2 如果不在同一个子网,则通过[ARP协议]*广播获取默认网关IP的MAC地址,通过mac地址构造以太网请求广播到网关。
4.3 构造以太网请求:
请求头: 本机mac地址,目标mac地址
请求体: IP请求
4.4.网关通过路由表发给下一个网段的网关,直至找到目标机器所在的子网网关,再由该网关通过以太网协议广播到目标机器。
*.DNS解析www.baidu.com对应的ip地址:
(1)检查本地host文件,没有则下一步
(2)检查本地DNS缓存,没有则下一步
(3)请求本机配置的首选DNS服务器(若没有配置,一般继承路由器DNS服务器的配置),没有则下一步
(4)首选DNS服务器转发请求给上一级DNS服务器,直至根DNS服务器,没有则无法解析该域名。
*ARP获取ip对应的mac地址:将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址
延伸:
1.交换机,集线器,网桥是什么?
三者作用一样,用于扩展二层广播网络。
2.vlan,xvlan是什么?
通过网络协议标记的方式将物理上本属于同一个子网的流量划分成多个子网。xvlan是vlan的升级版。
3.路由器的内网地址是如何与外网连接的?
通过NAT协议(网络地址转换),子网IP+源端口,映射成路由器公网IP+路由端口。如此便可实现多子网ip映射到一个公网ip+多个端口上,实现同时上网。
4.VPN和代理有什么区别:
代理,通常是http代理,只对http协议生效,配置http代理后,本应发给目标地址的请求改成发给代理服务器,委托代理服务器帮你请求并将目标服务器的响应原样返回给你。
VPN,虚拟私人网络,对二层网络生效,比http代理更彻底。其原理是隧道协议,简单理解就是将本机所有的以太网请求等二层网络包,装进三层数据包中,发给vpn,委托vpn拆开解析并广播二层网络包,以此实现远程直连的错觉。