温故知新输入网址显示网页到底到底到底到底发生了什么?

作者: ML李嘉图


目录

  • [键⼊⽹址到⽹⻚显示,期间发⽣了什么?]
  • [解析 URL]
  • ⽣成HTTP 请求信息
  • [DNS-域名解析]
  • [协议栈-传输]
  • [可靠传输-TCP]
    • [三次握⼿建⽴连接]
    • [TCP 分割数据]
    • [TCP 报⽂⽣成]
  • [远程定位-IP]
    • [IP报文生成]
  • [两点传输-MAC]
    • [MAC 发送⽅和接收⽅如何确认?]
    • [如何获取对⽅的 MAC 地址呢?]
  • [出⼝-⽹卡]
  • [送别者-交换机]
  • [出境⼤⻔-路由器]
  • [参考:图解网络]


键⼊⽹址到⽹⻚显示,期间发⽣了什么?

简易版-过程解析 ⽹络拓扑模型:

解析 URL

⾸先浏览器做的第⼀步⼯作就是要对 URL 进⾏解析,从⽽⽣成发送给 Web 服务器的请求信息。

⽣成HTTP 请求信息

DNS-域名解析

通过浏览器解析 URL 并⽣成 HTTP 消息后,需要委托操作系统将消息发送给 Web 服务器。

所以,有⼀种服务器就专⻔保存了 Web 服务器域名与 IP 的对应关系,它就是 DNS 服务器。 DNS 中的域名都是⽤句点来分隔的,⽐如 www.server.com ,这⾥的句点代表了不同层次之间的界限。

在域名中,越靠右的位置表示其层级越⾼。

根域的 DNS 服务器信息保存在互联⽹中所有的 DNS 服务器中。

这样⼀来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。

因此,客户端只要能够找到任意⼀台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再⼀路顺藤摸⽠到位于下层的某台⽬标 DNS 服务器。

协议栈-传输

通过 DNS 获取到 IP 后,就可以把 HTTP 的传输⼯作交给操作系统中的协议栈。

应⽤程序(浏览器)通过调⽤ Socket 库,来委托协议栈⼯作。

协议栈的上半部分有两块,分别是负责收发数据的TCP 和 UDP 协议,它们两会接受应⽤层的委托执⾏收发数据的操作。

协议栈的下⾯⼀半是⽤ IP 协议控制⽹络包收发操作,在互联⽹上传数据时,数据会被切分成⼀块块的⽹络包,将⽹络包发送给对⽅的操作就是由 IP 负责的。

此外 IP 中还包括 ICMP 协议和 ARP 协议。

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

可靠传输-TCP

  • 源端⼝号和⽬标端⼝号是不可少的
  • 序号,这个是为了解决包乱序的问题
  • 确认号,⽬的是确认发出去对⽅是否有收到
  • ⼀些状态位。例如 SYN 是发起⼀个连接, ACK 是回复, RST 是重新连接, FIN 是结束连接等
  • 窗⼝⼤⼩。TCP 要做流量控制,通信双⽅各声明⼀个窗⼝(缓存⼤⼩),标识⾃⼰当前能够的处理能⼒

除了做流量控制以外,TCP还会做拥塞控制,对于真正的通路堵⻋不堵⻋,

它⽆能为⼒,唯⼀能做的就是控制⾃⼰,也即控制发送的速度。不能改变世界,就改变⾃⼰嘛。 三次握手的过程 三次握⼿建⽴连接

这个所谓的「连接」,只是双⽅计算机⾥维护⼀个状态机。

  • ⼀开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端⼝,处于 LISTEN 状态。
  • 然后客户端主动发起连接 SYN ,之后处于 SYN-SENT 状态。
  • 服务端收到发起的连接,返回 SYN ,并且 ACK 客户端的 SYN ,之后处于 SYN-RCVD 状态。
  • 客户端收到服务端发送的 SYN 和 ACK 之后,发送 ACK 的 ACK ,之后处于 ESTABLISHED 状态,因为它⼀发⼀收成功了。
  • 服务端收到 ACK 的 ACK 之后,处于 ESTABLISHED 状态,因为它也⼀发⼀收了。 所以三次握⼿⽬的是保证双⽅都有发送和接收的能⼒。 TCP 的连接状态查看,在 Linux 可以通过 netstat -napt 命令查看。 TCP 分割数据

如果 HTTP 请求消息⽐较⻓,超过了 MSS 的⻓度,这时 TCP 就需要把 HTTP 的数据拆解成⼀块块的数据发送,⽽不是⼀次性发送所有数据。

数据会被以 MSS 的⻓度为单位进⾏拆分,拆分出来的每⼀块数据都会被放进单独的⽹络包中。

也就是在每个被拆分的数据加上 TCP 头信息,然后交给 IP 模块来发送数据。

TCP 报⽂⽣成 TCP 协议⾥⾯会有两个端⼝,⼀个是浏览器监听的端⼝(通常是随机⽣成的),⼀个是 Web 服务器监听的端口(HTTP 默认端⼝号是 80 , HTTPS 默认端⼝号是 443 )。

在双⽅建⽴了连接后,TCP 报⽂中的数据部分就是存放 HTTP 头部 + 数据,组装好 TCP 报⽂之后,就需交给下⾯的⽹络层处理。

远程定位-IP

根据路由表规则,来判断哪⼀个⽹卡作为源地址 IP。

在 Linux 操作系统,们可以使⽤ route -n 命令查看当前系统的路由表。

IP报文生成

好啦好啦 ,大伙也看出来了,一层一层的加东西嘛,们接着往下。

两点传输-MAC

MAC地址又叫做物理地址、硬件地址,用来定义网络设备的位置。 MAC 头部是以太⽹使⽤的头部,它包含了接收⽅和发送⽅的 MAC 地址等信息。

在 MAC 包头⾥需要发送⽅ MAC 地址和接收⽅⽬标 MAC 地址,⽤于两点之间的传输。 ⼀般在 TCP/IP 通信⾥,MAC 包头的协议类型只使⽤:

  • 0800 : IP 协议
  • 0806 : ARP 协议, 地址解析协议,即ARP(Address Resolution Protocol)

MAC 发送⽅和接收⽅如何确认? 发送⽅的 MAC 地址获取就⽐较简单了,MAC 地址是在⽹卡⽣产时写⼊到 ROM ⾥的,只要将这个值读取出来写⼊到 MAC 头部就可以了。 接收⽅的 MAC 地址就有点复杂了,只要告诉以太⽹对⽅的 MAC 的地址,以太⽹就会帮们把包发送过去,很显然这⾥应该填写对⽅的 MAC 地址。

所以先得搞清楚应该把包发给谁,这个只要查⼀下路由表就知道了。在路由表中找到相匹配的条⽬,然后把包发给
Gateway 列中的 IP 地址就可以了。 如何获取对⽅的 MAC 地址呢? ARP 协议帮们找到路由器的 MAC 地址。

后续操作系统会把本次查询结果放到⼀块叫做 ARP 缓存的内存空间留着以后⽤,不过缓存的时间就⼏分钟。

也就是说,在发包时:

  • 先查询 ARP 缓存,如果其中已经保存了对⽅的 MAC 地址,就不需要发送 ARP 查询,直接使⽤ ARP 缓存中的地址。
  • ⽽当 ARP 缓存中不存在对⽅ MAC 地址时,则发送 ARP ⼴播查询。

    在 Linux 系统中,们可以使⽤ arp -a 命令来查看 ARP 缓存的内容。

好啦,报文生成了,又加了一层。

出⼝-⽹卡

终于准备出去了 ⽹络包只是存放在内存中的⼀串⼆进制数字信息,没有办法直接发送给对⽅。

因此,们需要将数字信息转换为电信号,才能在⽹线上传输,也就是说,这才是真正的数据发送过程。

负责执⾏这⼀操作的是⽹卡,要控制⽹卡还需要靠⽹卡驱动程序。 ⽹卡驱动从 IP 模块获取到包之后,会将其复制到⽹卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上⽤于检测错误的帧校验序列。

  • 起始帧分界符是⼀个⽤来表示包起始位置的标记
  • 末尾的 FCS (帧校验序列)⽤来检查包传输过程是否有损坏

送别者-交换机

交换机的设计是将⽹络包原样转发到⽬的地。交换机⼯作在 MAC 层,也称为⼆层⽹络设备。

交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端⼝。

出境⼤⻔-路由器

  • 路由器是基于 IP 设计的,俗称三层⽹络设备,路由器的各个端⼝都具有 MAC 地址和 IP 地址;
  • 交换机是基于以太⽹设计的,俗称⼆层⽹络设备,交换机的端⼝不具有 MAC 地址。

路由器的端⼝具有 MAC 地址,因此它就能够成为以太⽹的发送⽅和接收⽅;

同时还具有 IP 地址,从这个意义上来说,它和计算机的⽹卡是⼀样的。

当转发包时,⾸先路由器端⼝会接收发给⾃⼰的以太⽹包,然后路由表查询转发⽬标,再由相应的端⼝作为发送⽅将以太⽹包发送出去。

终于到了,这个时候就像快递到了,们一层一层得把他拆开。

参考:图解网络

这里只是一个自己的学习笔记,大家有兴趣一定去看原文!!! 谢谢大家的阅读!!

大家有兴趣一定去看原文,这只是自己的一个笔记总结!!

大家有兴趣一定去看原文,这只是自己的一个笔记总结!!

大家有兴趣一定去看原文,这只是自己的一个笔记总结!!

原文创作:ML李嘉图

原文链接:https://www.cnblogs.com/zwtblog/p/15267809.html

文章列表

更多推荐

更多
  • .NET人工智能教程-四、使用自然语言理解 什么是 NLU?,自然语言理解的历史,为什么机器很难理解自然语言,语言理解智能服务(LUIS),为 LUIS 获取 Azure 订阅,演示:定义应用,概述,自然语言的复杂性,统计模型作为解决方案是不够的,充满希望的未来,基于 LUIS
    Apache CN

  • .NET人工智能教程-十、人工智能的未来 AI 为什么这么受欢迎?,改进的计算能力,人工智能算法的发明,数据是新的货币,云计算的出现,服务 vs 解决方案?,认知类别,NLU 的挑战和未来,演讲的挑战和未来,搜索的挑战和未来,挑战和建议的未来,AI 优先,智能边缘,将被淘汰的是
    Apache CN

  • .NET人工智能教程-七、与语音 API 交互 与语音互动的方式,入门指南,首先获取 JSON Web 令牌,消费者语音 API,语音合成,定制语音服务,说话人识别,摘要,认知搜索 API,语音识别,语音识别内部,定制声学模型,自定义语言模型,发音数据,自定义语音转文本端点,说话人验
    Apache CN

  • .NET人工智能教程-五、探索认知语言模式 iamfeanggoodgermanyvsargentinafootballliveepic fail,Bing 拼写检查 API,文本分析 API,Web 语言模型(WebLM) API,语言分析 API,概述,这是什么?
    Apache CN

  • .NET人工智能教程-一、人工智能基础入门 真实与虚构,历史和演变,微软和人工智能,基本概念,微软的认知服务,概述,当前的事态,人工智能的商品化,机器学习,语言,演讲,计算机视觉,视力,演讲,语言,知识,搜索, 想象一下,创建一个如此智能的软件,它不仅能理解人类语言,还能理解俚语
    Apache CN

  • .NET人工智能教程-三、使用微软技术构建对话式用户界面 什么是对话式用户界面?,简史,设计原则,微软机器人框架,使用 Bot 框架创建 CUI 应用,概述,一开始:命令行界面(CLI),然后是图形用户界面,UI 又一次进化了:对话式用户界面,艾在《崔》中的角色,崔的陷阱,混合用户界面(CUI
    Apache CN

  • .NET人工智能教程-二、在 Visual Studio 中创建基于人工智能的应用 使用认知服务的先决条件,设置开发环境,获取认知服务的 Azure 订阅密钥,测试 API,创建你的第一个基于人工智能的应用,让你的应用更有趣,概述,步骤 1:设置 Azure 帐户,步骤 2:创建一个新的认知服务帐户,步骤 3:获取订阅
    Apache CN

  • .NET人工智能教程-八、应用搜索产品 搜索无处不在,普及、预测、主动(搜索的三个 p),冰的历史,必应有什么独特之处?,搜索 API,Bing 图像搜索 API,Bing 新闻搜索 API,Bing 视频搜索 API,如何使用 Bing 视频搜索 API,Bing 网络搜索
    Apache CN

  • .NET人工智能教程-九、使用建议 了解基础知识,经常汇集(FBT)的建议,逐项,基于过去历史的建议,这些建议是如何起作用的?,模型和类型,建议构建,经常聚集在一起(FBT)建设,排名,SAR(智能自适应)构建,在构建中设置规则,离线评估,用户界面,摘要, 机器学习无处不
    Apache CN

  • .NET人工智能教程-六、消费和应用 LUIS 规划您的应用,创建 LUIS 应用,添加意图,添加/标记话语,发布您的应用,添加实体,添加短语列表,建议的后续步骤,LUIS 与 Bot 框架的集成,将您的机器人添加到 Skype,概述,机器人应该能做什么?,机器人需要用户提供什么信息
    Apache CN

  • 近期文章

    更多
    文章目录

      推荐作者

      更多