Linux:网络相关概念的认识

news2025/2/25 12:28:40

文章目录

  • 基本认知
  • 数据跨网络传输
    • 初识ip地址
  • 端口号
    • 端口号的理解

本篇是基于前面对于网络的基本框架搭建,进而进行相关概念的进一步理解,为后续准备

基本认知

那么首先总结一下一些基本的相关结论性的信息

  1. 对于任何协议来说,它本身都应该拥有把报头和有效载荷进行分离的能力,这是在前面的基础认知中已经有的一个概念,也正是因为有这样的结论,才能做到把数据不断的进行封装传递到另外一个网卡,再不断向上解压缩的过程,这样的结论使得每一层协议实际上看到的内容是一样的,这也是所有操作系统都必须遵循的一个原则
  2. 在局域网中,两台主机之间是可以直接进行通信的,那局域网通信的原理就是,每一台主机都有一个属于自己的专属48位的Mac地址,那这个Mac地址本身就是来标记当前主机在局域网的信息,所以在一个局域网中,一个主机想向另外一个目标主机发送一条信息的时候,就必须要面临的问题是,谁发,给谁发的问题,因此就会有根据报头检测,进而对于有效载荷进行分离,把对应的Mac地址进行比对,如果是给自己发的信息就进行保留,如果不是给自己发的信息就进行丢弃,这样就能有效的找到属于自己的包,那这带来的一个结论也是显而易见的,在一个局域网通信的时候,实际上这个包在传递的过程中是所有的主机都是有看到信息的权利的,至于想不想接受是一回事,但是都是可以看到的,所以进而又引出了对于碰撞域的概念理解

那有了上面的结论,那下面来进入下面的话题,叫做数据的跨网络传输

数据跨网络传输

现在有这样的场景,有一份数据要从主机A传递到主机B,那如果这两个主机是处于同一个网络自然直接传递即可,但是如果跨网络,就需要借助路由器这样的设备,路由器设备的工作效果就是可以连通左侧和右侧的两个子网,进而进行两个子网之间的设备来进行通信,具体的效果如下所示

在这里插入图片描述
在上图中出现了陌生的概念,令牌环网,那首先介绍一下这个概念

对于令牌环网来说,它的一个特点是,在任何时刻只允许在局域网中有一台主机,保证的原理就是借助一个特定的标识数字,当有一个主机拿到了这个标识数字,那么就可以进行通信,但是如果没有拿到这个数字就不能进行通信,这和以太网的处理原理是不一样的,以太网对于数据冲突的解决方式是借助了一些算法,来进行碰撞检测和对应的碰撞处理

那这个令牌环网的逻辑其实和前面锁的概念是很像的,都是用一个特定的数据来进行表示持有,而在这个令牌环网的概念中,可能具体的实现措施是借助了这样的一个类似于锁的概念来实现的,这个概念其实并未特别广泛的使用,这里想要表达的意思是,令牌环网和以太网的这个驱动程序,它们都是隶属于数据链路层,只不过是底层的协议可能不太一样,以太网有以太网的协议,对应的令牌环网也有,但是不可否认的是,这并不重要,因为网络已经实现了分层解耦的概念,这意味着从底层的角度出发,把这两个网进行对应的替换并不会影响整体网络的情况,网络是一个层状的结构

那这里想要输出的观点是,如果想要把数据从一个网络交给另外一个网络,那我当前的主机是如何知道这件事的呢?因此就引入了本篇要介绍的第一个概念:ip地址

初识ip地址

什么是ip地址

现在对于ip地址进行一个初步的认知,未来会有更加详细的解释

从一个非专业的角度来讲,ip地址通俗来说就是能够保证一个主机在全网的唯一性,这样的描述可能未必正确,但是在绝大多数的情况下是成立的,而ip地址和Mac地址是两个什么概念呢?简单来说,ip地址可以保证的是全网的唯一性,而Mac地址只是运用在局域网中,在局域网中可以保证自己的特定性

ip地址是分为共有ip和私有ip的,那对于公网ip实际上是见到很多次的,例如在Linux的云服务器上就使用过公网ip的概念,那不管怎么说,ip地址都是凸显一个唯一性,而Mac地址会随着所处的局域网的改变而发生改变

主流的ip地址

在现在社会,主流的ip地址是ipv4,简单来说就是这个ip地址占用的是四个字节,例如有这种形如192.168.1.1这样的,就叫做是ipv4的ip地址,公网ip能够标识互联网中特定主机的位置,在未来进行传输的过程中,就可以借助这个ip地址在特定的路径中进行转发,进而实现从一个主机到另外一个主机这样的一个过程

那借助路由器可以实现信息的传递,那具体是如何实现的?我们通过下面的这个图来进行解释

在这里插入图片描述
那从上面的图示信息中我们可以看出的一个基本的结论是,对于这个路由器来说,它既可以识别以太网的信息,也可以识别令牌环网的信息,它拥有可以把旧的报头丢掉,新的报头装上去的功能,再不断地进行新的传递和识别,因此我们说,作为底层的局域网对于网络层来说重要吗?其实并不重要,因为在ip协议往上看,都无所谓,底层已经被封装的严严实实,只需要看ip协议网上看即可,因此引出这里的下一个结论:

ip协议屏蔽了底层网络的差异化,靠的就是工作在ip层的路由器

ip实现了全球主机的软件虚拟层,一切皆是ip报文

于是如果有两个非常远距离的信息,它们是如何进行传递的呢?

在这里插入图片描述
如上图所示,借助所处在网络层的路由器,就可以实现远距离传输,当然这中间必然有很多的细节,未来会对这些细节进行一一阐述

端口号

下面介绍的下一组概念叫做端口号

当一些数据想要进行网络通信的时候,必然首先要把对应的进程运行起来,才能谈网络通信的概念,而真正通信的概念,也必然是要有用户来进行发起的,一个基本的逻辑是可以通过ip地址,来把数据从a主机运送到b主机去

在网络协议中,有四层协议,分别是数据链路层,网络层,传输层和应用层,那其中传输层和网络层是在操作系统内部实现的,而在通过网络实现通信的时候,本质上是进程a向进程b发送对应的数据请求,只不过是进程a和进程b是使用了对应的系统调用来完成的通信过程,而在平时的日常app中,绝大多数的情况都是在远程有一个云服务器,它会提供一个服务端,那在未来用户的手机上会有一个用户端,服务端和用户端进行相互交互,就能实现一个交换数据的过程,所以网络通信的本质,就是进程间通信

那谈及进程间通信,就又要谈及的话题是,进程间通信的本质,就是让两个不相关的进程看到同一份资源,进而才能进行进程间通信,那么在网络通信的本质,就可以理解为是网络协议栈利用网络的资源,来使得让不同的进程看到了同一份资源,一个从网络内写,一个从网络里面读,就能拿到最终想要的数据

在前面的理论基础中对于报文,报头,有效载荷有一个基本的认识,那么这如何与端口号建立联系呢?其实,每一层协议想要解决的问题就是把自己的有效载荷交给上层协议,在这当中,例如在应用层当中有各种各样的应用层协议,那在底层的操作系统中只是收到了一个报文,那操作系统应该进行怎么操作封装,来最终把这些信息传递给哪一个具体的应用呢?于是就有了端口号的概念,这要求上层和传输层之间必须约定好一个具体的方案,而这个方案就能够实现的效果是,把数据准确的从传输层传递给上层,那这个标识其实就是端口号

端口号是会存储在对应的传输层协议中的,现在这里只是对于这个过程有一个比较基础的认识,如果现在想要实现一个基本的代码,那么首先要做到的一点就是,想办法让服务器的应用层绑定一个端口号,一旦绑定了这个端口号,那么在传递的过程中在报文中就要带上和端口有关的信息,在未来传递到应用层后,就会进行对应的解析,提取出端口号,把有效载荷给到对应的端口号即可

那这个端口号,对于客户端和服务端来讲,都能成为一个唯一的标识,作为标识该主机上的某一个特定的进程,所以在网络中可以理解到,进程可能有10个8个或者更多,但是网络协议栈只有一套,每一个协议栈都是一个公共的资源,在收到对应的信息后,都能把信息转交给另外一个特定的进程,所以就必须有一个端口号来做对应的识别,这样传输层就能把数据传递给一个指定的进程了

端口号的理解

对于端口号来说,先从代码的角度来认识,端口号其实就是传输层协议的一个内容,那这个内容通常来说是一个两字节的正数,端口号通常用来表示一个进程,那么就会告诉操作系统来说,底层收到了哪一个具体的数据,最后要保证把对应的数据交给对应绑定的特定端口号的进程,这是一个基本的认知

根据前面的内容来看,对于ip地址的理解要理解到,ip地址可以标识唯一的一台主机,那这台主机的端口号又能标识唯一的一个进程,这就意味着一个端口号只能被一个进程所绑定,端口号的英文一般叫做是port,那就意味着这个端口号会成为主机上的一个进程的标识,这也就意味着,借助一个ip地址和一个端口号,就能立刻定位到全网的一个唯一的进程,这样就能做到精确的访问

客户端认为,只要有一个ip地址和一个端口号,就能成为互联网的唯一一个进程,那如果服务端也是这样,那么就能实现全网中两个不同的进程可以实现通信了,这样就能互相标记对方的唯一性,所以在通信的过程中,只需要在报文中携带原来ip的端口,并且把这个端口想办法传递给另外一个主机,那么这种基于ip地址和端口的通信方式,就叫做是socket,那么socket本身来说也就是ip地址加上端口号就是socket本身的含义

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

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

相关文章

Langchain-chatchat+ChatGlm3-6b部署

我的环境 台式机 内存:16GB 显卡:GTX1060-6G 1. 基础环境准备 1.1. 安装anaconda,创建环境python版本3.11 conda create -n chatglm3 python3.11 conda activate chatglm3 1.2. 搭建cuda环境 # 查看cuda版本,版本是CUDA V…

如何订阅Midjourney

Midjourney介绍 Midjourney作为目前AI绘画领域效果卓越且备受青睐的工具,对于新用户而言,可能无法享受到免费试用的机会。因此,为了持续利用这款软件进行绘画创作,用户需要购买会员资格并开通订阅服务。那么,关于midj…

Redis数据存储的细节

原文章地址 : 深入学习Redis(1):Redis内存模型 - 编程迷思 - 博客园 (cnblogs.com) 1.概述 关于Redis数据存储的细节,涉及到内存分配器(如jemalloc)、简单动态字符串(SDS)、5种对象…

Python入门(三)

序列 序列是有顺序的数据集合。序列包含的一个数据被称为元素,序列可以由一个或多个元素组成,也是可以没有任何元素的空序列。 序列的类型 元组(定值表):一旦建立,各个元素不可再更变,所以一…

建设IAM/IDM统一身份管理,实现系统之间的单点登录(SSO)

企业实施身份管理的现状: 1.身份存储分散,不能统一供应诸多应用系统,企业用户信息常常存在于多个系统,如HR系统有一套用户信息,OA系统也有一套用户信息,身份存储不集中,不能统一地为诸多应用系…

ChatGPT :确定性AI源自于确定性数据

ChatGPT 幻觉 大模型实际应用落地过程中,会遇到幻觉(Hallucination)问题。对于语言模型而言,当生成的文本语法正确流畅,但不遵循原文(Faithfulness),或不符合事实(Factua…

clickhouse学习笔记01(小滴课堂)

老王经历-数据库架构演变历史 你是否能分清OLTP和OLAP系统 急速掌握-数据库里面行存储和列式存储 新一代列式存储ClickHouse介绍和应用场景说明 Linux服务器容器化部署ClickHouse实战 记得要在安全组里配置开放端口号。 到这我们就安装完了。 简单使用: 创建你的第…

C语言基础练习——Day10

目录 选择题 编程题 不用加减乘除做加法 找到所有数组中消失的数字 选择题 1、求函数返回值,传入-1,则在64位机器上函数返回 int func(int x) {int count 0;while (x){count;x x&(x - 1);//与运算}return count; } A 死循环B 64C 32D 16 答案&…

C# 打开文件对话框(OpenFileDialog)

OpenFileDialog&#xff1a;可以打开指定后缀名的文件&#xff0c;既能单个打开文件也能批量打开文件 /// <summary>/// 批量打开文档/// 引用&#xff1a;System.Window.Fomrs.OpenFileDialog/// </summary>public void OpenFile(){OpenFileDialog dialog new Op…

【解读】保障软件供应链安全:SBOM推荐实践指南(含指南获取链接)

2023年11底&#xff0c;美国NSA&#xff08;National Security Agency&#xff09;、CISA&#xff08;Cybersecurity and Infrastructure Security Agency&#xff09;等多个政府机构部门组成的ESF&#xff08;Enduring Security Framework&#xff0c;持久安全框架&#xff09…

力扣L15--- 67.二进制求和(JAVA版)-2024年3月17日

1.题目描述 2.知识点 注1&#xff1a; 二进制用 %2 /2 3.思路和例子 采用竖位相加的方法 4.代码实现 class Solution {public String addBinary(String a, String b) {StringBuilder sbnew StringBuilder();int ia.length()-1;int jb.length()-1;int jinwei0;int digit1,d…

龙芯新世界系统(安同AOCS OS)安装Cinnamon桌面最新版6.0.4

龙芯的新世界系统安同AOCS OS是十分优秀的操作系统&#xff0c;处于纯社区方式运行&#xff0c;她的各组件更新得很及时&#xff0c;很多组件都处于最新的状态&#xff0c;给我们安装使用最新的开源软件提供了很好的基础。由于本人一直使用Cinnamon桌面环境&#xff0c;各方面都…

C++初阶:类与对象(尾篇)

目录 1. 构造函数与初始化列表1.1 对象的创建与构造函数的初始化1.2 初始化列表及构造函数存在的意义1.3 explicit关键字与构造函数的类型转换 2. static成员变量与static成员函数2.1 static成员变量2.2 static成员函数 3. 日期类流插入操作符的重载与友元3.1 友元3.2 友元函数…

【OpenGL手册19】几何着色器

目录 一、说明 二、渲染管线的逻辑 三、几何着色器 四、使用几何着色器 五、造几个房子 六、几何着色器渲染爆破物体 一、说明 如果说用顶点和片段着色器干了什么&#xff0c;其实不多。加入几何着色器&#xff0c;能够加大渲染能力&#xff0c;简化数据结构&#xff0c;…

【Linux】对进程PCB的理解查看进程信息的方法

一、学习准备&#xff1a;对操作系统工作模式的理解 首先我们要清楚的是&#xff0c;操作系统是一个进行软硬件资源管理的软件。操作系统对下要管理好底层硬件。每一个硬件的生产产商都会给他们的产品提供对应的驱动程序&#xff0c;驱动程序是特定于某一硬件或系统设备的软件组…

参与者中心方案设计

参与者中心方案设计 ⼀、背景介绍 为适应客⼾多元化&#xff0c;随着业务发展&#xff0c;需要⽀持以平台为基础⽀持多租⼾企业⼊驻⽅式进⾏对外放。 1.1 需求来源 客⼾、产品 1.2 需求描述 ⽀持多租⼾ ⽀持客⼾⾃定义⻆⾊、菜单权限 ⽀持根据不同⻆⾊设置不同数据权限控…

备战蓝桥杯Day26 - 二叉搜索树查询和删除操作

一、查询 递归查询 寻找的值比根节点大&#xff0c;遍历右子树&#xff1b; 寻找的值比根节点小&#xff0c;遍历左子树。 def qurey(self, node, val):if not node: # 没有节点&#xff0c;返回空return Noneif node.data < val:return self.qurey(node.rchild, val)el…

Spring MVC 如何返回响应

上期我们讲请求的时候&#xff0c;每个方法返回的数据就是响应&#xff0c;我们也可以返回一个静态页面&#xff0c;设置响应的状态码&#xff0c;Header信息等。 1. 返回静态页面 我们先在项目的static文件夹下创建一个HTML文件作为我们返回的页面&#xff1a; <!DOCTYPE…

OLAP与数据仓库和数据湖

OLAP与数据仓库和数据湖 本文阐述了OLAP、数据仓库和数据湖方面的基础知识以及相关论文。同时记录了我如何通过ChatGPT以及类似产品&#xff08;通义千问、文心一言&#xff09;来学习知识的。通过这个过程让我对于用AI科技提升学习和工作效率有了实践经验和切身感受。 预热 …

粤嵌6818嵌入式开发入门教程

学习目标 1.了解嵌入式开发 2.开发环境的搭建 3.Linux操作系统的基本操作 一、了解嵌入式开发 以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软硬件可裁剪&#xff0c;适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 1.嵌入式可以干…