当前位置: 首页 > article >正文

【键入网址到网页显示】

文章目录

    • HTTP
    • DNS
    • 五层协议
    • TCP
    • IP
    • MAC
    • 网卡(物理层)
    • 交换机
    • 路由器

HTTP

  • 对 URL 进行解析之后,浏览器确定了 Web 服务器和文件名,接下来就是根据这些信息来生成 HTTP 请求消息了。
    在这里插入图片描述
http://www.server.com/dir1/file1.html
'http:访问数据的协议'
'www.server.com:服务器'
'dir1:目录名'
'file1.html:文件名'

生产 HTTP 请求信息

在这里插入图片描述

DNS

  • 查询服务器域名对应的 IP 地址。比如 www.server.com(域名),这里的句点代表了不同层次之间的界限。在域名中,越靠右的位置表示其层级越高。
  • 所以域名的层级关系类似一个树状结构:
    • 根 DNS 服务器(.)
    • 顶级域 DNS 服务器(.com)
    • 权威 DNS 服务器(server.com)
  • 根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中。这样一来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。
    在这里插入图片描述

域名解析的工作流程

  1. 客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。
  2. 本地域名服务器收到客户端的请求后,如果缓存里的表格能找到 www.server.com,则它直接返回 IP 地址。如果没有,本地 DNS 会去问它的根域名服务器:“老大, 能告诉我 www.server.com 的 IP 地址吗?” 根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。
  3. 根 DNS 收到来自本地 DNS 的请求后,发现后置是 .com,说:“www.server.com 这个域名归 .com 区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”
  4. 本地 DNS 收到顶级域名服务器的地址后,发起请求问“老二, 你能告诉我 www.server.com 的 IP 地址吗?”
  5. 顶级域名服务器说:“我给你负责 www.server.com 区域的权威 DNS 服务器的地址,你去问它应该能问到”。
  6. 本地 DNS 于是转向问权威 DNS 服务器:“老三,www.server.com对应的IP是啥呀?” server.com 的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。
  7. 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
  8. 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。

每次解析域名都要经过那么多的步骤呢?

  • 浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。

五层协议

  • 通过 DNS 获取到 IP 后,就可以把 HTTP 的传输工作交给操作系统中的协议栈。
    在这里插入图片描述

  • 应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。

  • 协议栈的下面一半是用 IP 协议控制网络包收发操作, IP 中还包括 ICMP 协议和 ARP 协议。

    • ICMP 用于告知网络包传送过程中产生的错误以及各种控制信息。
    • ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。
  • IP 下面的网卡驱动程序负责控制网卡硬件,而最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作。

TCP

HTTP 是基于 TCP 协议传输的。
在这里插入图片描述

  • 源端口号和目标端口号主要表明发送给哪一个应用上的
  • 序号:这个是为了解决包乱序的问题。
  • 确认号:目的是确认发出去对方是否有收到。如果没有收到就应该重新发送,直到送达,这个是为了解决丢包的问题。
  • 状态位:例如 SYN 是发起一个连接,ACK 是回复,RST 是重新连接,FIN 是结束连接等。TCP 是面向连接的,因而双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更。
  • 窗口大小:TCP 要做流量控制,通信双方各声明一个窗口(缓存大小),标识自己当前能够的处理能力,别发送的太快,也别发的太慢。
  • 拥塞控制:对于真正的通路堵车不堵车,它无能为力,唯一能做的就是控制自己,也即控制发送的速度。

TCP 传输数据之前,要先三次握手建立连接

  • 三次握手目的是保证双方都有发送和接收的能力。
  • TCP 的连接状态查看,在 Linux 可以通过 netstat -napt 命令查看。
  • route -n 命令查看当前系统的路由表。
  • arp -a 命令来查看 ARP 缓存的内容。在这里插入图片描述

流程

  • 客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态。
  • 然后客户端主动发起连接 SYN,之后处于 SYN-SENT 状态。
  • 服务端收到发起的连接,返回 SYN,并且 ACK 客户端的 SYN,之后处于 SYN-RCVD 状态。
  • 客户端收到服务端发送的 SYN 和 ACK 之后,发送对 SYN 确认的 ACK,之后处于 ESTABLISHED 状态,因>为它一发一收成功了。
  • 服务端收到 ACK 的 ACK 之后,处于 ESTABLISHED 状态,因为它也一发一收了。

TCP 分割数据
在这里插入图片描述

  • MTU:一个网络包的最大长度,以太网中一般为 1500 字节。
  • MSS:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度。

IP

在这里插入图片描述

  • IP 协议里面需要有源地址 IP 和 目标地址 IP:
    • 源地址IP,即是客户端输出的 IP 地址;
    • 目标地址,即通过 DNS 域名解析得到的 Web 服务器 IP。
  • 当客户端有多个网卡时,就会有多个IP地址,此时需要通过路由表规则,来判断哪一个网卡作为源地址的IP
  • 目标IP与子网掩码与操作获取网络号,然后查路由表
    在这里插入图片描述
  • 首先先和第一条目的子网掩码(Genmask)进行 与运算,得到结果为 192.168.10.0,但是第一个条目的 Destination 是 192.168.3.0,两者不一致所以匹配失败。
  • Web 服务器的目标地址是 10.100.20.100,那么依然依照上面的路由表规则判断,判断后的结果是和第三条目匹配。
    在这里插入图片描述

IP报文生成
在这里插入图片描述

MAC

  • 在 MAC 包头里需要发送方 MAC 地址接收方目标 MAC 地址,用于两点之间的传输。还有协议类型
  • 一般在 TCP/IP 通信里,MAC 包头的协议类型只使用:
    • 0800 : IP 协议
    • 0806 : ARP 协议
  • 源MAC获取:网卡生产时写入到 ROM 里的
  • 目标MAC获取:ARP协议通过广播的形式获取
    • 后续操作系统会把本次查询结果放到一块叫做 ARP 缓存的内存空间留着以后用,不过缓存的时间就几分钟。

生成MAC地址
在这里插入图片描述

网卡(物理层)

  • 网络包只是存放在内存中的一串二进制数字信息,需要将数字信息转换为电信号,才能在网线上传输
  • 负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序。
  • 网卡驱动获取网络包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。
    在这里插入图片描述
  • 起始帧分界符是一个用来表示包起始位置的标记
  • 末尾的 FCS(帧校验序列)用来检查包传输过程是否有损坏

交换机

  • 电信号到达网线接口,交换机里的模块进行接收,将交换机里的模块将电信号转换为数字信号。
  • 然后通过包末尾的 FCS 校验错误,如果没问题则放到缓冲区(这部分操作基本和计算机的网卡相同,但交换机的工作方式和网卡不同。
  • 不同点:
    • 计算机的网卡本身具有 MAC 地址,并通过核对收到的包的接收方 MAC 地址判断是不是发给自己的,如果不是发给自己的则丢弃;相对地,交换机的端口不核对接收方 MAC 地址,而是直接接收所有的包并存放到缓冲区中。因此,和网卡不同,交换机的端口不具有 MAC 地址。

交换机作用

  • 交换机使用MAC地址来实现数据包的转发。交换机维护一个MAC地址表,记录每个设备的MAC地址和它所连的端口,当收到一个数据包时,交换机会查找MAC地址表,将数据包转发到目标设备所在的端口。因此,交换机在数据链路层使用MAC地址来实现局域网内设备之间的通信。
  • 交换机的 MAC 地址表主要包含两个信息:
    • 一个是设备的 MAC 地址,
    • 另一个是该设备连接在交换机的哪个端口上。
      在这里插入图片描述

当 MAC 地址表找不到指定的 MAC 地址会怎么样?

  • 交换机无法判断应该把包转发到哪个端口,只能将包转发到除了源端口之外的所有端口上,无论该设备连接在哪个端口上都能收到这个包。

会不会出现网络拥塞?

  • 只有相应的接收者才接收包,而其他设备则会忽略这个包。
  • 而且发送了包之后目标设备会作出响应,只要返回了响应包,交换机就可以将它的地址写入 MAC 地址表,下次也就不需要把包发到所有端口了。

路由器

  • 路由器和交换机原理类似,也是通过查表判断包转发的目标。
  • 路由器和交换机区别。
    • 因为路由器是基于 IP 设计的,俗称三层网络设备,路由器的各个端口都具有 MAC 地址和 IP 地址;
    • 而交换机是基于以太网设计的,俗称二层网络设备,交换机的端口不具有 MAC 地址。

流程

路由器工作原理

  • 当转发包时,首先路由器端口会接收发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。

路由器的包接收操作

  • 电信号到达网线接口部分,路由器中的模块会将电信号转成数字信号,然后通过包末尾的 FCS 进行错误校验。
  • 如果没问题则检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包。

查询路由表确定输出端口

  • 完成包接收操作之后,路由器就会去掉包开头的 MAC 头部。路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作。
  • 通过路由表查询转发的目标
    在这里插入图片描述
    例子:
  • 10.10.1.101 的计算机要向地址为 192.168.1.100 的服务器发送一个包
    • 每个条目的子网掩码和 192.168.1.100 IP 做 & 与运算后得到结果是 192.168.1.0 ,这与第二条目的目标地址 192.168.1.0 匹配,该第二条目记录就会被作为转发目标。
  • 实在找不到匹配路由时,就会选择默认路由,路由表中子网掩码为 0.0.0.0 的记录表示「默认路由」

路由器的发送操作

  • 根据路由表的网关列判断对方的地址。
    • 如果网关是一个 IP 地址,则这个IP 地址就是我们要转发到的目标地址,还未抵达终点,还需继续需要路由器转发。
    • 如果网关为空,则 IP 头部中的接收方 IP 地址就是要转发到的目标地址,也是就终于找到 IP 包头里的目标地址了,说明已抵达终点。
  • 知道对方的 IP 地址之后,接下来需要通过 ARP 协议根据 IP 地址查询 MAC 地址,并将查询的结果作为接收方 MAC 地址。
  • 发送出去的网络包会通过交换机到达下一个路由器。由于接收方 MAC 地址就是下一个路由器的地址,所以交换机会根据这一地址将包传输到下一个路由器。

源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC 地址在以太网内进行两个设备之间的包传输。

文章参考:https://xiaolincoding.com/


http://www.kler.cn/a/17956.html

相关文章:

  • react 中 useContext Hook 作用
  • 贪心算法day03(最长递增序列问题)
  • HTTP常见的请求头有哪些?都有什么作用?在 Web 应用中使用这些请求头?
  • neo4j desktop基本入门
  • 远离生成式AI大乱斗,SAS公司揭示亚太区千亿AI市场蓝图
  • 十三、注解配置SpringMVC
  • asp.net+sqlserver社区居民健康档案管理系统
  • InsCode体验报告
  • Axios概述
  • 冀永楠:OCR技术的应用与发展
  • Winform从入门到精通(36)——ColorDialog(史上最全)
  • 五音不全?手把手教你用自己声音唱任何歌;最详细的Auto-GPT整理;4月AI绘画模型推荐;HayoAI平台简直太酷了 | ShowMeAI日报
  • 错题本——数据库系统工程师 2022
  • 大家都去荷兰注册公司到底是为了什么?
  • MySQL数据库——MySQL修改和删除索引(DROP INDEX)
  • 后端程序员的前端必备【Vue】 - 07 ES6新语法
  • 测试20K要什么水平?25岁测试工程师成功斩下offer(附面试题)
  • 校园网自动登陆(河南科技学院)
  • cartographer源码阅读---位姿推测器
  • 榜单!直接式TPMS前装搭载率突破60%,哪些厂商在领跑
  • 2008-2020年上市公司能源消耗数据
  • MySQL知识学习06(SQL语句在MySQL中的执行过程)
  • 使用循环数组和环形链表实现双端队列
  • PVE 安装 windows10
  • 三十、组播技术——IGMP、IGMP-snooping、PIM-DM、PIM-SM
  • LiveData详解(实战+源码+粘性事件解决方案)