Linux网络编程学习(网络基础)

news2024/9/21 4:39:54

文章目录

  • 网络基础
    • 浅谈计算机网络背景
    • 了解协议
    • 网络传输基本流程
      • 局域网传输基本流程
      • 跨网络的数据传输流程

网络基础

浅谈计算机网络背景

​ 计算机最早是没有网络的,当时想要数据之间交互就需要人来传递,但是这样效率非常低,而且也容易出错;

​ 后来为了提高效率,通过一根总线和集线器,将小范围的计算机链接在一起(教室大小的范围),其中有一台计算机当作共享服务器,其他计算机负责数据处理,再利用共享服务器做数据交互

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-om9dUUJs-1677869761395)(G:\Typora\图片保存\image-20221230230240244.png)]

​ 再后来,就由这种简陋的模型发展成了局域网;假设将一个教室大小看作一个整体,里面有多台计算机经交换机连接在一起组成局域网,那么多个教室之间互相交互就由路由器连接各个教室交换机,就可以实现跨网络传送

局域网不断的发展,变得越来越大,就发展成了“广域网”,(这只是一个相对概念,为了区分局域网的区别)例如,一个省分为好多区,把每个区看作一个局域网,那么站在省的角度,就可以说是广域网。

了解协议

​ 协议是一种约定,例如两台计算机之间约定进行通信,计算机A给计算机B发数据之前先发送三个1三个0,计算机B收到信号后,先回复三个0三个1,之后开始接收数据。例如生活中的遥控器,每个按键按下的时候,都会发送一串由2进制组成的红外波,电视接收后再把红外波解析成二进制码。

​ 一般咋网络通信协议上的制定,都是由这个邻域的领头企业,例如5G华为;而想要提高效率就只能跟随制定的协议,要么厂商就只能自己发展,并且使用协议的用户多了,也就决定了市场,其他不想跟随的企业也只能跟随,这样就达到了相对统一。

实际的网络通信非常复杂, 需要分很多的层次,如图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vEk9yueo-1677869761396)(G:\Typora\图片保存\image-20221231024612646.png)]

OSI七层模型

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

七层模型相对复杂且不实用,一般都按4层或者5层区分

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

网络传输基本流程

局域网传输基本流程

在局域网中,两台主机是可以直接通信的,通信流程如下,其中最底层的一条线是网线,属于物理结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tb7tlnoN-1677869761396)(G:\Typora\图片保存\image-20221231145416455.png)]

(TCP层还有一个协议是udp)

​ 主机A给主机B发送数据时,不是直接从应用层到对方应用层的(不是横着直接发送的),而是自上到下,经过以太网到达对方最底层,之后自下而上贯穿(发送数据是U型的)

​ 在自上而下、自下而上的同时,每一层都会添加自己的“报头”文件,经过以太网发送到对端主机后,对端主机每一层解析自己层所需的报头文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZKFd8Y9C-1677869761397)(G:\Typora\图片保存\image-20221231150445320.png)]

(每一层从上层封装下来的数据叫做载荷,加上当前层的报头又组成载荷给下一层)

​ 站在应用层的角度,就好像是由主机A直接发送给主机B一样,而主机发送数据最后是只需要数据的,这个数据就经历了封装 -> 解包的过程。

报头是什么?

​ 报头就类似于快递,当在网上买完东西后,会先由商家去发快递,快递会把商品包装,包装后贴上快递单,快递单上有单独的单号、发货地址、收货地址等等信息,经过公路的运输到达一些转运点,转运点会扫描所需的信息分发给具体的运输车,运输车会到达收货地再由快递员按收货地址分片配送。

​ 而报头就是数据的“快递单”,上面有每一层所需要的数据,来指导当前层进行某种协议决策。

报头的本质

LinuxOS是C语言写的,站在语言角度报头的数据结构可能是如下的结构:

struct my_hdr
{
  	unsigned int src:16;
	unsigned int dst:16;
	unsigned int type:8;
	unsigned int len:24;  
};
报头就是一个位段,具体和协议有关

​ 假设发送一个数据,那么数据可以看成是载荷放在缓冲区里,那么报头就是 位段变量,struct my_hardA.stc = 0x1将这些位段数据拷贝到载荷前面;那么如何拿到数据呢?,可以将这个整体强转成struct my_har*,之后++一下就拿到数据了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3SK4a0BX-1677869761397)(G:\Typora\图片保存\image-20221231154543853.png)]
(封装与解包)

几乎每一层的报头都包含两种字段:

  • 当前报文的有效载荷要交付给上一层的哪一个协议(例如TCP与UDP)
  • 明确报头与载荷的边界

上面介绍的是两台主机间通信的流程,那么多台主机的通信基本和上述一样,但有一些细节需要注意

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YMeBBaeL-1677869761397)(G:\Typora\图片保存\image-20221231164749717.png)]

如图,

  • 每个主机都有自己的MAC地址,主机A要给主机E发送数据,就需要带上E的MAC地址;

    MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开 xx:xx:xx:xx:xx:xx

    MAC地址由网络设备制造商生产时写在硬件内部,更多应用在局域网中的。

  • 由于局域网的网络资源是共享的,所以所有主机其实都能收到主机A给主机E发送的数据,但是它们看到MAC地址不是自己的选择丢弃

  • 假如A发送完后马上B也给E发送,就会发生数据碰撞,所以每台主机都要有碰撞检测的能力以及碰撞避免的算法,保证每个时刻只有一台主机向局域网中通信

上述中共享的网络资源就可以看成是个临界资源,那么数据碰撞就可以看成是互斥,系统和网络是不分家的

​ 要攻击局域网,其实就等于是线程的饥饿问题,一直发送数据,同时由于局域网络资源是共享的,只是通信的主机认为是单独通信,实际上所有主机都能看到数据,那么就可以对数据进行抓包等等(这些做法不推荐,有兴趣的可以用自己的多台设备实验)

跨网络的数据传输流程

局域网通信应用Mac地址比较多,而跨网络主要就是IP地址了,图示如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YICpIhpF-1677869761398)(G:\Typora\图片保存\image-20221231161239346.png)]

主机A和主机B是两个不同的局域网(令牌环类似于互斥锁,谁拿锁谁向局域网发送数据),当主机A跨网络向主机B发送数据时:

  • 会先进行封装,一直到达链路层,之后解封发送给路由器
  • 路由器收到后,会再次进行封装,封装的是令牌环相关的报头,并发送给主机B
  • 主机B收到后,又会进行解封一路向上直到拿到纯数据

其中,MAC和IP地址各自的作用又是什么样的?

  • 主机A给主机B发送数据是要跨网络的,所以会先发送给路由器,所以MAC的地址会先填写路由器的MAC

  • 但是又得让路由器直到是发送给谁的,所以要带上主机B的IP地址

  • 路由器收到后通过IP地址知道是要发送给谁的,之后将数据重新封装并带上MAC B的地址

MAC地址就好比快递在运输过程中的每个省份的高速入口出口,IP地址就好比最终的目的地,(IP地址在网络层,MAC地址在链路层)

由于每个局域网的链路层用的协议都不一样,那么站在路由器的角度就等于把底层统一了,上层看不见底层是怎样的通信的,屏蔽了底层的差异,这是分层的好处,因为用户并不关心底层是怎样的,只想把数据传送到。

(IP地址为32位,由用点分隔开的4个8八位组构成,如192.168.1.1,这种写法叫点分十进制格式)

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

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

相关文章

机器人姿态规划的三种常见方法:欧拉角、角轴和四元数

参考文献: 1. 布鲁诺西西里安诺等[意] 《机器人学:建模、规划与控制》 2. 四元数小总结 - 孤独の巡礼 - 博客园 (cnblogs.com) 3. 基于单位四元数的姿态插补(Matlab) - 知乎 (zhihu.com) 4. 基于四元数的工业机器人姿态规划与插…

javaScript基础面试题 --- JS作用域

面试10家公司,得有8家会问到作用域的题。所以说JS的作用域一定要弄清楚,非常重要! 1、除了函数之外,JS没有块级作用域 2、作用域链:内部可以访问外部的变量,但是外部不能访问内部变量,如果内部有…

Docker搭建jenkins(Vue自动化部署)

前言 需要提前准备的条件 Docker环境 一、jenkins镜像 # 查询镜像 docker search jenkins# 下载镜像 # lts稳定版 docker pull jenkins/jenkins:lts#查看镜像 docker images二、启动Jenkins容器 创建挂载文件夹,并且进行文件授予权限 #创建文件夹 mkdir -p /home/j…

2023年湖北武汉初级、中级工程师职称评审条件和评审流程是什么呢?

职称分三个级别:初级、中级、高级,原则是需要一级一级的,但是有的地方可以跨级申报。 一、湖北武汉初级、中级工程师职称评定条件: 助理职称评定条件: 1.大学本科毕业,从事专业技术工作1年以上。 2.大学专…

Java Web 实战 02 - 多线程基础篇(1)

Java Web 实战 02 - 多线程基础篇 - 1一 . 认识线程1.1 概念1.1.1 什么是线程?1.1.2 为什么要有多个线程?1.1.3 进程和线程的区别(面试题)1.2 第一个多线程程序1.3 创建线程1.3.1 继承Thread类1.3.2 实现Runnable接口1.3.3 继承 Thread 类 , 使用匿名内部类1.3.4 实现 Runnab…

Linux嵌入式开发 | 汇编驱动LED(1)

文章目录🚗 🚗Linux嵌入式开发 | 汇编驱动LED(1)🚗 🚗初始化IO🚗 🚗STM32🚗 🚗使能GPIO时钟🚗 🚗设置IO复用🚗 &#x1f6…

3.5多线程

一.线程的状态1.NEW安排了工作,还未开始行动把Thread对象创建好了,但是还没有调用startjava内部搞出来的状态,与PCB的状态没什么关系2.TERMINATED工作完成了操作系统的线程执行完毕,销毁了,但是Thread对象还在,获取的对象3.RUNNABLE可以工作的,又可以分为正在工作中和即将开始工…

聊聊内存那些事(基于单片机系统)

单片机的RAM和ROM单片机的ROM,叫只读程序存储器,是FLASH存储器构成的,如U盘就是FLASH存储器。所以,FLASH和ROM是同义的。单片机的程序,就是写到FLASH中了。而RAM是随机读/写存储器,用作数据存储器&#xff…

SpringBoot笔记(一)入门使用

一、为什么用SpringBootSpringBoot优点创建独立Spring应用内嵌web服务器自动starter依赖,简化构建配置自动配置Spring以及第三方功能提供生产级别的监控、健康检查及外部化配置无代码生成、无需编写XMLSpringBoot缺点人称版本帝,迭代快,需要时…

电路基础(1)电路模型和电路定律

电路中的电压、电流之间具有两种约束,一种是由电路元件决定的元件约束;另一种是元件间连接而引入的几何约束(就是拓扑约束),后者由基尔霍夫定律来表达。基尔霍夫定律是集总参数电路的基本定律。 1.电路和电路模型电源又…

电路模型和电路定律(2)——“电路分析”

各位CSDN的uu们你们好呀,好久没有更新电路分析的文章啦,今天来小小复习一波,之前那篇博客,小雅兰更新了电路的历史以及电压电流的参考方向,这篇博客小雅兰继续!!! 电阻元件 电压源和…

FFMPEG 安装教程windowslinux(CentOS版)

ps: 从笔记中迁移至blog 版本概述 Windows 基于win10 Linux 基于CentOS 7.6 一.Windows安装笔记 1.下载安装 https://ffmpeg.org/download.html 2 解压缩,拷贝到需要目录,重命名 3 追加环境变量 echo %PATH%setx /m PATH "%PATH%;F:\dev_tools\…

用C/C++制作一个简单的俄罗斯方块小游戏

用C/C制作一个简单的俄罗斯方块小游戏 用C/C制作一个简单的俄罗斯方块小游戏 0 准备1 游戏界面设计 1.1 界面布局1.2 用 EasyX 显示界面1.3 音乐播放 2 方块设计 2.1 方块显示2.2 随机生成一个方块2.3 方块记录 3 方块移动和旋转 3.1 方块的移动3.2 方块的旋转3.3 方块的碰撞和…

基于 WebSocket、Spring Boot 教你实现“QQ聊天功能”的底层简易demo

目录 前言 一、分析 1.1、qq聊天功能分析 1.2、WebSocket介绍 1.2.1、什么是消息推送呢? 1.2.2、原理解析 1.2.3、报文格式 二、简易demo 2.1、后端实现 2.1.1、引入依赖 2.1.2、继承TextWebSocketHandler 2.1.3、实现 WebSocketConfigurer 接口 2.2、…

LeetCode096不同的二叉搜索树(相关话题:卡特兰数)

目录 题目描述 解题思路 代码实现 进出栈序列理解卡特兰数分析策略 相关知识 参考文章 题目描述 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: …

《程序员面试金典(第6版)》面试题 02.07. 链表相交

题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果…

socket本地多进程通信基本使用方法和示例

目录 前言: socket是什么 socket基本原理框图 socket基本函数 1 socket() 函数 2 bind()函数 3 connect()函数 4 listen() 函数 5 accept() 函数 6 read() write() send() recv()函数 7 close()函数 8 字节序转换(hton) 示例代码 …

使用 Pulumi 打造自己的多云管理平台

前言在公有云技术与产品飞速发展的时代,业务对于其自身的可用性提出了越来越高的要求,当跨区域容灾已经无法满足业务需求的情况下,我们通常会考虑多云部署我们的业务平台,以规避更大规模的风险。但在多云平台部署的架构下&#xf…

埃安自研版图扩至夸克电驱,动力研发团队已超1000人

埃安的三电自研版图正在扩大。3月3日,广汽集团旗下埃安发布了一项名为“夸克电驱”的技术产品,相比主流电驱体积减少一倍,同时电机功率密度比主流电驱增加了一倍。此前,比亚迪刚刚发布易四方动力系统,特斯拉也在投资者…

HTML常见标签

文章目录一、HTML基础标签注释标签标题标签段落标签换行标签格式化标签图片、音频、视频标签超链接标签列表标签表格标签布局标签表单标签表单标签概述form标签属性表单项标签综合案例一、HTML基础标签 基础标签就是和文字相关的标签 标签描述<h1> ~ <h6>定义标题…