Linux网络编程:网络协议及网络传输的基本流程

news2024/11/16 13:29:58

目录

一. 计算机网络的发展

二. 网络协议的认识

2.1 对于协议分层的理解

2.2 TCP/IP五层协议模型

2.3 OSI七层模型

三. 网络传输的流程

3.1 同一网段中计算机通信的流程

3.2 不同网段中计算机设备的通信

3.3 对于IP地址和MAC地址的理解

3.4 数据的封装和解包

四. 总结 


一. 计算机网络的发展

独立模式:每一台计算机之间都是相互独立的,如果几台计算机要协同工作,需要相互之间传输数据,那么就需要人工将数据从一台计算机拷贝到另一台计算机。

图1.1 网络互联

网络互联:将多台计算机连接在一起实现数据共享。

图1.2 网络互联

局域网:随机互联网技术的发展,计算机数量的增多,通过交换机和路由器,将一定区域内的所有计算机连接起来,让他们可以相互通信。

图1.3 局域网

广域网:随着计算机数量的增多,将更大范围、更多计算机连接起来的网络,可称为广域网。广域网和局域网是相对的概念,在中国境内,我们可以认为,每个省的网络属于局域网,而全国范围的网络是广域网,而在全球范围内,又可以认为中国的网络属于局域网。

图1.4 广域网

二. 网络协议的认识

2.1 对于协议分层的理解

软件的设计是分层的,分为前端和后端,前端就是给用户的界面,后端进行数据处理、数据运算等工作,用户要通过前端将信息交付给后端进行处理,后端也要将处理结果反馈给前端,前端和后端,就可以被视为软件的两层。网络协议的设计也是分层的

分层设计的好处在于:(1). 更好的适应复杂的场景。 (2).实现不同功能之间的解。

以图2.1所示的用户通信场景为例,上层用户遵循语言协定(汉语、英语等),下层的通信设备也遵守各自的协议,如:采用电脑发微信,不同电脑之间就要遵守特定的电脑协议。此时,如果两名老外要通过英语发送信息,那么就只需要改变上层的用户协议,而底层通信设备的协议不用修改,再比如通信设备变为了卫星电话,那么只需改变通信设备之间的协议即可,用户层协议无需修改。这就是协议的分层设计,能够实现不同功能间的解耦。

图2.1 分层设计协议

2.2 TCP/IP五层协议模型

TCP/IP是一组协议的代名词,TCP表示传输层协议,IP表示网络层协议。TCP/IP协议可分为以下五层,每一层都呼叫下一层网络来实现自身需求。

  • 物理层:负责通过光/电信号来传输数据,如光纤、集线器、调制解调器,都属于物理层的设备,集线器的工作是将信号放大,以便实现远距离数据传输,调制解调器则对信号进行变频、转化等操作。
  • 数据链路层:负责设备之间数据帧的传送和识别,执行数据帧同步、冲突检测、数据校验等工作,遵循以太网、无线WIFI、令牌环网等标准,交换机是运行在数据链路层的硬件设备,可以通过报文交换实现接受数据和发送数据到指定的计算机网络设备中。
  • 网络层:负责明确发送数据的源地址和接受数据的目标ip地址,明确数据传输所经历的路由器路径,路由器就是运行在网络层的设备。
  • 数据传输层:负责主机之间的数据传输,如用户数据报协议UDP、控制传输协议TCP。
  • 应用层:负责上层用户使用的应用软件间的通信,如电子邮件传输协议SMTP、文件传输协议FTP、远程网络访问协议Telnet。

TCP/IP的5层协议在计算机体系中的实现如图2.2所示,操作系统至少要实现从数据传输层到物理层、路由器至少要实现从网络层到物理层、交换机至少要实现从数据链路层到物理层、而集线器则是仅仅实现在物理层。

图2.2 TCP/IP五层协议与计算机体系中每部分的对应关系

2.3 OSI七层模型

OSI七层模型从逻辑上将网络通信分为了七层,每一层都有对应的功能、硬件设施以及协议。

  • 物理层:各种底层设备,负责光/点信号的传输,光纤、集线器、调制解调器都属于物理层。
  • 数据链路层:负责各个主机之间数据帧的传输,负责帧同步、冲突检测以及准确性校验等工作,这一层的标准有以太网标准、无线WIFI标准、令牌环网标准。交换机是工作在数据链路层的设备。
  • 网络层:负责地址的管理和路由的选择,路由器是工作在网络层的设备。
  • 传输层:负责主机之间的数据传输,如用户数据报协议UDP、控制传输协议TCP。
  • 会话层:对通信进行管理,负责通信的建立、终止和维持。
  • 表示层:实现上层设备数据和网络标准数据格式之间的转换。
  • 应用层:针对特定应用的协议,如文件传输协议FTP、电子邮件传输协议SMTP、远程网络访问协议Telnet。

综上我们发现,OSI七层模型和TCP/IP五层模型的低四层几乎是相同的,差别在于上层,OSI在操作系统之上的用户层面,划分出了会话层、表示层和应用层,而TCP/IP则直接归一化成应用层,OSI是一种非常理想的理论指导模型,TCP/IP是一种已经在网络工程中被成熟应用的设计模型,这是因为在操作系统之上的用户软件,场景非常复杂,难以同一制定协议,因此上层协议的维护便交给了用户来实现,就有了TCP/IP五层协议模型。

图2.3展示了OSI七层模型每层对应的TCP/IP模型及在计算机体系中的位置。

图2.3 OSI七层模型与TCP/IP五层模型及计算机体系结构的对应关系

三. 网络传输的流程

3.1 同一网段中计算机通信的流程

在我们的一般性认识中,同一网段的计算机能够实现直接通信,如电视机投屏,只要手机和电视连接在同一网络下,就可以直接投屏,从手机向电视投屏,本质就是同一网段中的计算机通信。

图3.1展示了统计网段中计算机设备通信的具体流程,可见,两台设备的通信并不是一台设备直接将数据发送给另一台设备,而是要经过层层传输才能够到达。根据TCP/IP五层模型,发送数据的设备,数据压从上层传递至下层,通过以太网将数据发送至另一台设备,另一台设备也要从下层到上层逐步获取数据。

图3.1 同一网段中计算机通信的流程

如图3.2所示的常见,同一网段中,可能存在多台计算机设备,那么如何确保同一网段中两台设备之间通信,其余的计算机设备不受干扰呢?

这就要涉及到主机的地址了,在局域网中,每台主机都有唯一的Mac地址,用于标识主机的唯一性,可用于识别数据链路层中相连的节点, 假设图3.2中的设备A要给设备C发送信息,设备B由于处于同一网段中,也会看到设备A发送的信息,但是设备A在传送信息的时候,会带上目标设备的Mac地址,设备B在检测到信息不是发送给它的时候,就会将信息自动屏蔽。

如果某个网络中两台设备一同发生数据,导致数据信号在网络传输中发生碰撞,就会出现数据冲突问题,数据传输层要负责进行冲突检测,如果发生冲突,数据就要重发。如果向某个网络中传入大量垃圾数据,就会不断造成数据冲突,这就是网络攻击的一种方式。

结论:在局域网中,通过Mac地址可以标识主机的唯一性,可用于识别数据链路层中相连的节点。

图3.2 同一网段中多台计算机设备

3.2 不同网段中计算机设备的通信

在广域网中,每台计算机设备都与其专属的IP地址,用于确定不同网段中发送数据的源主机和接收数据的目标主机。如图3.3所示,不同网段中计算机设备的通信,需要由路由器充当连接各个网段的桥梁,实现跨网段的数据传输。

图3.3 跨网段的计算机通信流程

3.3 对于IP地址和MAC地址的理解

对于IP地址的理解:

  • IP地址有IPv4和IPv6两种表达方式,主流采用IPv4。
  • IP地址用于标识网络中主机的唯一性。
  • 对于IPv4,其表达方式为:4个0~255的阿拉伯数字,每个数据之间用 . 分隔,如123.12.4.255就是一个合法的IPv4地址。

对于Mac地址的理解:

  • MAC地址用于标识数据链路层相连的节点。
  • MAC地址由48个二进制位构成,采用16进制数 + 冒号来表示,如 12:a8:bd:06:00:67 就是一个合法的MAC地址。
  • 一般来说,网卡出厂就配置好了MAC地址,但也有些网卡支持用户自行配置MAC地址,甚至在某些虚拟机中,会存在重复的MAC地址。

以图3.4的模型,解释IP地址和MAC地址的区别,在广域网中,我们希望将数据从主机A发送到主机B,那么,主机A和主机B的地址,就是在通信中所讲的IP地址。在数据链路层,主机A发送的数据要依次经过路由器1、2、3才能到达主机B,假设现在数据处于路由器1,那么路由器1的地址就称为当前的MAC地址,而接下来要经过的路由器2的地址,就称为下一个MAC地址。 

图3.4 IP地址和MAC地址的区别

3.4 数据的封装和解包

源主机向下传输数据的时候,每一层都要添加一些属性信息,在每一层添加的信息被称为报头,自顶向下添加报头的过程,就是数据封装的过程。目标主机在自底向下接受数据的时候,在每一层都要去掉对应的报头,去掉报头的过程过程就是数据的解包过程。

如:源主机数据在经过网络层的时候,要添加对应的IP地址信息,用于查找目标主机,而数据链路层需要添加下一个MAC地址,以便于找到数据传输过程中下一个路由器的位置。

图3.5 网络通信中数据的封装和解包

四. 总结 

  • 网络协议的设计是分层的,这样有利于适应复杂的场景,并且可以实现不同功能之间的解耦。
  • TCP/IP五层设计模型是工程实践中常采用的协议设计方案,自顶向下各层依次为:应用层、传输层、网络层、数据链路层和物理层,其中应用层为针对特定上层应用的协议,传输层负责主机之间数据的传输,网络层负责地址的管理和路由的选择,数据链路层负责各个主机之间数据帧的传输,物理层为底层的各种硬件设施。
  • OSI七层模型为一种理想的设计模型,其下五层与TCP/IP相同,依次为:传输层、网络层、数据链路层和物理层,差别在于上三层,OSI七层模型的上三层为:应用层、表达层、会话层。其中应用层为针对特定应用的协议,表达层负责向数据转化为网络能够识别的数据格式,会话层负责通信的建立、终止和维护。
  • IP地址负责在网络中标识主机的唯一性,MAC地址负责在数据链路层标识相连节点的地址。
  • 网络中,数据从上层向下层传输要添加报头,从下层向上层传输要去掉报头,添加报头的过程称为封装,去掉报头的过程称为解包。

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

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

相关文章

2.linux的组管理和权限管理

一、组管理 1.Linux组的介绍 在linux中每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者,所有组,其他组的概念 ①所有者 ②所在组 ③其他组 ④改变用户所在组 2.文件/目录 所有者 哪个用户创建了文件,就…

使用rpm重新安装包

#查询 rpm -qa | grep cloudstack #卸载 rpm -e cloudstack-agent-4.18.0.0-1.x86_64 #安装 rpm -ivh cloudstack-agent-4.18.0.0-1.x86_64.rpm

17.Xaml DockPanel控件 ---> 停靠面板

1.运行效果 2.运行源码 a.Xaml源码 <Window x:Class="testView.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic…

CFD模拟仿真理论求解-基于大数据的物理现象研究:热传导方程的数值求解

基于大数据的物理现象研究&#xff1a;热传导方程的数值求解 CFD模拟仿真理论求解 在科学研究和工程实践中&#xff0c;许多物理现象都可以用微分方程来描述。其中&#xff0c;热传导方程是一个非常重要且基础的例子。热传导方程是一个二阶线性偏微分方程&#xff0c;描述了热…

Docker-namespace

Docker-namespace namespace基础命令dd 命令mkfsdfmountunshare pid 隔离试验mount 隔离 namespace namespace 是 Linux 内核用来隔离内核资源的方式。通过 namespace 可以让一些进程只能看到与自己相关的一部分资源&#xff0c;而另外一些进程也只能看到与它们自己相关的资源…

D3JS简介

D3JS 什么是D3js D3.js是一个流行的JavaScript数据可视化库&#xff0c;它提供了一系列的API和工具&#xff0c;用于创建交互式的数据图表、地图等可视化效果。以下是一些D3.js的特点和用途&#xff1a; 数据驱动&#xff1a;D3.js基于数据驱动的思想&#xff0c;将数据和视觉…

科教兴国 | 拓世集团携手中国航天广电集团,打造《AI+教育平台》

在这个时代&#xff0c;人工智能的奇迹交织成一片璀璨的星河。在这片星河中&#xff0c;各大企业如同星辰&#xff0c;闪烁着探索的光芒&#xff0c;寻找着那些志同道合的伙伴。我们并肩飞翔&#xff0c;穿越信息的海洋&#xff0c;共同描绘出未来的蓝图。每一次合作&#xff0…

麒麟信安主办openEuler嵌入式Meetup:打造湖南大学openEuler技术小组,大咖齐聚共探技术前沿

9月8日&#xff0c;由开放原子基金会指导&#xff0c;openEuler社区、麒麟信安、湖南欧拉生态创新中心以及湖南大学联合主办的openEuler嵌入式Meetup在湖南大学成功举办。这一技术盛会汇聚了业内顶尖专家和开发者&#xff0c;旨在为嵌入式技术领域注入新的活力和创新。 活动现场…

巴州阳光志愿者服务协会党支部开展 第十一季“衣旧情深”爱心 活动

为了让捐赠真正回归公益慈善&#xff0c;奉行衣物回收“取之于民&#xff0c;用之于民”的理念&#xff0c;2023年9月10日&#xff0c;巴州阳光志愿者服务协会党支部书记李晓红组织志愿者们去普惠乡开展第十一季“衣旧情深”爱心活动。 本次活动是以“99公益日”活动为契机&…

Mysql5.7(Docker环境)实现主从复制

文章目录 前言一、MySQL主从数据库同步如何实现&#xff1f;(理论)1.1 为什么要使用数据库主从1.2 数据库主从实现原理是什么&#xff1f; 二、Docker环境配置MySQL5.7主从(实践)2.1 配置安装Master2.2 配置安装Slave 前言 本文章将以MySQL5.7版本来讲诉MySQL主从复制的原理以…

Android Jetpack Compose之状态持久化与恢复

目录 1.概述2.实例解析4. Compose提供的MapSaver和ListSaver4.1 mapServer4.2 ListSaver 1.概述 在之前的文章中&#xff0c;我们提到了remember&#xff0c;我们都知道remember可以缓存创建状态&#xff0c;避免因为重组而丢失。使用remember缓存的状态虽然可以跨越重组&…

软件测试之功能测试

一、测试项目启动与研读需求文档 &#xff08;一&#xff09; 组建测试团队 1.测试团队中的角色 2.测试团队的基本责任 尽早地发现软件程序、系统或产品中所有的问题。 督促和协助开发人员尽快地解决程序中的缺陷。 帮助项目管理人员制定合理的开发和测试计划。 对缺陷进行跟…

芯科蓝牙BG27开发笔记3-修改第一个程序

提问&#xff1a; 如何实现连续发送通知消息&#xff1f; 蓝牙无线射频信号在时间轴不是连续不断地存在&#xff0c;为了实现大数量的传输&#xff0c;需要额外的机制保证设备可以在下一次启动射频后可以接着发送之前没有发完的消息&#xff0c;nordic是可以使用队列&#xf…

springboot jpa手动事务

创建springboot项目 搭建最简单的SpringBoot项目_Steven-Russell的博客-CSDN博客 引入jpa和数据据依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>…

yolov8 模型部署--TensorRT部署-c++服务化部署

写目录 yolov8 模型部署--TensorRT部署1、模型导出为onnx格式2、模型onnx格式转engine 部署 yolov8 模型部署–TensorRT部署 1、模型导出为onnx格式 如果要用TensorRT部署YOLOv8&#xff0c;需要先使用下面的命令将模型导出为onnx格式&#xff1a; yolo export modelyolov8n.p…

二维前缀和

导言 当我们需要求到某个矩阵的子矩阵的和时,就可以使用二维前缀和 这是一个矩阵, 就是左上角区域的所有数之和 ...... 如果要 求中间的子矩阵的和,(x,y)为左上角 ...... ...... ,(i,j)为右下角,那么只需要算 - - ------这一…

QT第五天

void Widget::on_show_clicked() { QString sql "select * from myTable" ; QSqlQuery querry; if(!querry.exec(sql)) { QMessageBox::information(this,"失败","展示失败"); return; } //此时&…

如何用 DAP 仿真器下载程序

1.仿真器简介 本书配套的仿真器为 Fire-Debugger&#xff0c;遵循 ARM 公司的 CMSIS-DAP 标准&#xff0c;支持所有基于 Cortex-M内核的单片机&#xff0c;常见的 M3、M4 和 M7 都可以完美支持。 Fire-Debugger 支持下载和在线仿真程序&#xff0c;支持XP/WIN7/WIN8/WIN10 这…

c++ day 4

1、仿照string类&#xff0c;完成myString 类 #include <iostream> #include<cstring>using namespace std;class myString { private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度 public://无参构造myString():size(10…

JVM优化(OOM,内存溢出),查看线程快照,堆内存情况等问题

1&#xff1a;堆大小 新生代 老年代&#xff0c;新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ) 2&#xff1a;-Xmn参数总是应当小于-Xmx参数&#xff0c;否则就会触发OOM错误 3&#xff1a;jvm优化与查看gc回收情况&#x…