【Linux网络与网络编程】01.初识网络

一、计算机网络的发展历史

计算机是人的工具,人要协同工作,注定了网络的产生是必然的。

二、协议

计算机之间的传输媒介是光信号和电信号,通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息,要想传递各种不同的信息就需要约定好双方的数据格式。

那么只要通信的两台主机约定好协议就可以了吗? 定好协议,但是你用频率表示 01,我用强弱表示 01,就好比我用中国话,你用葡萄牙语一样,虽然大家可能遵守的一套通信规则,但是语言不同,即是订好了基本的协议,也是无法正常通信的。

所以,完善的协议,需要更多更细致的规定,并让参与的人(计算机生产厂商;计算机操作系统;计算机网络硬件设备)都要遵守。

如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来,约定一个共同的标准让大家都来遵守,这就是 网络协议。

2.1  对协议的宏观认识

2.1.1 协议分层

在上面这个例子中我们可以看到分成了两层:语言层和设备通信层。

我们从今后看待协议要有两种视角:

视角1(小白视角):同层协议是直接通信

视角2(工程视角):同层协议不是直接通信

2.1.2 OSI七层模型

OSI七层网络模型称为开放式系统互联参考模型,它是一个逻辑上的定义和规范。把网络从逻辑上分为了7 层,每一层都有相关、相对应的物理设备,比如:路由器,交换机。OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输,它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚, 理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,但是它既复杂又不实用。

其实在网络角度,OSI 定的协议 7 层模型其实非常完善,但是在实际操作的过程中,会话层、表示层是不可能接入到操作系统中的,所以在工程实践中最终落地的是 5 层协议。 

2.1.3 TCP/IP五层模型

TCP/IP 是一组协议的代名词,它包括许多协议共同组成了 TCP/IP 协议簇。TCP/IP通讯协议采用了5 层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

2.2 对TCP/IP协议簇的认识

2.2.1 为什么要有TCP/IP协议?

• 首先,即便是单机,你的计算机内部其实都是存在协议的,比如:其他设备和内存通信会有内存协议。其他设备和磁盘通信会有磁盘相关的协议,比如: SATA,IDE,SCSI 等。只不过我们感知不到罢了。而且这些协议都在本地主机各自的硬件中,通信的成本、问题比较少。

• 其次,网络通信最大的特点就是主机之间变远了。任何通信特征的变化,一定会带来新的问题,有问题就得解决问题,所以需要新的协议

所以,为什么要有 TCP/IP 协议?本质就是通信主机距离变远了,会产生各种的问题,而这些问题的解决方案就是TCP/IP协议。

2.2.2 为什么TCP/IP协议会分层?

从上图中提出的4个问题可以看出:问题1对应的是链路传输层,问题2对应的是网络层,问题3对应的是传输层,问题4对应的是应用层。所以TCP/IP协议能分层的前提是这些问题本身是能分层的。

2.3 对协议的深层次理解

2.3.1 网络与操作系统的关系

网卡是硬件的一部分,操作系统要对它进行管理,所以相应的操作系统要实现网络的相关功能。可以理解为网络是操作系统内部的一个模块,但是这个模块在所有的操作系统上是相同的。

2.3.2 协议到底是什么?

由2.3.1可知,操作系统内部可能存在着大量的协议,操作系统自然要对这些协议通过先描述后组织进行管理,故而协议就是两个操作系统直接为了通信而约定出来的结构体。操作系统是C语言写的,所以TCP/IP网络协议也是用C语言写的。

三、网络传输的基本流程

3.1 局域网(以以太网为例)网络的传输流程

3.1.1 局域网通信原理

首先要明确一点:两台主机在同一个局域网,是能够直接通信的。 (原理类似上课)

以太网中,任何时刻都只允许一台机器向网络中发送数据,如果有多台同时发送的话,会发生数据干扰,我们称之为数据碰撞。所有发送数据的主机要进行碰撞检测和碰撞避免。在没有交换机的情况下,一个以太网就是一个碰撞域。局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标MAC地址判定。

3.1.2 认识MAC地址

MAC 地址用来识别数据链路层中相连的节点,长度为 48 位(6 个字节),一般用 16 进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)。它在网卡出厂时就确定了,是不能修改的。MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址)。

查看MAC地址:

Linux       下使用 ifconfig

Windows 下使用 ipconfig /all

3.1.3 局域网网络传输流程图

而其中每层都有协议,所以当我进行进行上述传输流程的时候,要进行封装和解包与分用。

明确一下概念:

1. 报文

• 报头就是对应协议层的结构体字段。除了报头,剩下的叫做有效载荷

• 报文 = 报头 + 有效载荷

2. 封装和分用

3.2 跨网络传输流程

跨网段的主机的数据传输过程中,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。

3.2.1 认识IP地址

IP 协议有两个版本:IPv4 和 IPv6。

IP地址是在IP协议中用来标识网络中不同主机的地址。对于 IPv4 来说,IP 地址是一个 4 字节32 位的整数;我们通常也使用 "点分十进制" 的字符串表示 IP 地址,例如 192.168.0.1 ;用点分割的每一个数字表示一个字节,范围是 0 - 255。

MAC地址 VS IP地址

MAC地址是局域网中的唯一标识符,而IP地址是网络逻辑层的通信标识。在数据传输过程中,是根据目的IP进行路由的,MAC地址是会变化的,而IP地址是一直不变的。

为了加深我们的理解,请看这张示意图: 

为什么要去目标主机,先要走路由器?

在任何主机看来,路由器也是一台主机。当主机间进行跨网络通信时,源主机会将数据交给路由器,再由路由器将数据交给目标主机,这可以使得每台主机都是在局域网中工作的。

因此我们可以断定路由器上一定是存在着不同局域网的驱动程序的。

这样的话我们就可以理解了MAC地址和IP地址了。目的 IP 是一种长远目标,Mac 是下一阶段目标,目的 IP 是路径选择的重要依 据,mac 地址是局域网转发的重要依据。

3.2.2 跨网络传输流程图

示意图:

 网络通信的宏观流程:

每台主机都有网络层,故而都有路由的功能,发送数据的地址经由自己的判断时局域网内路由还是教育路由器进行跨网传输。 

IP 网络层存在的意义:提供网络虚拟层,让世界的所有网络都是 IP 网络,屏蔽最底层网络的差异。

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

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

相关文章

使用 Python 进行链上数据监控:让区块链数据触手可及

使用 Python 进行链上数据监控:让区块链数据触手可及 区块链技术正以前所未有的速度改变着各行各业,特别是在金融、供应链、物联网和智能合约等领域的应用,已经成为了一种新常态。然而,随着区块链网络的快速扩展和去中心化特性的不断强化,数据的可视化与监控变得愈发重要…

【SMBIOS数据块类型列表】

SMBIOS数据块类型列表 SMBIOS数据块类型列表**SMBIOS 数据块类型列表****如何查看实际的 SMBIOS 数据块?****总结** SMBIOS数据块类型列表 在 SMBIOS(System Management BIOS)中,Type 是用来标识不同类型的数据块的。每种类型对应…

【测试】每日3道面试题 3/30

每日更新,建议关注收藏点赞。 白盒测试逻辑覆盖标准?哪种覆盖标准覆盖率最高? 5种。语句覆盖、分支/判定覆盖、条件覆盖、条件组合覆盖【覆盖率最高,所有可能条件组合都验证】、路径覆盖【理论上最高,但实际很难实现】…

NFS挂载异常排查记录

互相PING服务器看是否通;在ubuntu下看下服务器是否正常运行。导出目录是否导出了。最后发现在挂载目录的地方目录路径和后面没有加空格。

1--当「穷举」成为艺术:CTF暴力破解漏洞技术从入门到入刑指南(知识点讲解版)

当「穷举」成为艺术:CTF暴力破解漏洞技术从入门到入刑指南 引言:论暴力破解的哲学意义 “世界上本没有漏洞,密码设得简单了,便成了漏洞。” —— 鲁迅(并没有说过) 想象你是个不会撬锁的小偷,面…

Java实战:实现用户的登录注册功能

系列文章目录 Java文件 I/O流的操作实战和高级UI组件和事件监听的综合 文章目录 系列文章目录前言一、大致流程思路分析:二、定义用户类:三、服务层的实现: 1.保护用户数据功能的实现2.登录操作的实现 四、实现用户的注册界面: 大…

SQLAlchemy 支持特殊字符

postgresql 实践 pydantic 实践(一)基础 pydantic 实践(二)数据校验 SQLAlchemy 介绍与实践 SQLAlchemy 支持特殊字符 SQLAlchemy 支持特殊字符 1. 字符集介绍分析2. MySQL 支持特殊字符2.1. 更新 MySQL 字符集为 utf8mb42.2 更新…

如何看待职场中的“向上管理”

向上管理的本质,是提供一份更精确的人力产品说明书, 利用市场的逻辑,引导领导,按照你的心意,使用你这款产品。 公司获得更高的产出,领导获得更多的成果,你获得了自由支配的时间, 这是一场正和博弈。 ​ 图片来源:网络 (1)具体案例: 把自己当成一款产品,使用者…

AIOHTTP

文章目录 AIOHTTP主要特点库安装在一个命令中安装所有加速 入门客户端示例服务器示例: 开发模式aiohttp 3 有什么新功能?依赖关系 客户端快速入门发起请求在 URL 中传递参数响应内容和状态码二进制响应内容JSON 请求 注意JSON 响应内容流式响应内容更复杂…

JavaFX基础- Button 的基本使用

说明 本文记录一下对Button的基本使用,包括但不限于 样式的设置,事件的监听等。 按钮样式的设置 方式一 : Java代码的方式 // 创建一个按钮Button button new Button("按钮");// 设置按钮的位置button.setLayoutX(50);button.set…

DeepSeek-R1国产大模型实战:从私有化部署到内网穿透远程使用全攻略

文章目录 前言1. 安装Ollama2. 安装DeepSeek-r1模型3. 安装图形化界面3.1 Windows系统安装Docker3.2 Docker部署Open WebUI3.3 添加Deepseek模型 4. 安装内网穿透工具5. 配置固定公网地址 前言 最近,国产AI界的黑马——Deepseek,简直火得一塌糊涂。不过…

openwrt24.10.0版本上安装istoreOS的屏幕监控插件

lcdsimple 插件支持在软路由下面显示统计信息到 HDMI 或者 VGA 上。 手动安装方法: 保证 quickstart 版本大于 0.9.7 安装 lcdsimple 具体方法: opkg update opkg install quickstart opkg install lcdsimple 手动下载 QUICKSTART 跟 LCD SIMPLE&…

卷积神经网络 - ResNet(残差网络)

残差网络(Residual Network,ResNet)通过给非线性的卷积层增加直连边 (Shortcut Connection)(也称为残差连接(Residual Connection))的方式来提高信息的传播效率。 这是一种特殊的深度神经网络结构,由 Kaiming He 等人在 2015 年提出,目的是解…

质因数个数--欧拉函数中统计纯素数

和互质数不同&#xff0c;这里统计的是纯素数部分 就是x/i那一部分 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair<ll,int> PII; int n,m,k; ll eular(ll x) { ll an0;ll px;for(ll i2;i*i<x;i){if(x%i…

2025年3月电子学会c++五级真题

结绳 #include <bits/stdc.h> using namespace std;int n,a[10010];int main() {cin>>n;for(int i 0;i<n;i){cin>>a[i];}sort(a0,an);//将a数组从小到大排序double sum 0;for(int i 0;i<n;i){sum (suma[i])/2;}cout<<(int)sum;return 0; } 最…

用Nginx实现负载均衡与高可用架构(整合Keepalived)

前言 在分布式架构中&#xff0c;负载均衡和高可用是保障系统稳定性的两大核心能力。本文将深入讲解如何通过Nginx实现七层负载均衡&#xff0c;并结合Keepalived构建无单点故障的高可用架构。文末附完整配置模板&#xff01; 一、Nginx负载均衡实现方案 1. 核心原理 Nginx通…

springBoot与ElementUI配合上传文件

以下是使用Vue CLI创建的Vue项目&#xff0c;结合Element UI来实现文件上传功能的完整示例。 步骤 创建Vue项目&#xff1a;确保你已经安装了Vue CLI&#xff0c;若未安装&#xff0c;可使用以下命令安装&#xff1a; npm install -g vue/cli然后创建一个新的Vue项目&#x…

黑盒测试的测试用例构成的八点要素

测试用例: 是为测试项目而设计的执行文档 作用&#xff1a; 防止漏测实施测试的标准 编写格式&#xff1a; 用例编号:项目 模块 编号用例标题:预期结果(测试点)模块/项目:所属项目或模块优先级:表示用例的重要程度或者影响力P0~p4(P0最高)前置条件:要执行此条用例&#xf…

蓝桥刷题note11(好数)

1&#xff0c;好数 一个整数如果按从低位到高位的顺序&#xff0c;奇数位 (个位、百位、万位 ⋯⋯ ) 上的数字是奇数&#xff0c;偶数位 (十位、千位、十万位 ⋯⋯ ) 上的数字是偶数&#xff0c;我们就称之为 “好数”。 给定一个正整数 NN&#xff0c;请计算从 1 到 NN 一共…

Keil编译生成的axf文件的介绍

在 Keil 开发环境&#xff08;如 Keil MDK&#xff09;中&#xff0c;.axf 文件是一种 可执行文件格式&#xff0c;主要用于 ARM 处理器的嵌入式开发。它的作用类似于 ELF&#xff08;Executable and Linkable Format&#xff09;格式&#xff0c;包含了可执行代码、调试信息、…