输入 xxxhub 的背后到底发生了什么(一)

Hunter37
发布于 2022-5-26 18:38
浏览
0收藏

 

前言
今天我们来深度剖析一个老生常谈的话题「请说出在淘宝网输入一个商品到最终展示的完整路径」,这题很难,涉及到网络的工作机制,硬件上需要对交换机,路由器,网卡的工作机制有所了解,软件上则涉及到 TCP,LVS 的工作原理,网上对这些内容的讲解有不少错误而且讲得不够细,很多知识点一笔带过,本文将会用大量的图解对网络中软硬件的工作机制做详细介绍,相信大家看了肯定有收获,肝文不易,大家来个三连支持呀

 

友情提示:下篇再讲 LVS 工作原理,看完这篇再看 LVS 会容易很多

 

接下来我们会深度剖析下图中 A 与 B 的通信流程,坐稳了,发车!

 输入 xxxhub 的背后到底发生了什么(一)-鸿蒙开发者社区
借用生活场景来理解网络中的概念
很多技术术语我们可能理解得很费劲,但是往往引入生活学习场景会一目了然,很多技术的设计思路就取自生活中的点点滴滴,接下来我们就以学校的场景为例来一步步理解网络的设计思路。

 

学军小学开学了,第一天一年级一班的同学都到齐了,新来的老师并不认识其中的每一个人,但是没关系,他有一份学生名单

 输入 xxxhub 的背后到底发生了什么(一)-鸿蒙开发者社区
现在老师想认识班上叫「李四」的同学,于是他先在在班上大喊了一声「李四」,虽然所有人都听到了老师的声音,但由于喊的是李四,所以其他人不作声,只有李四回了一声「到」

 输入 xxxhub 的背后到底发生了什么(一)-鸿蒙开发者社区
于是老师就把名单上的李四和相关人员给关联上了,下一次想找李四的时候就可以直接找到对应的人员,不用在班上大吼一声了,同理老师如果想找其他人,也只要大吼一声对方应答即可,我们把这种方式称为广播,之后记住了对方就可以直接一对一找人了。

 

那么老师为啥不跑到其它班级去找张三,李四呢,毕竟其他班级也可能有这两人,注意学生名单上有个前缀是相同的

 输入 xxxhub 的背后到底发生了什么(一)-鸿蒙开发者社区
他们的前缀都是学军小学一年级一班,所以班主任只会在「一年级一班」找人,不会傻到跑到其他班级去找人(当然你要跑到其他班级去吼或者满世界吼都没问题,只是无人响应,没必要),总结一下老师如果需要知道名单上「学军小学一年级一班李四」这位同学是谁,那么她需要:

  1. 首先找到学军小学一年级一班在哪
  2. 然后在一年级一班大吼一声「李四」,其他同学虽然听到了老师的喊声,但由于叫的不是自己,所以都不作声,只有李四本人回应了一声「到」
  3. 老师对应上了本人,于是下次就不要靠吼的方式找李四了,直接找到本人即可。

 

刚才说的是同一个班级的,那如果是不同班级的学生呢?比如一年级一班的的张三需要找一年级二班的王五,该怎么办?首先看前缀即班级名称是否相同

 输入 xxxhub 的背后到底发生了什么(一)-鸿蒙开发者社区
显然不一样,所以张三不能在班级里吼,他应该出门,先找到王五所在班级「学军小学一年级二班」,然后再大吼一声「王五」,王五再回答「到」,之后再找的话由于已经记住了王五是谁,所以到达二班后直接找到王五交流即可。

 

到这里我们网络的雏形就有了,现在我们再来看下此例中的班级,学生等如何与网络中的术语对应上,相信你会豁然开朗

  • 主机:即学生
  • 子网: 班级就对应互联网中的子网,互联网就是由无数的子网组成的,要与计算机通信,必须先找到计算机所在子网
  • 网络地址:「学军小学一年级一班」即班级编号就相当于网络地址,相当于子网的编号,主要用来判断主机是否在同一个子网
  • 主机地址:张三,李四就相当于主机地址,相当于确定了班级后,可以分配学生了
  • IP 地址: 「学军小学一年级一班张三」即 IP 地址,相当于计算机的编号,不难发现 IP 地址由网络地址+主机地址组成,只不过主机中的 IP 地址由 32 位的二进制数也就是 4 个字节组成,IP地址通常用点分十进制表示成(a.b.c.d)的形式,如 192.168.1.10,
  • 子网掩码: IP 地址虽然包含了网络地址,比如 IP「学军小学一年级一班李四」的网络地址为「学军小学一年级一班」,但是只有 IP 是无法知道网络地址的,必须指定哪几位为网络地址,在此例中我指定前 9(学军小学一年级一班的长度) 个字为网络地址,我们可以写成 学军小学一年级一班李四/9,代表此 IP 的前 9 位为 网络地址, 在计算机中我们则用 192.168.1.10/24 这样的形式来表示,这种用来指明一个 IP 地址的哪些位标识的是主机所在的子网的形式我们称为子网掩码
  • mac 地址:「学生的容貌+身份证」就相当于计算机 mac 地址,即网卡地址,每个网卡地址在全球都是独一无二的,mac 地址有48位,通常表示为12个16进制数,每两个16进制数之间用冒号分隔开,如【08:00:20:0A:8C:6D】,一旦找到子网,就可以先根据 IP 找到 mac,再根据 mac 找到对应的计算机,一般一个 mac 对应一个 IP(一位学生为其分配一个班级学号)
  • 网关:两名学生如果不在同一个班级(不在同一个子网),则需要出门寻找,这里的门就相当于网关
    另外这里隐含的一个点是学生要能被叫到,必须要先入学报名然后学校根据其「容貌+身份证」(mac地址)分配到某个班级(比如学军小学一年级一班张三,对应 IP 地址),也就是说计算机如果要能通信必须首先被分配某个子网的一个 IP,原因也不难理解,学生都不在班级里(没有编号),老师同学无论在哪个班级喊你都听不到,至此可以得出网络的基本架构如下

输入 xxxhub 的背后到底发生了什么(一)-鸿蒙开发者社区

 互联网是由一个个子网组成的,不同子网计算机出网关后通信

到此网络的基本原理其实你已经明白了,剩下的只是一些实现上的细微差别而已,看完本文剩余内容你会发现我们举的这个例子与网络的工作原理是如此惊人的相似

 

计算机是如何通信的
接下来我们进入正题一起来看看计算机是如何通信的

 

有了上述的预备知识现在再来看一下两个计算机是如何通信的,相信你会豁然开朗,经过上一小节分析你会发现计算机要通信无非分两种情况

  • 同一个子网中的两台计算机通信(在一个班级)
  • 不属于同一个子网两台计算机的通信(不在一个班级)


1. 两台计算机属于同一个子网


人与人是可以靠声音通信,但计算机必须通过网线相连才能通信

 输入 xxxhub 的背后到底发生了什么(一)-鸿蒙开发者社区
不过计算机一般只有一个网卡接口,只能连一根网线,但一个子网里可能有几百台机器,它们之间该怎么连线呢

 

计算机中有一句经典名言:没有什么是加一层解决不了的问题,如果有那就再加一层,所以我们可以加个中间层,让其它电脑连到这个中间层,然后让这个中间层再转发

 输入 xxxhub 的背后到底发生了什么(一)-鸿蒙开发者社区
IP 的诞生
在上一节中我们提到,计算机要通信必须首先被分配一个子网中的 IP,你可以为每台机器手动指定(静态 IP),但手动配置确实太麻烦了,所以一般通过 DHCP 服务器来动态分配 IP 地址,比如现在 A 是刚接入此子网的计算机,它没有 IP,所以它会发一个包含有 A 机 mac 地址的广播包,由于是广播包,每台机器都能收到,但只有 DHCP 才能做出响应,DHCP 会给这台机器发一个带有 IP 地址的响应包

 输入 xxxhub 的背后到底发生了什么(一)-鸿蒙开发者社区
如图示获取 IP 的步骤如下

  1. 首先 A 发出一个 DHCP DISCOVRE 广播包,由于它还没有 IP,所以源地址设为 0.0.0.0,它刚接入也不知道 DHCP IP 是啥,所以设置为 255.255.255.255(受限的广播地址,只会在子网中进行广播的),所有机器都会收到,但只有 DHCP server 能响应
  2. DHCP server 会发出一个「分配的 IP」,「A 的 mac地址」等的广播包,所有机器都能收到,收到后机器会拿到报文里的 mac 地址和自己的比对一下,如果是会再向 DHCP 发送一个确认使用此 IP 的广播包,DHCP 收到此包后记录此 IP 已被使用,同时再次发出一个 DHCP ACK 确认此 IP 可用,于是 A 就有了 IP
    注:为了避免面面俱到,DHCP 流程作了一些简化,与实际有些出入,不过不影响整体理解

就这样每台机器接入子网后通过 DHCP 都获取到了自己的 IP 地址

 输入 xxxhub 的背后到底发生了什么(一)-鸿蒙开发者社区
好了,既然每台机器都被分配了 IP, MAC 地址也知道了(网卡自带的),那么两台机器该怎么通信呢?

 

我们来看下已知 D 的 IP,A 该怎么和 D 通信,首先 A 要判断 D 是不是在同一个子网,怎么判断呢,上一节我们提到过,子网掩码,一般在组网的时候我们会指定哪几位为网络地址,哪几位为主机地址,只要网络地址相同就可以认为是在同一个子网

 

IP 地址有 32 位,如果我们指定前 24 为网络地址,那么后 8 位就是主机地址,那么已经一个 IP 是 192.168.1.10 该怎么算它的网络地址呢


前 24 位为网络地址,则说明前 24 位需要保留,剩下的 8 位地址不保留(为 0),那么只需要让此 IP 与 前 24 为 1,后 8 位为 0 的数字(十进制表示为 255.255.255.0)相与即可获取网络地址,即为 11000000.11000000.00000001.00000000,换算成十进制即为 192.168.1.0

 输入 xxxhub 的背后到底发生了什么(一)-鸿蒙开发者社区
由于前 24 位是网络号,所以 A(192.168.1.10/24)和 D(192.168.1.13/24)的网络地址是一样的(都是192.168.1.0),代表它们是同一个子网

 

文章转自公众号:码海

分类
标签
已于2022-5-26 18:38:30修改
收藏
回复
举报
回复
    相关推荐