计网2.2 键入网址到网页显示,期间发生了什么?

  • 浏览器做的第一步工作是解析 URL,浏览器确定了 Web 服务器和文件名,接下来就是根据这些信息来生成 HTTP 请求消息,然后委托操作系统将消息发送给 Web 服务器
  • 下一步是通过DNS 服务器查询服务器域名对应的 IP 地址,整个过程就和日常生活中找人问路的过程类似,只指路不带路;浏览器缓存 -> 系统本地缓存 -> host文件 -> 本地DNS -> 根DNS -> 顶级域名服务器(.com) -> 权威域名服务器
  • 然后应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCPUDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作
    • TCP 的连接状态查看,在 Linux 可以通过 netstat -napt 命令查看
  • 协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的
    • 根据路由表规则,来判断哪一个网卡作为源地址 IP,在 Linux 操作系统,可以使用 route -n 命令查看当前系统的路由表
  • 生成了 IP 头部之后,接下来网络包还需要在 IP 头部的前面加上 MAC 头部。MAC 头部是以太网使用的头部,它包含了接收方和发送方的 MAC 地址等信息,在 MAC 包头里需要发送方 MAC 地址接收方目标 MAC 地址,用于两点之间的传输
    • 接收方的 MAC 地址需要 ARP 协议帮我们找到路由器的 MAC 地址,ARP 协议会在以太网中以广播的形式,对以太网所有的设备进行查找MAC地址操作;在后续操作系统会把本次查询结果放到一块叫做 ARP 缓存的内存空间留着以后用,不过缓存的时间就几分钟
  • 网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程;负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序
    • 网卡驱动获取网络包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列
  • 交换机的设计是将网络包原样转发到目的地。交换机工作在 MAC 层,也称为二层网络设备交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口
    • 当地址表中找不到指定的 MAC 地址时,只能将包转发到除了源端口之外的所有端口上,只有相应的接收者才接收包,而其他设备则会忽略这个包
  • 网络包经过交换机之后,现在到达了路由器,并在此被转发到下一个路由器或目标设备。这一步转发的工作原理和交换机类似,也是通过查表判断包转发的目标
    • 路由器是基于 IP 设计的,俗称三层网络设备,路由器的各个端口都具有 MAC 地址和 IP 地址;检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包
    • 完成包接收操作之后,路由器就会去掉包开头的 MAC 头部。MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,当包到达路由器之后,MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃。接下来,路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作
      • 首先是查询路由表判断转发目标
      • 根据路由表的网关列判断对方的地址进入包的发送操作
    • 源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC 地址在以太网内进行两个设备之间的包传输
  • 数据包抵达服务器后,服务器会先扒开数据包的 MAC 头部,查看是否和服务器自己的 MAC 地址符合,符合就将包收起来。接着继续扒开数据包的 IP 头,发现 IP 地址符合,根据 IP 头中协议项,知道自己上层是 TCP 协议。于是,扒开 TCP 的头,里面有序列号,需要看一看这个序列包是不是我想要的,如果是就放入缓存中然后返回一个 ACK,如果不是就丢弃。TCP头部里面还有端口号, HTTP 的服务器正在监听这个端口号。于是,服务器自然就知道是 HTTP 进程想要这个包,于是就将包发给 HTTP 进程。服务器的 HTTP 进程看到,原来这个请求是要访问一个页面,于是就把这个网页封装在 HTTP 响应报文里。HTTP 响应报文也需要穿上 TCP、IP、MAC 头部,不过这次是源地址是服务器 IP 地址,目的地址是客户端 IP 地址

参考资料:小林coding
链接:https://www.xiaolincoding.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值