系统网络架构描述:系统设计基础知识 一
系统网络架构描述:系统设计基础知识 一一般流程如下:上图中,1 号计算机向 2 号计算机发送一个数据包,同一子网中的 3 号、4 号和 5 号计算机都会收到这个数据包。他们读取数据包的“标头”,找到接收方的 MAC 地址,并将其与自己的 MAC 地址进行比较。如果两者相同,则接受该数据包进行进一步处理,否则丢弃该数据包。这种发送方式称为“广播”。有了数据包的定义、网卡的MAC地址、广播的发送方式,“链路层”就可以在多台计算机之间传输数据
今天,我将分享系统设计的基础知识。
如果你喜欢这篇文章,请分享并点赞。
- Client-Server 模型
C/S是一种软件系统架构,通过它可以充分发挥两端硬件环境的优势,将任务合理分配到客户端和服务器端来实现这一点,从而减少系统的通信开销。目前,大多数应用软件系统都采用Client/Server形式的两层结构。由于当前的软件应用系统正在向分布式Web应用发展,Web和Client/Server
应用都可以进行相同的业务处理,应用不同的模块。共享逻辑组件;因此,内部和外部用户可以访问新的和现有的应用系统,并且可以通过现有应用系统的逻辑来扩展新的应用系统。
一个完整的HTTP请求流程
当你按下输入https://www.baidu.com。浏览器收到此消息后,会根据自己的算法识别出你要访问的网址,并为你显示搜索页面。那么这些经历了怎样的过程呢?
一般流程如下:
- 1)浏览器查询DNS获取域名对应的IP地址;具体过程包括浏览器搜索自己的DNS缓存、搜索操作系统的DNS缓存、读取本地主机文件、查询本地DNS服务器。
- 2)浏览器获取到域名对应的IP地址后,向服务器请求建立链接,并发起三次握手;
- 3) TCP/IP链接建立后,浏览器向服务器发送HTTP请求;
- 4)服务器接收到这个请求,根据path参数映射到特定的请求处理器进行处理,并将处理结果和对应的视图返回给浏览器;
- 5) 浏览器解析并渲染视图。如果遇到对js文件、CSS文件、图片等静态资源的引用,重复上述步骤,向服务器请求这些资源;
- 6) 浏览器根据请求的资源和数据来渲染页面,最终向用户展示一个完整的页面。
- 用户只使用应用层,根本不知道其他层。要了解互联网,我们必须从底层开始,了解每一层的功能
- 每一层都是为了完成一个功能。为了实现这些功能,每个人都需要遵守共同的规则,称为协议。许多协议被称为“互联网协议套件”,作为互联网的核心。
- 物理层:电脑需要先联网。它是光缆、双绞线、无线电波等。所以,物理层意味着连接计算机。它主要规定了网络的一些电特性,负责传输0和1的电信号。简单的0和1没有任何意义,必须明确解释方法:多少个电信号算作一个组?每个信号位的含义是什么?
- 数据链路层:它决定了 0 和 1 的分组
- 以太网层/网络层:以太网从一个数据包中规定了一组电信号,称为“帧”。每帧分为两部分:头部和数据。“Header”包含数据包的一些描述项,如发送方、接收方、数据类型等;“数据”是数据包的具体内容。“标头”的长度固定为 18 个字节。“数据”的长度最短为 46 字节,最长为 1500 字节。因此,最短的“帧”是 64 字节,最长的是 1518 字节。如果数据很长,就必须分成多帧进行传输。以太网数据包的“标头”包含有关发送方和接收方的信息。那么,如何识别发送者和接收者呢?以太网规定所有连接到网络的设备都必须有一个“网卡”接口。数据包必须从一个网卡传输到另一个网卡。网卡的地址是数据包的发送地址和接收地址,称为MAC地址。每张网卡出厂时都有一个全球唯一的MAC地址,长度为48位二进制,通常用12位十六进制数表示。前6位十六进制数字是厂商的序列号,后6位是厂商网卡的序列号。通过MAC地址可以定位网卡和数据包的路径。
- 广播:一张网卡如何知道另一张网卡的MAC地址?答案是有一个ARP协议可以解决这个问题。你只需要知道以太网数据包必须知道接收方的 MAC 地址后才能发送。其次,即使有了MAC地址,系统如何才能准确地将数据包传递给接收方?答案是以太网使用了一种非常“原始”的方法。它不是将数据包准确地发送给接收者,而是将其发送给网络中的所有计算机,让每台计算机确定自己是否是接收者。
上图中,1 号计算机向 2 号计算机发送一个数据包,同一子网中的 3 号、4 号和 5 号计算机都会收到这个数据包。他们读取数据包的“标头”,找到接收方的 MAC 地址,并将其与自己的 MAC 地址进行比较。如果两者相同,则接受该数据包进行进一步处理,否则丢弃该数据包。这种发送方式称为“广播”。有了数据包的定义、网卡的MAC地址、广播的发送方式,“链路层”就可以在多台计算机之间传输数据
- 以太网协议依靠 MAC 地址来发送数据。理论上,上海网卡仅靠MAC地址就可以找到北京网卡,这在技术上是可以实现的。然而,这有一个主要缺点。以太网使用广播发送数据包,所有成员手头有一个“包”,不仅效率低,而且仅限于发送者所在的子网。也就是说,如果两台计算机不在同一个子网中,广播就不会通过。这种设计是合理的,否则互联网上的每台计算机都会收到所有的数据包,这将造成灾难。互联网是一个由无数子网组成的巨型网络。这就像想象上海和北京的计算机将在同一个子网络上。这几乎是不可能的。
- 因此,必须找到一种方法来区分哪些 MAC 地址属于同一子网,哪些不属于同一子网。如果是同一个子网,则以广播方式发送,否则以“路由”方式发送。(“路由”的意思是指如何将数据包分发到不同的子网。这是一个很大的话题,本文不做介绍。)不幸的是,MAC地址本身无法做到这一点。仅与厂商有关,与网络无关。这导致了“以太网/网络层”的诞生。它的作用是引入一组新的地址,以便我们区分不同的计算机是否属于同一个子网。这组地址称为“网络地址”,简称“网址”
- 因此,“网络层”出现后,每台计算机都有两种地址,一种是MAC地址,另一种是网络地址。这两种地址之间没有联系。MAC地址与网卡绑定,网络地址由管理员分配。它们只是随机组合。
- 网络地址帮助我们确定计算机所在的子网,MAC地址将数据包发送到子网中的目标网卡。因此,从逻辑上可以推断,必须先处理网络地址,再处理MAC地址。
- IP 协议/TCP:这指定网络地址。它定义的地址称为 IP 地址。目前,IP 协议的第四版,称为 IPv4,被广泛采用。该版本规定网络地址由 32 个二进制位组成。传统上,我们使用分成四段的十进制数字来表示 IP 地址,从 0.0.0.0 到 255.255.255.255。
- 互联网上的每台计算机都分配有一个 IP 地址。这个地址分为两部分,第一部分代表网络,第二部分代表主机。比如IP地址172.16.254.1,是一个32位的地址,假设它的网络部分是前24位(172.16.254),那么主机部分是后8位(后1位)。同一子网中的计算机的 IP 地址必须具有相同的网络部分,这意味着 172.16.254.2 应该与 172.16.254.1 在同一子网上。
- 但是,问题是我们不能仅从IP地址来判断网络部分。我们以 172.16.254.1 为例。它的网络部分是前 24 位、前 16 位,还是前 28 位,你无法从 IP 地址中分辨出来。那么,如何从IP地址判断两台电脑是否属于同一个子网呢?这需要另一个参数“子网掩码”(subnet mask)。所谓“子网掩码”,就是表示子网特性的参数。相当于形式上的IP地址,也是一个32位的二进制数。它的网络部分全为1,主机部分全为0。比如IP地址172.16.254.1,如果知道网络部分是前24位,主机部分是后8位,那么子网掩码就是11111111.11111111.11111111。00000000,即 255。255.255.0 十进制。知道了“子网掩码”,我们就可以判断任意两个 IP 地址是否在同一个子网上。方法是分别对两个IP地址和子网掩码进行AND运算(两位数为1,运算结果为1,否则为0),然后比较结果是否相同。如果是这样,则意味着它们在同一个子网中。在网络中,否则,它不是。
- 比如已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,是不是在同一个子网?两者和子网掩码分别进行AND运算,结果是172.16.254.0,所以它们在同一个子网中。综上所述,IP协议有两个主要功能。一种是为每台计算机分配一个IP地址,另一种是确定哪些地址在同一个子网上。
- IP数据包:按照IP协议发送的数据称为IP包。不难想象,它必须包含IP地址信息。但如前所述,以太网数据包只包含MAC地址,没有IP地址字段。那么我需要修改数据定义并添加另一个字段吗?答案是否定的,我们可以将IP数据包直接放入以太网数据包的“数据”部分,完全不需要修改以太网规范。这就是互联网分层结构的好处:上层的变化根本不涉及下层的结构。具体来说,IP数据包也分为“头”和“数据”两部分。“header”部分主要包括版本、长度、IP地址等信息,而“数据”部分则是IP数据包的具体内容。放入以太网数据包后,以太网数据包变成如下。