[Linux][网络][网络基础][协议][网络传输基本流程][数据包封装和分用]详细讲解

news2024/12/23 23:26:46

目录

  • 1.认识协议
    • 1."协议"本质就是一种约定
    • 2.计算机中的协议
  • 2.网络协议初识
    • 1.协议分层
    • 2.OSI七层模型
    • 3.TCP/IP五层(四层)模型
  • 3.网络传输基本流程
    • 0.预备知识
    • 1.跨网络的两台主机通信
    • 2.网络通信的基本轮廓
  • 4.数据包封装和分用
    • 1.数据封装的过程
    • 2.数据分用的过程
    • 3.总结
  • 5.网络中的地址管理
    • 0.形象的区分IP和MAC
    • 1.认识IP地址
    • 2.认识MAC地址


1.认识协议

1."协议"本质就是一种约定

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

2.计算机中的协议

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

2.网络协议初识

1.协议分层

  • 网络协议栈设计成层状结构,其目的就是为了将层与层之间进行解耦,保证代码的可维护性和可扩展性
    • 所以网络本身的代码,就是层状结构
    • 层状结构下的网络协议中的同层协议,都可以认为自己在和对方直接通信,而忽略底层的细节
    • 而同层之间,一定都要有自己的协议
  • 软件分层的好处:
    • 软件在分层的同时,也把问题进行了归类
    • 分层的本质:在软件上解耦
    • 便于工程师进行软件维护
  • 理解各层之间直接通信
    • 网络协议需要有一个基本的认识:
      • 关于通信,同层协议可以认为自己在和对方层直接进行通信,从而达到简化对于网络协议栈的理解
    • 也就是说,在网络协议栈中可以认为通信双方的应用层之间直接在进行通信,也可以认为通信双方的传输层之间直接在进行通信,对于网络层和数据链路层也同样如此
      请添加图片描述

2.OSI七层模型

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

3.TCP/IP五层(四层)模型

  • TCP/IP是一组协议的代名词,它还包括许多协议,共同组成了TCP/IP协议簇
  • TCP/IP通讯协议采用了五层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求
    • 物理层我们考虑的比较少,因此很多时候也可以称为 TCP/IP四层模型
  • **物理层:**负责光/电信号的传递方式
  • **数据链路层:**负责设备之间的数据帧的传送和识别
  • **网络层:**负责地址管理和路由选择
  • **传输层:**负责两台主机之间的数据传输
  • **应用层:**负责应用程序间沟通
    • 我们的网络编程主要就是针对应用层的
  • 一般而言:
    • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容
    • 对于一台路由器,它实现了从网络层到物理层
    • 对于一台交换机,它实现了从数据链路层到物理层
    • 对于集线器,它只实现了物理层
    • 但是并不绝对,很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如端口转发)
      请添加图片描述

3.网络传输基本流程

0.预备知识

  • 网络的数据包在主机内进行流向的时候,一定是自顶向下或自底向上

  • 同层协议都认为自己在和对方直接通信,每一层都要有自己的协议

  • 数据是自顶向下流动的,信息在向下流动的时候,一定会新添应用层协议、传输层协议、网络层协议……最后传到对方的物理层,被对方收到,对方的同层协议根据传过来的协议字段决定对方传递的是什么信息。随后向上流动,直至用户

    • 把每一层要交付给下一层的数据,给它添加上本层的**“多出来的协议数据”(报头**),拼接在原始的开头
    • 把自顶向下添加包头的过程称之为封装,把自底向上对协议解析,再向上交付的过程就称之为解包
      请添加图片描述
  • 可以认为路由器当中的协议栈是下面这样的
    请添加图片描述

1.跨网络的两台主机通信

请添加图片描述

  • 当IPA(以太网)要把数据发送到IPB(令牌环网)时,数据自顶向下流动(应用层、网络层……),并添加对应的报头(协议),向下走到以太网,路由器通过以太网被数据链路层的以太网驱动程序拿到,解包链路层的协议,继续向上交付给自己的IP层,当走到IP网络层时,发现要去的是IPB,并识别到IPB和自己IPA不是一个网段,所以路由器继续向下交付到链路层:令牌环驱动程序,并添加此网段的报头(协议),把数据再经过令牌环发送到对方的令牌环驱动程序链路层,解包,再自底向上流动数据
  • 所有的IP层向上的协议,**发送和接受主机看到的数据是一模一样的。**所以一般把网络也称之为IP网络,其屏蔽了底层网络的差异
  • IP地址的存在除了帮助数据"路由"以外,还有一个很重要的作用,那就是屏蔽了底层网络的差异。对于通信主机双方的IP层及其往上的协议来说,它们并不需要关心底层采用的是以太网还是令牌环网,它们认为只要填写了源IP地址和目的IP地址就能够将数据发送出去,因此现在主流的网络也叫做"IP网络"

2.网络通信的基本轮廓

请添加图片描述


4.数据包封装和分用

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

1.数据封装的过程

请添加图片描述

2.数据分用的过程

请添加图片描述

3.总结

  • **报头:**报头本质也是一种数据,报头一般是通过位段实现的,因此协议栈的每一层都有一个对应的位段来表示当前层的报头
  • **封装:**实际就是不断给数据加上各种对应的报头,这些报头里面填充的就是对应的各种协议细节
  • **解包:**实际就是不断从数据中提取对应的报头,并对提取出来的报头进行数据分析
  • **有效载荷:**将数据中除当前层的报头以外的数据叫做"有效载荷"

5.网络中的地址管理

0.形象的区分IP和MAC

  • 从哪里来,到哪里去(IP地址:源IP,s目的IP)
  • 上一站从哪里来,下一站要去哪里(MAC地址:源MAC地址,目标MAC地址,由目的IP决定)

1.认识IP地址

  • IP地址是在IP协议中,用来标识网络中不同主机的地址
  • 对于IPv4来说,IP地址是一个4字节,32位的整数
  • 我们通常也使用"点分十进制"的字符串表示IP地址,例如192.168.0.1,用点分割的每一个数字表示一个字节,范围是0-255
  • 需要注意的是,IP协议有两个版本,分别是IPv4和IPv6
    • IPv4用32个比特位来标识IP地址
    • 而IPv6用128个比特位来标识IP地址

2.认识MAC地址

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

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

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

相关文章

杰发科技AC7840——ADC简介(1)_双路ADC同时使用

0. 简介 1. 特性 2. 双路ADC Sample里面没有双路的,以为那个规则组只有一个通道,看了外设寄存器才发现,原来他的通道是双路的。 注意1: ADC硬件引脚的配置 注意2: 规则组长度设置和 RSEQ序列号和CH通道号组合应该就对应了转换顺序&#xff0…

玩转手机在AidLux上安装宝塔面板

AidLux,手机不用刷机、不用root,直接在手机应用市场就能下载使用。 1.4G的应用包,看起来挺大的,那是因为内嵌了一套完整的AIoT应用开发和部署平台。 不仅Android手机可以玩,华为的Harmony系统也可以使用。 使用它最主…

认识HTTP

HTTP缺点 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,可能遭遇伪装 无法证明报文的完整性,所以有可能遭篡改 一、通信使用明文(不加密),内容可能会被窃听 TCP/…

dpdk 总线设备管理

背景 dpdk版本: 22.11 1、dpdk支持的bus类型注册 注册当前能够处理bus类型,放在全局 rte_bus_list 链表中。 struct rte_bus: A structure describing a generic bus,描述总线类型的结构 注册方法 void rte_bus_register(struct rte_bus *bus); //函数功能: 将支持的bus结…

C++-4

在Complex类的基础上&#xff0c;完成^&#xff0c;>&#xff0c;~运算符的重载 #include <iostream>using namespace std; class Complex {int rel; //实部int vir; //虚部 public:Complex(){}Complex(int rel,int vir):rel(rel),vir(vir){}/* Complex operato…

5、Flink事件时间之Watermark详解

1&#xff09;生成 Watermark 1.Watermark 策略简介 为了使用事件时间语义&#xff0c;Flink 应用程序需要知道事件时间戳对应的字段&#xff0c;即数据流中的每个元素都需要拥有可分配的事件时间戳。 通过使用 TimestampAssigner API 从元素中的某个字段去访问/提取时间戳。…

服务器数据恢复—Storwize V3700存储数据恢复案例

服务器存储数据恢复环境&#xff1a; 某品牌Storwize V3700存储&#xff0c;10块硬盘组建了2组Mdisk加入到一个存储池中&#xff0c;一共创建了1个通用卷来存放数据&#xff0c;主要数据为oracle数据库。 服务器存储故障&#xff1a; 其中一组Mdisk中两块磁盘出现故障离线&…

【Linux】进程间通信(共享内存、消息队列、信号量)

一、System V —— 共享内存&#xff08;详解&#xff09; 共享内存区是最快的 IPC 形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到内核&#xff0c;换句话说&#xff0c;就是进程不再通过执行进入内核的系统调用来传递彼此的数…

DaVinci Resolve Studio 19(达芬奇19调色剪辑)win/mac激活版

DaVinci Resolve Studio是一个结合专业的8k 编辑&#xff0c;颜色混合&#xff0c;视觉效果和音频后期制作的软件。只需点击一下&#xff0c;你就可以立即在编辑、混音、特效和音频流之间切换。此外&#xff0c;达芬奇解决(达芬奇)是一个多用户协作的解决方案&#xff0c;使编辑…

实验7:路由冗余协议HSRP配置管理(课内实验以及解答)

实验目的及要求&#xff1a; 理解首跳冗余协议&#xff08;FHRP&#xff09;的工作原理&#xff0c;掌握热备份路由器协议 (HSRP)&#xff08;思科私有协议&#xff09;原理和配置。能够实现网络终端设备虚拟网关的配置和网络故障的灵活切换&#xff0c;完成相应网络的联通性测…

配置opencv属性表

编译opencv cmake -DCMAKE_INSTALL_PREFIX./install -G "Visual Studio 15 2017" -A x64 .. cmake -DCMAKE_INSTALL_PREFIX./install -G "Visual Studio 15 2017" -A Win32 ..cmake --build . --config Release -j 2cmake --build . --config Release --t…

uniapp制作分页查询功能

效果 代码 标签中 <uni-pagination change"pageChanged" :current"pageIndex" :pageSize"pageSize" :total"pageTotle" class"pagination" /> data中 pageIndex: 1, //分页器页码 pageSize: 10, //分页器每页显示…

【介绍下Chrome插件开发】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

.net8系列-04图文并茂手把手教你配置Swagger支持token以及实现Swagger扩展,Swagger代码单独抽离

前情提要 接上篇文章&#xff0c;我们当前已完成如下内容&#xff1a; 创建应用成功创建接口成功配置Swagger实现接口注释和版本控制 本文章主要内容为&#xff1a;配置Swagger支持token传值测试接口 快速上手-代码配置 添加如下代码 文件目录&#xff1a;\xiaojinWebAppl…

解决NetworkManager覆盖/etc/resolv.conf的问题

发布时间&#xff1a;2024.4.27 问题 /etc/resolv.conf是Linux下DNS的配置文件。 但是NetworkManager会用覆盖它&#xff0c;导致我们每次都要重新配置。 解决办法 这是官方推荐的做法。或者你可以用resolveconf工具。 $ nm-connection-editor会调起一个界面&#xff0c;…

uniapp 微信小程序 获取openid,手机号进行登录,配合后端

流程&#xff1a;登录注册功能,通过uni.getUserProfile获取wxcode,通过wxcode传给后端获取openid,sessionkey,unionid。 通过<u-button type"success" open-type"getPhoneNumber" getphonenumber"decryptPhoneNumber">一键登录</u-butt…

【React】反向代理和修改打包后的目录

反向代理 前提是做了反向代理&#xff1a; 安装 http-proxy-middleware npm i http-proxy-middleware在src/下新建 setupProxy.js const proxy require("http-proxy-middleware");module.exports function(app) {app.use(proxy("/api", {target: &qu…

selenium入门篇(环境搭建、八大定位)

背景 Web自动化测现状 1. 属于 E2E 测试 2. 过去通过点点点 3. 好的测试&#xff0c;还需要记录、调试网页的细节 一、selenium环境搭建 一键搭建 pip3 install webdriver-helper 安装后自动的完成&#xff1a; 1. 查看浏览器的版本号 2. 查询操作系统的类型 …

.net报错异常及常用功能处理总结(持续更新)

.net报错异常及常用功能处理总结---持续更新 1. WebApi dynamic传参解析结果中ValueKind Object处理方法问题描述方案1&#xff1a;(推荐&#xff0c;改动很小)方案2&#xff1a; 2.C# .net多层循环嵌套结构数据对象如何写对象动态属性赋值问题描述JavaScript动态属性赋值.net…

淘宝图片搜索API接口:技术原理、使用方法与最佳实践指南

淘宝图片搜索API接口技术详解 在数字化时代&#xff0c;图片搜索已经成为一种高效、直观的信息检索方式。淘宝作为国内最大的电商平台&#xff0c;其图片搜索API接口对于提高购物体验和商家运营效率具有重要意义。本文将详细解析淘宝图片搜索API接口的技术原理、使用方法和注意…