简单讲讲一次http请求中的网络流程
# 引言
平时无论是生活,还是工作中。我们浏览网页都逃不开一个个的http请求,同时在面试上也经常会被问及:简单说说一次http请求的整个流程?下面也是基于这个点,结合已掌握的知识,这里把相关的流程简单讲一下。
# 1. 获取IP
- 静态配置
- 动态配置(DHCP)
后续续约流程重复流程3、4即可。
# 2. 域名解析
浏览器缓存->系统缓存【本地dns解析】->请求dns服务器
思考题:
dns用途:
- 域名解析
- 负载均衡【内部&全局(GSLB)运营商+地域等】
传统dns协议VS httpdns
- 缓存问题
- 域名转发
- 出口NAT问题
- 域名更新
- 延迟问题
# 3. 判断目标机器是否在同一个局域网内
CIDR网络无类型域间选路(CIDR) 例如:10.100.122.2/24 网段:10.100.122.2 广播地址:10.100.122.255 子网掩码:255.255.255.0
思考题
- 跨网段的请求,应该要怎么发起? 如果这是一个跨网段的调用,它便不会直接将包发送到网络上,而是企图将包发送到网关。
# 4. 获取网关MAC地址
ARP协议
- 思考题:
- mac层用来解决什么问题的?
- 多个交换机arp会出现什么问题,怎么解决?【环路】
# 5. TCP链接
- 思考题:
- 为什么需要三次握手?
- 握手除了建立连接,还做了哪个比较重要的事情?
# 6. 构建报文
发起请求的第一步,应该是构建需要发出去的报文,基于网络5层协议,当我们准备发出一个HTTP报文的时候,整个报文的构建应该是基于网络协议自顶向下进行构建的。
以一个简单的http报文为例,首先他应该是先构建HTTP报文
- 应用层:http请求报文构建
- 运输层:数据报
网络层:ip帧 ``
数据链路层:MAC帧
- 物理层:二进制流
整体包:
# 7. 报文在网络中应该如何转发
# - 无nat模式
服务器A发送请求到服务器B包内容应依序为:
序号 | 源ip | 源mac | 目标ip | 目标mac | 备注 |
---|---|---|---|---|---|
1 | 192.168.1.101 | 服务器A的mac地址 | 192.168.4.101 | 网关192.168.1.1的mac地址 | 网段不同,修改mac地址发到网关 |
2 | 192.168.1.101 | 192.168.56.1的mac地址 | 192.168.4.101 | 网关192.168.56.2的mac地址 | 查询本机路由表,下一跳为192.168.56.2的交换机,arp查询该机器mac地址 |
3 | 192.168.1.101 | 网关192.168.4.1的mac地址 | 192.168.4.101 | 服务器B的mac地址 | 查询路由表或arp,转发到目标服务器B |
# - 有nat模式
局域网之间无协商,各定各的网段,存在ip段冲突。
服务器A发送请求到服务器B包内容应依序为:
序号 | 源ip | 源mac | 目标ip | 目标mac | 备注 |
---|---|---|---|---|---|
1 | 192.168.1.101 | 服务器A的mac地址 | 192.168.56.2 | 网关192.168.1.1的mac地址 | 网段不同,修改mac地址发到网关 |
2 | 192.168.56.1 | 192.168.56.1的mac地址 | 192.168.56.2 | 网关192.168.56.2的mac地址 | 修改源ip,以交换机ip发送请求到网关192.168.56.2 nat过程中,网络包从局域网转发时,需要变更源ip,否则无法确认身份 |
3 | 192.168.56.1 | 网关192.168.1.1的mac地址 | 192.168.1.101 | 服务器B的mac地址 | 网关根据NAT配置,来源ip是192.168.56.2的通通转发到服务器B |
- 思考题:
- 以上介绍的nat方式是使用中间局域网身份方式进行映射,那么存在ip耗尽的危险,目前是如何规避的呢?【NAPT】
# 8. 路由转发
第7点关于路由跳转描述都是很简单的场景(仅一条映射关系),但是在实际的网络世界上要复杂很多,一旦出了网关,会面临很多的路由,需要如何选择更快速的通道?
- 静态路由策略
- 动态路由策略
- 距离矢量算法【维护到任意路由的距离路由表,定期广播所有路由表】(BGP:外网路由协议)
- 收敛慢【包含路径解决】
- 发送需广播全部路由表【不适用于大型网络规模】
- 链路状态路由算法【根据收包的方式计算临近路由距离,可维护一个完整的图,然后使用Dijkstra算法计算最短路径】(OSPF:内部网关协议)
- 距离矢量算法【维护到任意路由的距离路由表,定期广播所有路由表】(BGP:外网路由协议)
# 扩展思考
读完上文,大家对发起一个请求协议在网络中的流转流程应该有了大致的了解,那么这里再简单拓展一下提问:
- 为什么有了ip还需要mac地址?
- https应该加上哪些流程?
- 移动设备的ip怎么获取的?
- 有哪些技术是用于服务端相应提升的?
- .............
# 参考文档
http协议文档: https://developer.mozilla.org/en-US/docs/Web/HTTP (opens new window) 极客时间课-趣谈网络协议:https://time.geekbang.org/column/intro/100007101 (opens new window)