【Linux】网络编程基础

news2024/11/29 4:35:00

文章目录

    • 网络基础
      • 1.网络与操作系统的关系
      • 2.计算机网络发展
      • 3.协议
        • 3.1协议分层
        • 3.2OS七层模型
        • 3.3TCP/IP五层模型
      • 4.网络传输基本流程
        • 4.1数据包的封装和分用
          • 4.1.1报头和有效载荷
        • 4.2局域网的两台主机通信
        • 4.3跨网络的两台主机通信
      • 5.IP地址和MAC地址
        • 5.1IP地址
        • 5.2MAC地址
        • 5.3IP地址和MAC地址的区别
        • 5.4数据传输的两套地址

网络基础

1.网络与操作系统的关系

操作系统内,除了进程管理、文件管理、内存管理和驱动管理之外。还有一个内嵌了一个网络协议栈。传输数据时,通过网络协议栈,将数据封包,网卡将数据发送到网络中。接收数据时,通过网络协议栈,从网卡中获取数据,将数据解包。

image-20221127205210381

协议栈与操作系统的关系图

image-20221127210216205

网络协议栈各层功能

  • 数据链路层/物理层:负责数据真正的发送过程(物理意义上的发送)
  • 网络层:完成的是数据转发,解决数据去哪的问题。通过IP解决从哪来到哪去的问题
  • 传输层:解决传输过程中的丢包,端口关闭,服务器出错的等问题。传输层的工作作用是处理数据传输过程中出现的问题,主要保证数据的可靠性
  • 应用层:明确数据发送的目的是什么,解决干什么的问题。负责业务细节。

2.计算机网络发展

独立模式: 计算机之间相互独立;

image-20221127211215060

网络互联:多台计算机连接在一起,完成数据共享

image-20221127211247853

局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起

image-20221127211324630

广域网WAN: 将远隔千里的计算机都连在一起;

image-20221127211343707

所谓 “局域网” 和 “广域网” 只是一个相对的概念 。广域网可以说是有个更大的局域网。

3.协议

“协议”本质就是一种约定,通信双方只要曾经做过某种约定,之后就可以使用这种约定来完成某种事情。而网络协议是通信计算机双方必须共同遵从的一组约定,因此我们一定要将这种约定用计算机语言表达出来,此时双方计算机才能识别约定的相关内容。

3.1协议分层

协议分层让每一个层看起来可以直接进行通信。

image-20221127211735161

分层最大的好处在于“封装”,在分层情况下,将某层的协议进行替换后,通信双方之间是不会受到影响的。

3.2OS七层模型

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

各层作用

  • 应用层:针对特定应用的协议
  • 表示层:设备固有数据格式和网络标准数据格式的转换
  • 会话层:通信管理、负责建立和断开通信连接(数据流动的逻辑通路)、管理传输层以下的分层
  • 传输层:管理两个节点之间的数据传输、负责可靠性传输(确保数据被可靠地传送到目标地址)
  • 网络层:地址管理与路由选择
  • 数据链路层:互联设备之间传送和识别数据帧
  • 物理层:以0/1代表电压的高低以及灯光的闪灭、界定连接器和网线的规格

3.3TCP/IP五层模型

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

image-20221127213050613

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

4.网络传输基本流程

4.1数据包的封装和分用

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

假如有主机A和主机B进行通信

image-20221127214123825

**当主机A给主机B发送消息时:**消息在每一层经过被封装,添加上消息头。

image-20221127214255161

主机B接收到主机A的消息后,会从最下层的协议逐步解包,将有效载荷将给上一层协议。最终应用层拿到主机A发送的数据

image-20221127214855559

4.1.1报头和有效载荷

报头

报头本质也是一种数据,报头一般是通过位段实现的,因此协议栈的每一层都有一个对应的位段来表示当前层的报头。

有效载荷

当对端主机收到数据后,需要自底向上贯穿协议栈,依次进行数据的解包与分用。在这个解包的过程中,每一层的协议只需要提取出数据中对应的报头,然后对该报头进行分析处理,而剩下的数据则直接交付给上层就行了。

因为每一层的协议实际上只关心数据中与当前层对应的报头信息,而剩下信息的具体内容不必关心,交给上一层协议进行处理。我们将数据中除当前层的报头以外的数据叫做“有效载荷”。

报头和有效载荷分离

协议栈的每一层都要从数据中提取对应的报头信息,而要将数据中的报头提取出来,首先就需要明确报头与有效载荷之间的界限,这样才能将它们进行分离。

每一层添加报头都是讲协议头添加到数据首部,因此只要知道了报头的大小,就可以讲报头和有效载荷分离。

获取报头大小的方法有:

  • 定长报头:报头大小是固定的
  • 自描述字段:报头当中有描述报头长度的字段。

4.2局域网的两台主机通信

局域网通过局域网交换机进行数据的交换。同一局域网中的任意主机之间可以进行通信。

在一个局域网当中,除了当前正在进行通信的A主机和B主机以外,还有其他的主机,那A主机是如何将数据成功发送给B主机的呢?

image-20221127224846349

实际当主机A想要发数据给主机B的时候,该局域网内的其他主机也都收到了该数据,只不过除了主机B以外,其他主机识别到该数据并不是发给自己的,此时其他主机就把收到的数据丢弃了。

也就是说,在局域网(以太网)通信时,该局域网内所有的主机在底层其实都收到了任何数据,只不过经过筛选后只提交上来了发给自己的数据。

碰撞

当A和B在进行通信时,有可能有其他主机之间也可能在通信。但同一局域网中的所有主机在通信时,使用的都是一个共同的通信信道,因此如果局域网内的多台主机同时进行通信,此时这些数据之间就可能会相互干扰。

  • 每一个局域网都可以看作是一个碰撞域,如果某个主机发送出去的数据与其他主机发送的数据之间产生了干扰,我们就称这两台主机在该碰撞域中发生了碰撞。

如何判断是否发生了碰撞

发送到局域网当中的数据是所有主机都能够收到,因此当一个主机将数据发送出去后,该主机本身也可以收到这个数据。

当该主机收到该数据后就可以将其与之前发送出去的数据进行对比,如果发现收到的数据与之前发送出去的数据不相同,则说明在发送过程中发生了碰撞。

解决碰撞问题

当检测到发生了碰撞,发生消息的主机会选择等待一段时间,再次发送数据。

4.3跨网络的两台主机通信

image-20221127230735044

局域网之间都是通过路由器连接起来的,因此一个路由器至少能够横跨两个局域网。而这些被路由器连接的联局域网认为,该路由器就是本局域网内的一台主机,因此路由器可以和这些局域网内的任意一台主机进行直接通信。

通信过程

image-20221127231003572

左边的主机向右边的主机发送信息。消息经过封装,网络传输,解包后达到右边的主机。

两个局域网采用不同通信标准

上述的广域网中,左边的局域网采用以太网,右边采用令牌环网。

由于以太网和令牌环网是不同的通信标准,它们给数据添加的报头也是不一样的,因此令牌环网当中的主机无法对以太网当中的数据帧进行解包。因此路由器需要对数据解包,去掉以太网协议头,再加上令牌环网协议头。

image-20221127233031089

  • 可以看到在网络层以上,两台主机得到的数据是相同的。这样两台主机就可以完成通信。

5.IP地址和MAC地址

在上面的通信过程中,路由器是如何知道传递给那一台主机?

一个路由器可能会级联多个局域网,当路由器需要将一个局域网的数据转发到另一个局域网时,路由器如何知道该数据应该转发到哪一个局域网的呢?

路由器其实是通过IP地址来确定数据的转发方向的,每一个IP地址唯一标识一台主机,在数据向下进行封装时,在网络层封装的报头当中就会包含两个字段,分别是源IP地址和目的IP地址。

当路由器需要将数据从一个局域网发送到另一个局域网时,路由器的链路层会先将数据的在当前局域网对应的底层报头去掉,然后将剩下的数据向上交付给网络层。此时,路由器就得到了目的IP地址,然后路由器就可以根据该IP地址在路由表当中进行查找,最终就能够确认该数据应该发送到哪一个局域网。

一般在进行路线选择时,会存在两套地址。

IP地址:解决了从哪台主机来,目的主机是哪一台的问题。MAC地址:记录路线,解决了上一站是哪一台主机,下一站应该是哪一台主机的问题

5.1IP地址

这里的IP地址指的是IPV4

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

5.2MAC地址

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

5.3IP地址和MAC地址的区别

  • 地址性质不同:MAC是物理地址,IP地址是逻辑地址;MAC不可改变,IP地址可以修改。
  • 工作层次不同:MAC在OSI模型中,处于第二层数据链路层中。IP地址处于第三次网络层中。
  • 二层交换机基于MAC地址转发数据,路由器基于路由表(IP地址)转发数据。
  • 分配依据不同:IP地址的分配基于网络拓扑,MAC分配基于制造商。

5.4数据传输的两套地址

源IP地址和目的IP地址

每台计算机都有一个唯一的IP地址,如果一台主机上的数据要传输到另一台主机,那么对端主机的IP地址就应该作为该数据传输时的目的IP地址。但仅仅知道目的IP地址是不够的,当对端主机收到该数据后,对端主机还需要对该主机做出响应,因此对端主机也需要发送数据给该主机,此时对端主机就必须知道该主机的IP地址。因此一个传输的数据当中应该涵盖其源IP地址和目的IP地址,目的IP地址表明该数据传输的目的地,源IP地址作为对端主机响应时的目的IP地址。

源MAC地址和目的MAC地址

大部分数据的传输都是跨局域网的,数据在传输过程中会经过若干个路由器,最终才能到达对端主机。MAC地址在网络中唯一标识一个网卡,每一台路由器上的网卡都有一个MAC地址。

image-20221127235213949

源MAC地址和目的MAC地址是包含在链路层的报头当中的,而MAC地址实际只在当前局域网内有效,因此当数据跨网络到达另一个局域网时,其源MAC地址和目的MAC地址就需要发生变化,因此当数据达到路由器时,路由器会将该数据当中链路层的报头去掉,然后再重新封装一个报头,此时该数据的源MAC地址和目的MAC地址就发生了变化。

时间源MAC地址目的MAC地址源IP地址目的IP地址
刚开始主机1的MAC地址路由器A的MAC地址主机1IP地址主机2IP地址
经过路由A之后路由器A的MAC地路由器B的MAC地址主机1IP地址主机2IP地址
经过路由B之后路由器B的MAC地路由器C的MAC地址主机1IP地址主机2IP地址
经过路由C之后路由器C的MAC地址路由器D的MAC地址主机1IP地址主机2IP地址
经过路由D之后路由器D的MAC地址主机2MAC地址主机1IP地址主机2IP地址

数据传输的两套地址

  • 一套是源IP地址和目的IP地址,这两个地址在数据传输过程中基本是不会发生变化的。
  • 另一套就是源MAC地址和目的MAC地址,这两个地址是一直在发生变化的,因为在数据传输的过程中路由器不断在进行解包和重新封装。

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

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

相关文章

XSCTF联合招新【真是阳间题】(MSIC+Crypto)

文章目录XSCTF联合招新【真是阳间题】(MSICCrypto)Step1:查看文件step2:操作流程关于Base64,Base32,Base16进制的区别方法:Base64:Base32:Base16:XSCTF联合招新【真是阳间题】(MSICC…

控制瑞芯微平台GPIO(输入、输出、电平读取)

控制瑞芯微平台GPIO(输入、输出)GPIO编号计算控制步骤输出高电平读取电平GPIO编号计算 GPIO编号 BANK * 32 GPIO_PIN GPION_MP N * 32 8 * (M -1) P 示例:GPIO7_C2 7 X 32 8 X (3-1) 2 242 GPIO2_A1 2 X 32 8 X (1-1) 1 73 A对…

IO流~File

File File类概述和构造方法 File:它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通…

【PyTorch深度强化学习】DDPG算法的讲解及实战(超详细 附源码)

需要源码请点赞关注收藏后评论区留言留下QQ~~~ 一、DDPG背景及简介 在动作离散的强化学习任务中,通常可以遍历所有的动作来计算动作值函数q(s,a)q(s,a),从而得到最优动作值函数q∗(s,a)q∗(s,a) 。但在大规模连续动作空间中,遍历所有动作是不…

Css3 2D转换 2D转换之移动tranlate

转换(transform)是css3中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果。 转换你可以简单理解为变形。 移动:translate旋转:rotate缩放:scale 2D转换是改变标签在二维平面上的位置和形状的…

Spring - InstantiationAwareBeanPostProcessor 扩展接口

文章目录Preorg.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorInstantiationAwareBeanPostProcessor 注册过程源码分析postProcessBeforeInstantiation的执行时机源码解析使用场景 : 创建代理类Pre Spring Boot - 扩展接口一览 org.s…

AWS Academy LMS 考勤 - 教师

AWS Academy LMS 考勤 - 教师 在 AWS Academy LMS 教材使用 - 教师 说明了如何使用 AWS Academy LMS 中所提供的线上素材,而开始上课后,教师必须要去了解学生对于教材的实际使用状况,在这里介绍如何查看学生在各模块知…

Jsoup爬虫入门实战

一、Jsoup介绍 jsoup 是一款基于 Java 的HTML解析器,它提供了一套非常省力的API,不但能直接解析某个URL地址、HTML文本内容,而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据,所以 jsoup 也可以被当做爬虫工具使用。 相关…

进程通信(2) ----- 信号

文章目录一、实验目的二、实验内容三、实验要求四、实验步骤及操作五、程序源码1. 信号发送 fkill.c2. 信号监控 mysignal.c一、实验目的 1.了解进程通信间的信号机制 2.掌握进程通信间的信号编程模型 二、实验内容 信号是通信量最小的一种进程间通信形式,也用于…

【Gradle】三、深入了解Gradle

这里写目录标题一、 Gradle项目的生命周期Initialization 阶段Configuration 阶段:Execution 阶段:二、settings.gradle 文件三、Task1、 案例四、Dependencies1、依赖的分类2、依赖的下载3、依赖的类型4、api与implementation的区别5、依赖冲突及解决方…

(二) Docker安装

Docker安装一、前提二、安装三、设置阿里云镜像加速四、分析Run底层原理五、Docker会比VM虚拟机快的原因一、前提 CentOS 仅发行版本中的内核支持 Docker。Docker 运行在CentOS 7 (64-bit)上, 要求系统为64位、Linux系统内核版本为 3.8以上,这里选用Cen…

plot3D | 三维数据绘图(1):散点图、栅格图、透视图

专注系列化、高质量的R语言教程推文索引 | 联系小编 | 付费合集plot3D可以视作基础包graphcis的拓展包,用于多维数据的图形绘制。基础绘图系统里好像只有一个persp()函数与三维绘图有关,关于该函数的介绍见如下推文:基础绘图系统(…

【Hack The Box】linux练习-- Blunder

HTB 学习笔记 【Hack The Box】linux练习-- Blunder 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月21日🌴 &#x1f…

二、Robot Framework 对数据库的操作

Robot Framework 对数据库的操作2.1 DatabaseLibrary 库的使用1. 安装 DatabaseLibrary 库2. 测试套件中导入 DatabaseLibrary 库3. 安装 pure-PythonMySQL client library2.1.1 如何连接数据库2.1.2 如何断开数据库2.1.3 如何对数据库的表进行查询2.1.4 如何插入和删除数据2.1…

java EE初阶 — Thread类及常见方法

文章目录1.Thread 常见的构造方法2.Thread 几个常见的属性3.启动一个线程 - start()4.终止一个线程4.1 使用标志位来控制线程是否要停止4.2 使用 Thread 自带的标志位来进行判定5.等待一个线程 - join()6.获取当前线程引用7.休眠当前线程1.Thread 常见的构造方法 Thread() - 创…

【Spring】——11、了解BeanPostProcessor后置处理器

📫作者简介:zhz小白 公众号:小白的Java进阶之路 专业技能: 1、Java基础,并精通多线程的开发,熟悉JVM原理 2、熟悉Java基础,并精通多线程的开发,熟悉JVM原理,具备⼀定的线…

Packet Tracer - 综合技能练习(通过调整 OSPF 计时器来修改 OSPFv2 配置)

地址分配表 设备 接口 IP 地址 子网掩码 RA G0/0 192.168.1.1 255.255.255.0 RB G0/0 192.168.1.2 255.255.255.0 RC G0/0 192.168.1.3 255.255.255.0 S0/0/0 209.165.200.225 255.255.255.252 拓扑图 场景 在此综合技能练习中,您的重点是 OSPF…

【滤波跟踪】不变扩展卡尔曼滤波器对装有惯性导航系统和全球定位系统IMU+GPS进行滤波跟踪【含Matlab源码 2232期】

⛄一、简介 针对室内定位中的非视距(Non-Line-of-Sight,NLOS)现象,提出一个新型算法进行识别,同时有效缓解其影响.主要通过超宽带(Ultra-Wideband,UWB)定位系统与惯性导航系统(Inertial Navigation System,INS&#x…

车辆大全和车牌识别系统毕业设计,车牌识别系统设计与实现,车牌AI识别系统论文毕设作品参考

功能清单 【后台管理员功能】 系统设置:设置网站简介、关于我们、联系我们、加入我们、法律声明 广告管理:设置小程序首页轮播图广告和链接 留言列表:所有用户留言信息列表,支持删除 会员列表:查看所有注册会员信息&a…

发布MagicOS 7.0, 荣耀如何打造“松弛感”的操作系统?

最近,“松弛感”一词特别流行。有博主教网友如何打造松弛感美女,因为这种毫不费力、天然去雕饰的美,更有吸引力;职场松弛感,能够平衡工作和生活,更被同事们喜欢;生活也需要多一些松弛感&#xf…