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

目录


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地址)
相关推荐
watermelonoops几秒前
Windows安装Ubuntu,Deepin三系统启动问题(XXX has invalid signature 您需要先加载内核)
linux·运维·ubuntu·deepin
阿甘知识库22 分钟前
宝塔面板跨服务器数据同步教程:双机备份零停机
android·运维·服务器·备份·同步·宝塔面板·建站
安全小王子26 分钟前
Kali操作系统简单介绍
网络·web安全
滴水之功1 小时前
VMware OpenWrt怎么桥接模式联网
linux·openwrt
saynaihe1 小时前
安全地使用 Docker 和 Systemctl 部署 Kafka 的综合指南
运维·安全·docker·容器·kafka
ldinvicible1 小时前
How to run Flutter on an Embedded Device
linux
Hacker_LaoYi2 小时前
【漏洞分析】DDOS攻防分析(四)——TCP篇
网络·tcp/ip·ddos
爱吃水果蝙蝠汤2 小时前
DATACOM-IP单播路由(BGP)-复习-实验
网络·网络协议·tcp/ip
YRr YRr2 小时前
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
linux·opencv·ubuntu
认真学习的小雅兰.2 小时前
如何在Ubuntu上利用Docker和Cpolar实现Excalidraw公网访问高效绘图——“cpolar内网穿透”
linux·ubuntu·docker