风雨雾凇 风雨雾凇
首页
  • 服务端

    • golang
  • 其他

    • leetcode
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

风雨雾凇

技术小渣渣
首页
  • 服务端

    • golang
  • 其他

    • leetcode
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 简单讲讲一次http请求中的网络流程

风雨雾凇
2022-04-28
编程
目录

简单讲讲一次http请求中的网络流程

# 引言

平时无论是生活,还是工作中。我们浏览网页都逃不开一个个的http请求,同时在面试上也经常会被问及:简单说说一次http请求的整个流程?下面也是基于这个点,结合已掌握的知识,这里把相关的流程简单讲一下。

# 1. 获取IP

  • 静态配置
  • 动态配置(DHCP) DHCP流程

后续续约流程重复流程3、4即可。

# 2. 域名解析

浏览器缓存->系统缓存【本地dns解析】->请求dns服务器

dns解析流程

  • 思考题:

  • dns用途:

    • 域名解析
    • 负载均衡【内部&全局(GSLB)运营商+地域等】
  • 传统dns协议VS httpdns

    • 缓存问题
    • 域名转发
    • 出口NAT问题
    • 域名更新
    • 延迟问题 httpdns

# 3. 判断目标机器是否在同一个局域网内

  • CIDR网络无类型域间选路(CIDR) 例如:10.100.122.2/24 网段:10.100.122.2 广播地址:10.100.122.255 子网掩码:255.255.255.0

  • 思考题

    • 跨网段的请求,应该要怎么发起? 如果这是一个跨网段的调用,它便不会直接将包发送到网络上,而是企图将包发送到网关。

# 4. 获取网关MAC地址

ARP协议

arp协议

  • 思考题:
    • mac层用来解决什么问题的?
    • 多个交换机arp会出现什么问题,怎么解决?【环路】

# 5. TCP链接

三次握手流程

  • 思考题:
    • 为什么需要三次握手?
    • 握手除了建立连接,还做了哪个比较重要的事情?

# 6. 构建报文

发起请求的第一步,应该是构建需要发出去的报文,基于网络5层协议,当我们准备发出一个HTTP报文的时候,整个报文的构建应该是基于网络协议自顶向下进行构建的。

报文构建过程

以一个简单的http报文为例,首先他应该是先构建HTTP报文

  1. 应用层:http请求报文构建

http报文

  1. 运输层:数据报

tcp包

  1. 网络层:ip帧 `` ip帧

  2. 数据链路层:MAC帧

数据链路包

  1. 物理层:二进制流

整体包:

# 7. 报文在网络中应该如何转发

# - 无nat模式

无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段冲突。

有nat转发

服务器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:内部网关协议)

# 扩展思考

读完上文,大家对发起一个请求协议在网络中的流转流程应该有了大致的了解,那么这里再简单拓展一下提问:

  1. 为什么有了ip还需要mac地址?
  2. https应该加上哪些流程?
  3. 移动设备的ip怎么获取的?
  4. 有哪些技术是用于服务端相应提升的?
  5. .............

# 参考文档

http协议文档: https://developer.mozilla.org/en-US/docs/Web/HTTP (opens new window) 极客时间课-趣谈网络协议:https://time.geekbang.org/column/intro/100007101 (opens new window)

编辑 (opens new window)
#计算机网络#面试#计算机基础
上次更新: 2023/02/17, 16:53:03
最近更新
01
builtin
02-12
02
导读
02-12
03
13-罗马数字转整数
01-30
更多文章>
Theme by Vdoing | Copyright © 2017-2023 风雨雾凇 | 粤ICP备16018321号-2
博客内容遵循署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式