网络分层:构建信息交流的桥梁

简介: 在这篇文章中,我们将继续探讨网络分层的重要性和每个层次的功能。网络分层的优势在于每个层次的功能清晰明确,使得网络的设计和维护更加简化和灵活。网络分层的设计和实现使得我们能够在全球范围内进行高效的通信和信息交流。通过理解每个层次的功能和作用,我们可以更好地理解和解决网络中出现的问题

引言

本系列即将结束,最后一章将仔细讨论网络系统,这是面试中经常被问及的一个知识点,也是工作中常遇到的一个系统知识点。那么为什么我们需要网络系统呢?我们之前提到过,进程间通信有许多方法,其中一种是通过套接字(socket)进行跨网络通信。这意味着我们不再仅限于内部系统调用,而是需要与其他人进行沟通,这也是互联网的本质。然而,如果我们不能使用共同的语言进行沟通,比如你说中文,对方说鸟语,那么你们将无法有效地交流。因此,我们需要一个统一的语言,也就是网络系统,它通过一系列协议确保双方能够正常有效地进行沟通。这种约定好的格式就是网络协议(Networking Protocol)。接下来,我们将详细讨论网络系统的相关内容。

网络为什么要分层?

首先,我将简单地解释一下,然后再进行详细说明。为什么要分层?其实,这与你在编写Java代码时为什么要使用责任链设计模式是一样的。每一层只负责自己的任务,如果符合我们所需的逻辑,就继续往下一层推进,直到问题得到解决。难道不分层也可以吗?实际上不行,因为我们的设计模式只存在于代码层面,并不能仅凭一些混乱的代码和一堆if-else语句就解决问题,毕竟我们还需要硬件的支持。

接下来,让我们构建一个相对简单的场景,并在后面的内容中基于这个场景进行讲解。

假设我们有三台机器,分别是Linux服务器A、Linux服务器B,它们位于不同的网段,并通过中间的Linux服务器作为路由器进行转发。

image

说到网络协议,我们还需要简要介绍一下两种网络协议模型。一种是OSI的标准七层模型,它包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。另一种是业界标准的TCP/IP模型,它包括网络接口层、网络层、传输层和应用层。这两种模型的对应关系如下图所示:

image

为什么网络要分层呢?这是因为网络环境过于复杂,不是一个能够集中控制的体系。全球范围内有数以亿计的服务器和设备,它们各自拥有自己的体系结构和功能。然而,通过将网络划分为多个层次和组合,使用统一的网络协议栈,可以满足不同服务器和设备之间的通信需求。

我们这里简单介绍一下网络协议的几个层次。让我们从第三层开始,也就是网络层,因为这一层包含了我们熟悉的IP地址。因此,这一层也被称为IP层。

我们通常看到的IP地址的格式是这样的:192.168.1.100/24。斜杠前面是IP地址,这个地址被点分隔为四个部分,每个部分由8位二进制数字组成,总共是32位。斜线后面的24表示,在这32位中,前24位是网络号,后8位是主机号。

为什么要这样划分呢?我们可以想象一下,虽然全世界都组成了一个大的互联网,你可以访问美国的网站,但这个网络并不是一个整体。你所在的小区有一个网络,你所在的公司也有一个网络,联通、移动、电信等运营商也都有各自的网络。因此,整个大网络被划分为许多小的网络。

那么如何区分这些网络呢?这就是网络号的概念。一个网络中会有多个设备,这些设备的网络号相同,但主机号不同。你可以观察一下你家里的手机、电视和电脑,它们的主机号是不同的,但前面几位的网络号是相同的,而且它们都连接到同一个网关。

连接到网络上的每个设备都至少有一个IP地址,用于定位该设备。无论是旁边同学的电脑还是遥远的电商网站,都可以通过IP地址进行定位。因此,IP地址类似于互联网上的邮寄地址,具有全局定位功能。但要记住,你的IP地址并不是永恒不变的。即使你使用手机流量,当你换一个地方时,基站也会改变,因此你的IP地址也会改变。所以现在你明白为什么可以定位到你的设备了吧。

即使你要访问美国的某个地址,也可以从你身边的网络出发,通过打听和询问的过程,经过多个网络,最终发现中国的网络防火墙阻止了访问。开个玩笑,实际上只要是国内的地址,最终也可以到达目标地址,就像快递员送包裹一样。打听和询问的协议也在第三层,称为路由协议(Routing protocol),它负责将网络包从一个网络转发给另一个网络的设备,这些设备被称为路由器。

总而言之,第三层的主要功能是将网络包从一个起始IP地址,沿着路由协议指定的路径,通过多个网络,经过多个路由器的转发,到达目标IP地址。

从第三层开始往下看,第二层是数据链路层,也称MAC层。MAC是每个网卡都有的唯一硬件地址(不绝对唯一,相对大概率唯一即可),虽然这个地址没有全局定位功能。

可以将MAC地址类比为外卖小哥送外卖时的手机尾号。尽管手机尾号无法准确找到你家的位置,但它在本地具有定位功能,主要通过“吼”的方式实现。当外卖小哥到达你所在楼层时,会大声喊出:“尾号xxxx的,你的外卖到了!”MAC地址的定位功能仅限于同一网络内的IP地址之间,可以通过MAC地址定位和通信。要通过IP地址获取MAC地址,需要使用ARP协议,在本地发送广播包,也就是“吼”,以获取MAC地址。实际上,ARP协议有缓存功能,你可以使用arp -a命令查看你的Windows机器的缓存地址。

由于同一网络内的机器数量有限,通过MAC地址的好处在于简单。只要匹配到MAC地址,就接收该数据包;无法匹配到MAC地址,就不接收。没有像路由协议那样复杂的协议。当然,MAC地址的作用范围仅限于本地网络,因此一旦跨网络通信,尽管IP地址保持不变,但是MAC地址在经过每个路由器时都会更换一次。

让我们再看一下前面的图。服务器A向服务器B发送网络数据包,源IP地址始终是192.168.1.100,目标IP地址始终是192.168.2.100。但在网络1中,源MAC地址是MAC1,目标MAC地址是路由器的MAC2。路由器转发后,源MAC地址变为路由器的MAC3,目标MAC地址变为MAC4。

所以在网络的第二层,主要负责处理本地网络中服务器之间的定位和通信机制,也就是数据包在本地网络内的传输和交换。需要注意的是,这个机制仅限于本地网络内部的通信。

我们再往下看,网络的第一层是物理层,这一层主要涉及物理设备。例如,与电脑连接的网线以及我们能够连接上的WiFi都属于物理层的设备。物理层负责将数据转换为电信号或者无线信号,在网络中进行传输。

让我们进一步深入了解网络分层的细节。从第三层开始,第四层就是传输层,其中包括两个著名的协议,即TCP和UDP。尤其是TCP,在IP层的代码逻辑中,仅负责将数据从一个IP地址发送到另一个IP地址,而不关心丢包、乱序、重传、拥塞等问题。这些问题的处理逻辑被写在传输层的TCP协议中。

我们经常说的TCP三次握手、四次挥手等,正是因为底层的几个协议都不负责传输的可靠性。网络包可能会丢失,但是TCP层通过各种编号和重传机制,使本来不可靠的网络看起来变得可靠。因此,哪有什么应用层岁月静好,只不过 TCP 层帮你负重前行。

传输层再往上一层是应用层,这一层包括我们常见的HTTP、FTP和Java Servlet等。二层到四层的处理都在Linux内核中进行,而应用层如浏览器、Nginx和Tomcat则运行在用户态。内核对网络包的处理并不区分应用。

从第四层传输层往上,我们需要引入端口的概念。因为每个应用程序都需要占用一个端口来区分哪些网络包是发给它的。不同的程序需要监听不同的端口,例如Nginx可以监听80和443端口,Tomcat监听8080端口,Nacos监听8848端口等。

应用层和传输层之间的通信机制实际上是通过内核中的系统调用来完成的,即socket。因此,有人会问Socket属于哪一层,实际上它不属于任何一层,它只是一个由操作系统提供的系统调用接口。它属于操作系统的概念,而不是网络协议分层的概念。只是操作系统选择以一种模式实现网络协议处理,即将二到四层的处理代码放在内核中,而七层的处理代码由应用自己完成。这两者之间需要跨越内核态和用户态之间的通信,所以需要一个系统调用来完成这个衔接,这就是Socket。

总结

网络系统是面试和工作中常被问及的一个知识点。网络分层的核心思想是将网络划分为多个层次和组合,使用统一的网络协议栈,满足不同设备之间的通信需求。网络的第三层是网络层,负责将网络包从一个起始IP地址通过多个网络、经过多个路由器的转发,到达目标IP地址。第二层是数据链路层,负责本地网络内服务器之间的定位和通信机制。第一层是物理层,负责将数据转换为电信号或无线信号,在网络中进行传输。从第三层开始往上,第四层是传输层,包括TCP和UDP协议,处理网络传输的可靠性。第五层是应用层,包括HTTP、FTP和Java Servlet等。应用层和传输层之间的通信通过系统调用接口socket完成。

相关文章
|
18天前
|
安全 网络安全 数据安全/隐私保护
网络堡垒的构建者:洞悉网络安全与信息安全的深层策略
【4月更文挑战第9天】在数字化时代,数据成为了新的价值核心。然而,随之而来的是日益复杂的网络安全威胁。从漏洞利用到信息泄露,从服务中断到身份盗用,攻击手段不断演变。本文深入剖析了网络安全的关键组成部分:识别和防范安全漏洞、加密技术的应用以及提升个体和企业的安全意识。通过探讨这些领域的最佳实践和最新动态,旨在为读者提供一套全面的策略工具箱,以强化他们在数字世界的防御能力。
|
1天前
|
存储 SQL 安全
网络防御先锋:洞悉网络安全漏洞与加固信息防线
【4月更文挑战第26天】 在数字化的浪潮中,网络安全和信息安全已成为守护每个组织和个人数据资产的堡垒。本文将深入探讨网络安全领域内常见的安全漏洞类型、加密技术的最新进展以及提升安全意识的重要性。通过对这些关键领域的剖析,读者将获得构建坚固信息防线的知识武装,以应对日益复杂的网络威胁。
10 5
|
1天前
|
监控 安全 网络安全
云计算与网络安全:构建可信赖的云服务体系
【4月更文挑战第26天】 在数字化进程加速的当下,云计算作为支撑企业和个人数据处理的核心架构,其安全性受到前所未有的关注。本文深入探讨了云计算环境中的网络安全和信息保护机制,分析了当前云服务面临的主要安全挑战,并提出了相应的策略和技术解决方案。文中不仅涵盖了云服务的基本概念和分类,还详细论述了包括加密技术、身份验证、访问控制以及入侵检测等在内的多层次安全措施。此外,文章还对如何建立有效的安全治理框架提供了见解,旨在为读者提供一个全面而深入的视角,以理解和应对云计算环境下的网络安全问题。
9 2
|
2天前
|
云安全 安全 网络安全
云端防御战线:构建云计算环境下的网络安全体系
【4月更文挑战第25天】 随着企业数字化转型的加速,云计算以其灵活性、成本效益和可扩展性成为众多组织的首选技术平台。然而,云服务的广泛采用也带来了前所未有的安全挑战,特别是在数据保护、隐私合规以及网络攻击防护等方面。本文将深入探讨云计算环境中的网络安全策略,从云服务模型出发,分析不同服务层次的安全责任划分,并针对网络威胁提出综合性的防御措施。此外,文中还将讨论信息加密、身份验证、入侵检测等关键技术在维护云安全中的作用,以期为读者提供一套全面的云安全解决方案框架。
|
3天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
3天前
|
监控 安全 网络安全
云端防御战线:云计算环境下的网络安全与信息保护策略
【4月更文挑战第24天】 随着企业数字化转型的加速,云计算作为提供灵活、可扩展资源的关键平台,其安全性已成为企业关注的焦点。然而,云服务的共享性和开放性给传统的网络安全防护带来了新的挑战。本文将探讨云计算环境中面临的安全威胁,并针对这些威胁提出相应的防护措施和最佳实践,以期为信息安全管理者提供参考和指导。
5 0
|
4天前
|
安全 网络安全 区块链
网络防线的构筑者:深入网络安全与信息保护
【4月更文挑战第23天】在数字化时代,数据成为新石油,而网络安全则是油井防护的铁栅栏。本文将探讨网络安全漏洞的潜在风险、加密技术的防御策略以及提升安全意识的重要性。我们将剖析常见网络威胁,揭示加密技术如何为数据传输披上隐形斗篷,同时强调培养全民网络安全意识的必要性。通过实例分析和教育建议,旨在为读者打造一道坚不可摧的网络安全防线。
|
5天前
|
SQL 安全 算法
网络防线的构筑者:洞悉网络安全漏洞与加固信息防护
【4月更文挑战第22天】在数字化浪潮下,网络安全和信息安全成为维护社会稳定、保障个人隐私的重要基石。本文将深入探讨网络安全中存在的漏洞问题,介绍现代加密技术,并强调提升全民安全意识的必要性。通过对这些关键知识点的分享,旨在为读者提供一个关于如何构建和维护一个安全网络环境的全面视角。
|
5天前
|
监控 安全 网络安全
云端防御战线:云计算环境下的网络安全与信息保护策略
【4月更文挑战第22天】随着企业和个人用户对云服务的依赖日益加深,云计算环境的安全性成为信息技术领域关注的焦点。本文深入探讨了云计算平台面临的安全威胁、信息安全管理的挑战以及前沿防御技术。通过分析数据加密、身份验证、入侵检测等关键技术在云服务中的应用,提出了一个多层次、综合性的网络安全策略框架。此框架旨在为云服务提供商和使用者提供一套实用的安全保障措施,确保云资源的安全高效运营。
|
7天前
|
存储 安全 网络安全
构筑安全之盾:云计算环境下的网络安全与信息保护策略
【4月更文挑战第19天】随着云计算技术的飞速发展,企业和个人越来越依赖于云服务来存储、处理和交换数据。然而,这种便利性背后隐藏着潜在的安全风险。本文深入探讨了在云计算背景下,如何通过综合性的安全措施和策略来强化网络安全防护,确保数据的完整性、可用性和机密性。我们将分析当前面临的主要安全挑战,并基于最新的技术进展提出相应的解决方案,以期达到有效防御外部威胁和内部漏洞的目的。
16 4