【网络篇】第一篇——网络入门基础(一)

简介: 【网络篇】第一篇——网络入门基础

计算机网络背景


网络发展


独立模式:计算机之间相互独立

早期,计算机之间是相互独立的,如果我们想要多个计算机协同完成某个任务,只能等到一台计算机处理完后再将数据传递给下一台计算机,然后下一台计算机再接着去处理任务,这样效率是很低的。

image.png

网络互联:多台计算机连接在一起,完成数据共享

由于引起的效率低下问题,于是有人就设想把这些计算机连接在一起,当某个任务需要多台计算机共同完成时,就可以将共享的数据放到服务器中进行集中管理,此时各个计算机都能获取这些共享的数据,所以各个业务在处理就能随时进行切换了。

image.png

局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起

后来这样的网络逐渐发展,连入这个网络中的机器变得越来越多,于是就出现了局域网的概念。在局域网中有一种设备叫做交换机,交换机主要完成局域网内数据的转发工作,也就是在局域网内将数据从一台主机转发给另一台主机。各个局域网之间通过路由器链接起来,路由器主要完成数据的路由转发工作。

image.png

广域网WAN:将远隔千里的计算机连在一起

各个局域网之间通过路由器相互连接在一起,便组成了一个更大的网络结构,我们将其称之为广域网。实际局域网和广域网是一种相对的概念,我们也可以将广域网看作一个较大的局域网。

image.png

当然,你可能还听说过城域网和校园网这样的概念,城域网实际就是在一个城市范围内所建立的计算机通信网,而校园网对应的就是在一个校园范围内所建立的计算机通信网。城域网和校园网实际也是一种相对的概念,我们都可以将它们看作一个大的局域网。

认识"协议"


协议本质就是一种"约定",它是多方协商出来的一种通信方案,达成一种"共识"。双方想要通信,就要按照双方事先都知道的约定进行通信,例如,双方之间发送电报,事先约定了0代表收到,1代表发起进攻等,这个约定是双方都知道的。

例子:

比如通信计算机双方曾经做过如下约定:

  • 如果code的值为1,则表示需要将data的值存储进数据库
  • 如果code的值为1,则表示需要将data的值写入日志信息
  • 如果code的值为3,则表示需要将data的值进行打印输出。
struct cmd{
    int code:4;
    int data:8;
}

就是一个位段结构,我们可以通过位段来表示某种协议规定的,而实际上计算机网络里面的协议报头也就是通过位段来实现的。


我们有了这样的约定后,当甲计算机向乙计算机发送类似于{1, 0x1234}的数据时,乙计算机识别到code的值是1,于是就知道了甲计算机是让自己将data的值存储进数据库,这是一种纯软件的约定方案。


另外我们应该都知道,计算机之间的传输媒介是光信号和电信号,通过“频率”和“强弱”来表示0和1这样的信息,因此要想传递各种不同的信息,就需要约定好双方的数据格式,这就是一种纯硬件的一种约定方案。

思考:只要通信的两台主机,约定好协议就可以了吗?

当然不是, 计算机生产商很多;计算机操作系统,也有很多;如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?这时候就需要有一个权威人士站出来,约定一个共同的标准,并且让大家都来遵守这个标准,这个就是网络协议。

而那个站出来的人必须是该领域的佼佼者,正所谓"一流的企业做标准,二流的企业做品牌,三流的企业做产品"。

初识网络


我们通常在手机或者电脑上使用的APP,比如抖音、快手、淘宝等,这些APP都是在应用层的。用户在应用层的各种请求最终会下达给操作系统,操作系统内除了进程管理、文件管理、内存管理、驱动管理之外,还有一个内嵌的软件协议栈,协议栈将用户的数据进行各种封包后,通过网卡将数据传递到网络当中,数据在网络内部经过各种路由转发,最终将数据传送到了目标服务器。

目标服务器本身也是一台计算机,该计算机的操作系统就是linux,而我们在访问目标服务器的时候使用的可能是windows,安卓等操作系统,此外,对端服务器也有自己的协议栈,对端服务器将拿到数据通过协议栈进行各种解包操作后上交给应用层,在对端服务器的应用层就有一个对应的软件服务器,比如抖音服务包,软件服务器内部对收到的用户请求进行各种分析处理后,再将对应的数据以相同的方式返回给用户。

image.png

需要注意的是,不同操作系统的进程管理、文件管理、内存管理、驱动管理的实现方式可能是不一样的。比如Windows和Linux实现多线程的方式是不一样的,Linux当中的线程是用轻量级进程模拟的,而Windows当中是有真正意义上的线程的。


而协议栈是网络标准组织定义的,是具有全球性质的,所有的操作系统都必须支持。也就是说,虽然客户端和服务端可能使用的是不同种类的操作系统,但每个操作系统实现网络协议栈的方法包括各种细节都是一样的,因此双方对数据进行的封包和解包操作都是一样的。


我们知道的是,操作系统中包含进程管理、文件管理、内存管理、驱动管理这四大模块,操作系统层与用户层之间有着系统调用层,操作系统层往下是驱动层,而驱动层再往下就是各种硬件设备了。

image.png

操作系统中的进程管理,文件管理,内存管理,驱动管理是隶属于系统部分的,系统部分的核心工作就是管理好各种软硬件资源,对上提供一个良好的运行环境。


操作系统除了有这四大管理模块之外,还有与网络协议栈有着密切的关系,网络协议栈主要负责数据的通信,其自顶向下可分为四层,分别是应用层,传输层,网络层,数据链路层。


网络协议栈各部分所处位置:

应用层是位于用户层的。 这部分代码是由网络协议的开发人员来编写的,比如HTTP协议、HTTPS协议以及SSH协议等。

传输层和网络层是位于操作系统层的。 其中传输层最经典的协议叫做TCP协议,网络层最经典的协议叫做IP协议,这就是我们平常所说的TCP/IP协议。

数据链路层是位于驱动层的。 其负责真正的数据传输。

image.png

整个网络协议栈呈现出一种层状结构,该协议栈贯穿整个体系结构。

网络协议栈的其他分层方法

在其他书上可能将网络协议栈分为了五层,这多出来的一层就是最底层的物理层,物理层主要就是利用传输介质为数据链路层提供物理连接,实现比特流的透明传输,是与硬件强相关的。

其次,有的书还会将数据链路层和物理层统称为网络接口层,也有人会将网络层叫做网际层。

image.png

将通信过程进行抽象

此时我们可以将通信过程进行抽象,可以将通信理解成不是两台机器在通信,而是这两台机器当中的网络协议栈之间在进行通信。

image.png

网络协议栈中各层的功能

  • 数据链路层

主要实现通信我们首先要能够将数据发送出去,而数据链路层就是负责数据真正的发送过程。

  • 网络层

在数据链路层的支持下,现在能够将数据发送出去了,但是我们还应该知道数据应该往哪里发,而网络层完成的就是数据转发,解决了数据去哪里的问题。

  • 传输层

现在有了发送数据的能力,也知道了数据应该往哪里发,但是我们并不能保证发送出去的数据能够成功的到达对端主机,比如在传输过程中可能出现丢包问题,而传输层工作就是处理传输中遇到的问题,保证数据可靠性。

  • 应用层

也就是说,网络协议栈的下三层能够保证把数据交付给对端主机,但现在我们还需要明确的是,我们将数据发送给对端主机的目的是什么,而这就是应用层要解决的问题。应用层需要根据特定的通信目的,对数据进行分析与处理,以达到某种业务性的目的。


因此网络协议栈的下三层主要的完成的工作就是处理通信细节,而应用层主要完成的就是某种具体的业务细节

image.png

网络协议栈分层的目的

实际上,我们在设计协议栈的时候也可以不进行分层,将各个层的功能全部写在一起,将这些小模块合并成一个更大的模块。但这样的设计方式对设计人员的要求就非常高了,设计人员必须能够编写从物理层到应用层的整个通信过程的代码,并且最终设计出来的代码的可维护性和可扩展性是很低的。


层状结构的本质是软件工程上面的解耦,此时层与层之间只有接口的相互调用关系,此时我们就可以让研究不同领域的开发人员编写不同层的代码,最后再将各层的代码联调起来,由于每一层的代码都是对应领域的专业人员编写的,因此代码联调后整体的性能也是很高的。


并且这样的层状结构可以增加代码的可维护性和可扩展性。比如有一天你觉得数据链路层的代码已经无法承担起通信的能力了,那么此时我们就可以用一个新的协议对它进行替换,而其他各层对应的协议都不用换,这就叫做可扩展性。而如果协议栈的某一层出现了问题,我们只要确定了是哪一层出了问题,就可以直接去对应层去找问题,这就叫做代码的可维护性。

相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
2月前
|
监控 安全 数据安全/隐私保护
智能家居安全入门:保护你的网络家园
本文旨在为初学者提供一份简明扼要的指南,介绍如何保护自己的智能家居设备免受网络攻击。通过分析智能家居系统常见的安全漏洞,并提供实用的防御策略,帮助读者建立起一道坚固的数字防线。
|
11天前
|
消息中间件 编解码 网络协议
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
45 0
|
16天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
1月前
|
弹性计算 人工智能 运维
Terraform从入门到实践:快速构建你的第一张业务网络(上)
本次分享主题为《Terraform从入门到实践:快速构建你的第一张业务网络》。首先介绍如何入门和实践Terraform,随后演示如何使用Terraform快速构建业务网络。内容涵盖云上运维挑战及IaC解决方案,并重磅发布Terraform Explorer产品,旨在降低使用门槛并提升用户体验。此外,还将分享Terraform在实际生产中的最佳实践,帮助解决云上运维难题。
125 1
Terraform从入门到实践:快速构建你的第一张业务网络(上)
|
28天前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
23 1
|
2月前
|
域名解析 网络协议 应用服务中间件
网络编程入门如此简单(四):一文搞懂localhost和127.0.0.1
本文将以网络编程入门者视角,言简意赅地为你请清楚localhost和127.0.0.1的关系及区别等。
155 2
网络编程入门如此简单(四):一文搞懂localhost和127.0.0.1
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习入门案例:运用神经网络实现价格分类
深度学习入门案例:运用神经网络实现价格分类
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习中的卷积神经网络(CNN)入门与实践
【9月更文挑战第19天】在这篇文章中,我们将探索深度学习的一个重要分支——卷积神经网络(CNN)。从基础概念出发,逐步深入到CNN的工作原理和实际应用。文章旨在为初学者提供一个清晰的学习路径,并分享一些实用的编程技巧,帮助读者快速上手实践CNN项目。

热门文章

最新文章