网络原理 - 初识

news2024/11/16 0:00:23

文章目录

  • 局域网(LAN)
  • 广域网(WAN)
  • 网络设备
  • IP地址
    • 格式
  • 端口号
    • 格式
  • 认识网络协议
    • 协议分层
  • OSI七层模型(只是理论,没有实际运用)
  • TCP/IP五层(或四层)模型
    • 网络设备所在分层
  • 封装和分用

计算机之间通过网络来传输数据,也称为网络通信。
根据网络互连的规模不同,可以划分为局域网和广域网。
所谓 “局域网” 和 “广域网” 只是⼀个相对的概念。

局域网(LAN)

局域网,即 Local Area Network,简称LAN。
局域网是本地,局部组建的⼀种私有网络,又称为内网。局域网内的主机之间能方便的进行网络通信;局域网和局域网之间在没有连接的情况下,是无法通信的。

局域网组建网络的方式有很多种:
(1)基于网线直连
(2)基于集线器组建
(3)基于交换机组建
(4)基于交换机和路由器组建

广域网(WAN)

广域网,即 Wide Area Network,简称WAN。
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
如果有很多分公司,甚至海外分公司,把这些分公司以专线方式连接起来,即可称为“广域网”。
如果属于全球化的公共型广域网,则称为互联网(又称公网,外网)。
有时在不严格的环境下说的广域网,其实是指互联网。

网络设备

主机:上网的设备(电脑,手机…)
组建网络的重要设备:路由器,交换机

  • 路由器有WAN口(连接运营商的网线)和LAN口(连接要上网的设备)
  • 交换机的接口没有WAN口和LAN口一说

家里的路由器和其连接的上网设备形成一个局域网
而家里的路由器可以连接到运营商的路由器,运营商的路由器又连接到更大的运营商路由器,这样就可以形成一个大的网络

“猫”,专业术语叫做"调制解调器"
以前没有宽带的时候,上网用电话线,通过"猫"把电话线中的模拟信号转成数字信号
后面宽带入户就不用电话线上网了,光猫就是路由器,只不过WAN口是插光纤的,LAN口还是正常插网线的
光纤主要材质是玻璃,通过激光在玻璃里传输信号;网线里面是铜丝,是通过电流来传输信号

虽然路由器有很多网口,但路由器上的口可能不够用,此时就可以使用交换机对网口进行拓展(类似于电脑的扩展坞)
交换机的特点是口特别多,连接到交换机上的设备彼此之间不会相互影响和干扰

IP地址

如何判断哪台主机发出数据,哪台主机接收数据呢?这就需要使用IP地址来标识。

IP地址用于标识网络主机、其他网络设备(如路由器)的网络地址。通过地址找到这个设备,进而进行通信。
就像我们寄快递⼀样,需要知道对方的收货地址,才能将包裹送达。

格式

IP地址是⼀个32位的二进制数(IPv4),通常被分割为4个“8位二进制数”(也就是4个字节),如:
01100100.00000100.00000101.00000110

通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数),如:100.4.5.6

在控制台输入ipconfig就可以看到本地IPv4 地址和其他一些信息
在这里插入图片描述

端口号

在网络通信中,IP地址用于标识主机的网络地址,端口号可以标识一个主机中发送数据、接收数据的进程。简单说:端口号用于标识主机中的进程(应用程序)。
类似寄快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。

格式

端口号是0~65535(2个字节)范围的数字,在网络通信中,进程可以通过绑定⼀个和其他进程不重复的端口号,来发送及接收网络数据。

端口号不会不够用,端口号是区分同一个主机上的不同进程,而不是区分不同主机的不同进程

可能会谈到有的程序是有固定的端口号的,这种说法源自于一个概念,“知名端口号”。很久以前,为了避免当时的一些程序的端口号之间发生冲突,就给一些知名的程序分配了不同的端口号,一共分了1024个。如今,知名端口更多是"建议"而不是约束,也可以使用别的不重复的端口号

认识网络协议

网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的⼀组约定,而且一定是通信双方都认可的。比如怎么样建立连接、互相怎么样识别等。只有遵守这个约定,计算机之间才能相互通信交流。
协议(protocol)最终体现为在网络上传输的数据包的格式

有了IP地址和端口号这样的协议,就可以定位到网络中唯⼀的⼀个进程,但还存在⼀个问题: 网络通信是基于二进制数据来传输,如何告诉对方发送的数据是什么样的呢?

网络通信传输的数据类型可能有多种:图片,视频,文本等。同⼀个类型的数据,格式可能也不同,这时就需要使用协议来规定双方的数据格式。

另外:
• 计算机生产厂商有很多;
• 操作系统也有很多;
• 计算机网络硬件设备,还是有很多
如何让这些不同厂商生产的计算机能够相互顺畅的通信?
就需要约定⼀个共同的规则,大家都来遵守。

协议与标准的区别:
协议可以是私下自定义的,而标准需要有一个具有公信力的官方的组织,公开发布并得到大家的支持和拥护。

协议分层

网络通信是一件非常复杂的事情,如果用一个协议来约定上述所有的细节,这个协议就会非常庞大,非常复杂。所以网络协议往往分成几个层次进行定义。
此处谈到的分层,每一层里都有很多协议(对协议进行了分类,就得到了所谓的"层")

把很多协议按照功能分在不同的层级,每个层级都有对应的目标/要解决的问题。上层协议调用下层协议的功能,下层协议给上层协议提高服务。分层而不乱的前提是: 不能跨级交流

网络协议分层的作用:

  1. 封装的效果

分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。
⼀方为接口的实现类(提供方,提供服务),⼀方为接口的使用类(使用方, 使用服务)
• 对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可,降低学习成本
• 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可

  1. 任意层的协议,都是可以灵活替换的(解耦合)

OSI七层模型(只是理论,没有实际运用)

OSI:即Open System Interconnection,开放系统互连

• OSI 七层网络模型是⼀个逻辑上的定义和规范:把网络从逻辑上分为了7层。
• OSI 七层模型是⼀种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输

OSI 七层模型既复杂又不实用,所以 OSI 七层模型没有落地、实现。
实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也就是 TCP/IP 五层(或四层)模型来实现。

TCP/IP五层(或四层)模型

在这里插入图片描述

这个就是现在实际采用的网络分层模型。我们目前接触到的电脑上网大部分都是TCP/IP模型。4G/5G通信就是另外一套专门的模型协议(手机流量上网)

TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议的5层层级结构:

  1. 应用层(具体的应用程序):负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
  2. 传输层(通信双方):负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
  3. 网络层(通信路径的规划):负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层
  4. 数据链路层(两个相邻节点之间的通信):负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层
  5. 物理层(硬件层面上相关约定):负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层

物理层我们考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型。

程序猿打交道最多的就是应用层,写的网络程序都会涉及到应用层。其他的四层的协议都是操作系统内核,硬件和驱动已经实现好了,无需干预。不过我们要重点关注传输层,因为应用层是需要调用传输层提供的接口(API)来进行一些功能的实现的

网络设备所在分层

  • 对于主机,它的操作系统内核实现了从传输层到物理层的内容,也就是TCP/IP五层模型的下四
    层;
  • 对于路由器,它实现了从网络层到物理层,也就是TCP/IP五层模型的下三层;
  • 对于交换机,它实现了从数据链路层到物理层,也就是TCP/IP五层模型的下两层;
  • 对于集线器,它只实现了物理层;

注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两层)、三层路由器(工作在TCP/IP五层模型的下三层)。现在的路由器和交换机功能越来越多,界限也越来越模糊了。有些交换机的功能,路由器也有;有些路由器的功能,交换机也有。有些路由器和交换机,能工作在应用层。比如通过QQ发消息,路由器/交换机就能感知到发的消息内容是啥

封装和分用

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
  • 应用层数据通过协议栈发送时,每层协议都要加上⼀个数据首部(header),这个过程称为封装
  • 首部信息中包含了⼀些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理,这就是分用

QQ里就有一个应用层网络协议,约定了数据按照什么样的格式来组织。在QQ发消息,QQ应用程序就会把要传递的内容组织成"应用层数据包"
网络传输的数据,本质上是二进制字符串/字符串,所以要把结构化数据(包含很多属性,字段)先转成二进制字符串/字符串(序列化)

现在有应用层数据包了, QQ程序接下来就要调用传输层(操作系统内核)的API(socket API),把数据包交给传输层,传输层拿到应用层数据包之后就会对这个数据包进一步地封装,构造成传输层数据包。在传输层典型的协议有两个:TCP和UDP

此处假设使用UDP来作为传输层协议

在这里插入图片描述

传输层构造好数据包之后,就会继续把数据包交给网络层(传输层会调用网络层提供的API,这个调用过程是系统内核自行负责了)

网络层典型的协议是IP协议
IP协议不关心载荷里面是啥,只关心IP报头里的数据
在这里插入图片描述
之后调用数据链路层的API,把IP数据包交给数据链路层的协议,同样也是系统内核负责完成的,程序猿感知不到。这里的API往往是网卡的驱动程序提供的

硬件厂商发布硬件的时候提供配套的软件(驱动程序),通过驱动程序可以让操作系统实现对硬件的精细控制

数据链路层典型协议是"以太网"协议
电脑通过有线网传输数据走的就是"以太网"协议,我们电脑上插的网线也叫做"以太网线"
WiFi则是另外一套数据链路层的协议
因特网则指当前世界上最大的、开放的、由众多网络相互连接而成的特定计算机网络

以太网也有自己的数据包格式,会对上述IP数据包进一步封装
在这里插入图片描述
上述数据已经进入到网卡驱动中了,接下来就要真正发送出去了

到达物理层,上述的以太网帧本质上还是二进制数据,硬件设备要把上述的二进制数据转换为光信号/电信号才真正进行发射

通过交换机/路由器一系列转发之后最终到达收件人的主机
之后就是上述过程的"逆过程"

物理层收到一系列光电信号,把这些信号转成二进制数据交给数据链路层

数据链路层按照以太网协议对数据进行解析(解析报头中的关键信息,为后续的传输/转发打下基础),解析出来的载荷数据是要交给上层(网络层)

网络层的IP协议拿到了IP数据包,按照协议格式进一步解析,解析报头中的关键信息,取出载荷,把载荷再进一步的交给上层(传输层)

传输层拿着UDP的数据包,按照UDP格式进一步解析,解析出关键的信息(要交给哪个端口号对应的进程),以及解析出载荷数据,再把载荷交给对应的应用程序

在应用层,QQ程序拿到了应用数据包
QQ按照自己的协议格式进行解析,拿到数据包里的二进制字符串/字符串转成结构化数据(反序列化),显示到界面上

上述层层包装数据,不停加数据报头的过程,称为"封装"
"分用"就是上述逐层解析数据包的过程

中间的路由器,交换机也要封装分用,也是上述过程,只不过交换机封装分用到数据链路层,即可知道下一步如何转发(工作在数据链路层),路由器封装分用到网络层即可知道下一步如何转发(工作在网络层)

每个协议报头中,都包含对应的信息,告诉上一层要交给哪个协议来处理
要确保分用使用的协议和封装使用的协议对得上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2095887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI问答:.NET核心组成概要、程序运行步骤和查询SDK版本的方法

.NET三大组成 ①Runtime (运行时): CLR:公共语言运行时,执行程序、内存管理、垃圾回收(GC)、安全性检查、异常处理,是跨平台的关键要素。 JIT:实时编译器,将中间语言…

JDBC与数据库之间的操作(增删改查、获取主键、业务逻辑分离、属性文件配置)

参考视频哔哩哔哩 1、Service和Servicelmpl的概念 java中service和servicelmpl是常见的代码组织方式 Service是指业务逻辑的接口,定义了系统对外提供的功能。Servicelmpl是Service接口的具体实现,实现了具体的业务逻辑。 Service和Servicelmpl的好处…

Android自定义View实现不同朝向字体变色

实现效果: 1.一个文字两种颜色 2.实现不同朝向 3.结合ViewPager 思路:TextView可行?系统提供的只能够显示一种颜色,需要自定义View extends TextView:onMeasure()不需要实现 textColor颜色,textSize字体大小…

OpenAI Whisper API (InvalidRequestError)

题意: OpenAI Whisper API(无效请求错误) 问题背景: Im trying to use OpenAI Whisper API to transcribe my audio files. When I run it by opening my local audio files from disk, it worked perfectly. Now Im developing a FastAPI e…

学习WebGl基础知识(二)

学习目标&#xff1a; 掌握WebGl基础知识 学习内容&#xff1a; 创建一个Webgl程序 创建三维上下文对象创建顶点着色器和片元着色器创建和编译顶点着色器和片元着色器创建着色器程序对象绘制图元 创建一个Webgl程序 1.第一步获取画布&#xff0c;创建三维上下文对象 <ca…

一些硬件知识(十七)

电源芯片选型&#xff1a; 1.考虑拓扑结构 2.考虑功率&#xff0c;从而决定自行搭建电路还是选择芯片 3.对于低功耗产品&#xff0c;静态电流是非常重要的因素&#xff0c;一定重要考虑&#xff1a; 同步buck省去了续流二极管&#xff0c;效率比异步的高。 如果真的比耐压值…

ESP32小车:1.硬件模块与连接

一、硬件模块 总的元器件清单:亚克力板(三轮),两个普通减速电机,一个开关模块,一个 首先,需要一块亚克力单层底板,推荐随便在淘宝上买一块2WD亚克力单层板,比如: 最好亚克力板自带电机,买一套也不过15块。如果没有需另外购买两个普通TT直流减速电机和轮子。…

基于yolov8的102种昆虫检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的102种昆虫检测系统是一款高效、准确的昆虫识别工具&#xff0c;它利用YOLOv8这一先进的目标检测算法&#xff0c;实现了对102种不同昆虫的实时检测与识别。该系统在农业、生态研究、生物多样性保护等多个领域具有广泛的应用价值。 YOLOv8算法以其高…

HTML沙漏爱心

目录 写在前面 完整代码 下载代码 代码分析 系列文章 写在最后 写在前面 教你用HTML语言实现炫酷的沙漏爱心,该代码不仅可以用电脑运行,手机、平板也可以直接运行哦。 完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><…

【Linux】:文件IO

目录 1.C文件接口 1.1 当前路径是什么&#xff1f; 1.2 "w"和"a"​编辑 2.系统文件I/O 2.1 "比特宏"标识符的实现: 2.2 open 1.系统默认创建文件的权限只写 2.设置新建文件的权限 3. 覆盖写/清空写/追加写 3.访问文件的本质 3.1 文件…

茴香豆Web实践

茴香豆 是由书生浦语团队开发的一款开源、专门针对国内企业级使用场景设计并优化的知识问答工具。 茴香豆特点&#xff1a; 三阶段 Pipeline &#xff08;前处理、拒答、响应&#xff09;&#xff0c;提高相应准确率和安全性 打通微信和飞书群聊天&#xff0c;适合国内知识问…

提高工作效益方法(一)

目录 如何提高工作效率? 如何提高工作效率?&#xff08;每日工作安排&#xff09; 怎么在职场做好时间管理&#xff1f; 如何提高工作效率? 提高工作效率的关键在于采用一系列策略和方法&#xff0c;以确保工作能够高效、有序地进行。通过这些方法&#xff0c;可以有效地提…

【whisper】使用whisper实现语音转文字

whisper需要ffmpeg支持 官网下载ffmpeg https://www.gyan.dev/ffmpeg/builds/下载完毕后解压放到合适的位置 添加环境变量 在cmd中输入以下 ffmpeg -version出现下面结果代表成功 安装whisper pip install openai-whisper在vscode中运行 测试代码 import whisperif __n…

【c++】cout打印char * 或者char[]的细节详解

目录 char* 类型 1.打印指向的字符串 2.打印指针指向的地址 问题描述 解决方法 char型数组 1. 想要输出字符串 2. 想输出字符数组的地址 printf 和cout 的对比 1.打印首字符 2.打印字符串 3.打印字符串首地址 &#x1f497;感谢阅读&#xff01;&#x1f497; char*…

新火种AI|减脂增肌没捷径?对不起,那是AI 出现以前的事情了...

作者&#xff1a;小岩 编辑&#xff1a;彩云 对于很多人来说&#xff0c;“拥有完美的身材”是人生的重要目标之一&#xff0c;练出好身材的人也会以此为傲&#xff0c;会把自己的好身材po到社交媒体上。换个角度来说&#xff0c;为了让自己社交媒体上的形象足够完美&#xf…

Axure RP下载+详细安装步骤资源百度云盘分享

众所周知&#xff0c;Axure全称“axure rp”&#xff0c;是一款专业的快速原型设计工具。 它能帮助网站需求设计者&#xff0c;快捷而简便的创建基于网站构架图的带注释页面示意图、操作流程图、以及交互设计&#xff0c;并可自动生成用于演示的网页文件和规格文件&#xff0c…

小琳python课堂:Python核心概念 类和对象

大家好&#xff0c;这里是小琳python课堂&#xff01;今天我们来聊聊Python中的类&#xff08;Class&#xff09;和对象&#xff08;Object&#xff09;&#xff0c;这是面向对象编程&#xff08;OOP&#xff09;的核心概念哦&#xff01;&#x1f31f; 面向对象编程就像是用“…

基于 INFINI Pizza 为 Hugo 静态站点添加搜索功能

INFINI Pizza 是 INFINI Labs 即将发布的一个基于 Rust 编写的搜索引擎&#xff08;即将完全开源&#xff09;&#xff0c;目前已经完成基本的搜索能力&#xff0c;并且基于 INFINI Pizza 的核心引擎&#xff0c;提供了一个 WASM 版本的超轻量级内核&#xff0c;可以很方便的嵌…

MicroNet关键代码解读(Micro-block与Dynamic Shift-Max的实现代码)

论文地址&#xff1a;https://arxiv.org/pdf/2011.12289 中文翻译&#xff1a;https://hpg123.blog.csdn.net/article/details/141772832?spm1001.2014.3001.5502 发表时间&#xff1a;2022 项目地址&#xff1a;https://github.com/liyunsheng13/micronet 在MicroNet论文中提…

查文献技巧,数模国赛必须掌握!

参加数学建模竞赛&#xff0c;拿到题目后第一件事就是去查文献&#xff0c;把题目的背景知识看懂。本文介绍查文献的一些技巧。 先看硕博士论文 硕博论文会对研究的问题有详细的背景和基础知识介绍&#xff0c;可帮助我们快速理解题目。 有个经典段子&#xff1a;学士、硕士…