目录

  • 协议分层
    • 为什么需要分层
    • OSI七层模型
    • TCP/IP 四层模型
      • 数据链路层
      • 网络层
      • 传输层
      • 应用层
  • 封装
  • 分用

协议分层

现在的Internet使用的主流协议族是TCP/IP协议族,,他是一个分层,多协议的通信体系。

TCP/IP包含众多协议,我们无法一一讨论,我会在后续章节逐步介绍,本篇将对协议如何分层,封装和分用进行介绍。

为什么需要分层

网络协议栈设计成层状结构,目的在于将一个实时传输通信的庞大的功能进行解耦,使得各层能做到各自可维护以及可扩展。

例如,我们在通话时,符合人与人之间的语言协议,这使得我们可以彼此进行沟通,但是下一层电话之间的通信协议是如何约定的,再往下的电信号是如何传输的,以及经过了多少基站,我们并不关心,当然电话也听不懂人类的语言,它只负责把我们能认知的信息转达给我们即可。

每一层只需关心对方的对应层的协议是否和自己互通,而上下层之间只负责接口调用即可。期间电话升级成了手机的无线通话,手机通话再升级为视频通话,人类之间并不会因为底层通信方式的改变而改变我们交流的基本方式——语言沟通,这便是通信协议分层即解耦的好处。

OSI七层模型

  • OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
  • 每一层都有相关的协议和相应的物理设备;
  • OSI七层模型是一框架性的设计方法,其最主要的功能就是帮助不同类型,不同系统的主机实现数据传输;

  • 它的优点是将服务,接口和协议这三个概念明确的区分开,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠通信。

TCP/IP 四层模型

OSI七层模型较为复杂且不常用,我们更多谈论的是 TCP/IP 四层模型。 TCP/IP 是一组协议的代名词,其中包含了许多协议,他们组成了 TCP/IP 协议簇。

由下往上依次为:(物理层),数据链路层,网络层,传输层,应用层。

  • (物理层):光电信号的传输介质,如光纤,同轴电缆,电磁波。物理层的能力决定了最大传输效率,传输距离,抗干扰性等。集线器(hub)可对接收到的信号进行放大,以扩大网络的传输距离。
  • 数据链路层:负责设备之间的数据帧的传送和识别,例如网卡设备的驱动、帧同步(识别新帧)、冲突检测(检测到冲突自动重发),数据差错校验。该层有以太网,令牌环网,无线lan等标准。交换机工作在数据链路层。
  • 网络层负责地址管理和路由选择,IP协议从属该层,在IP协议中,通过IP地址,来标识一台主机,并通过路由表的方式规划出两台主机间数据传输的线路(路由)。路由器工作在网络层。
  • 传输层:负责两台主机之间的数据传输,如传输控制协议(TCP)工作在该层,能够确保数据可靠的从源主机发送到目标主机。
  • 应用层:负责应用程序间的沟通,如文件传输协议,网络远程访问协议,电子邮件传输。socket编程就在该层。

  1. 对于一台路由器,它实现了网络层到物理层;
  2. 对于一台交换机,它实现了从数据链路层到物理层;
  3. 对于集线器, 他只实现了物理层;

很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);

数据链路层

该层实现网卡接口的网络驱动程序。以处理数据在物理媒介(以太网,令牌环等)的传输,不同的物理网路具有不同的实现特性,网络驱动程序有隐藏了这些细节向上层提供一个统一的接口

数据链路层的两个常用的协议是ARP协议(Address Resolve Protocol,地址解析协议)和RARP协议(Reverse Address Resolve Protocol,逆地址解析协议)。他们实现了IP地址和机器物理地址(通常是MAC地址,全球唯一,以太网,令牌环和无线网络都使用MAC地址)的相互转换。

网络层使用IP地址寻址一台机器,而数据链路层使用物理地址寻址一台机器,因此网络层必须将目标机器的IP地址转化成其物理地址,才能使用数据链路层提供的服务,这就是ARP协议的用途。RARP协议仅用于网络上的无盘工作站,因缺乏存储设备,无法记住自己的IP地址,它可以利用网卡上的物理地址来向网络管理者查询自己的IP地址。运行RARP服务的网络管理者存有该网络上所以机器的物理地址到IP地址的映射。

网络层

网络层实现数据包的选路和转发。

WAN(Wide Area Network,广域网)通常使用众多的路由器来连接分散的主机和局域网(LAN,Local Area Network),因此通信的两台主机不是直接相连的,而是通过多个中间结点(路由器)连接的。网络层的任务就是选择这些中间结点,以确定两台主机之间的通信路径**。同时网络层对上层隐藏了网络拓扑的连接细节,**使得上层的传输层和应用层看来,通信的双方是直接相连的。

网络层的核心协议是IP协议(Internet Protocol,因特网协议)。

IP协议根据数据包的目的IP地址来决定如何投递它,如果数据包无法直接发送给目标主机,那么IP协议就为他寻找下一个合适的下一跳主机(nest hop),并将数据包交付给i路由器来转发。多次重复这一步骤,直到数据包最终到达目标主机,或者因发送失败而被丢弃。

可见IP协议是通过逐跳(hop by hop)的方式确定通信路径。

网络层另一重要协议是ICMP协议(Internet Control Message Protocal,因特网控制报文协议),是IP协议的重要补充,用于检测网络连接,ICMP的报文格式如下:

  • 8位类型字段区分报文类型,他将报文分为两大类

    • 差错报文:回应网络错误,如目标不可达(类型值为3),重定向(类型值为5)。
    • 查询报文:用于查询网络信息,如ping程序使用ICMP报文查看目标是否可达(类型值为8)。
  • 8位代码字段进一步细分条件

    如重定向报文使用代码值0表示对网络重定向,代码值1表示对主机重定向。

  • 16位校验和字段对整个报文进行循环冗余校验(Cyclic Redundancy Check,CRC)

    检验报文在传输过程中是否损坏。

传输层

传输层为两台主机上的应用程序提供端到端(end to end)的通信。与网络层的逐跳方式不同,传输层只关心通信的起始段和目的端,不在乎数据包的中转过程

实线箭头表示TCP/IP协议族各层之间的实体通信(数据包确实沿着这些线路传递),而虚线则代表了逻辑通信线路

  • 数据链路层(驱动程序)封装了物理网络的电气细节;
  • 网络层封装了网络连接的细节
  • 传输层为应用程序封装了一条端到端的逻辑通信线路,他负责数据的收发,链路的超时重连等。

传输层的主要协议:TCP协议,UDP协议

  • TCP (Transmission Control Protocol,传输控制协议)

    为应用层提供可靠的,面向连接的和基于流(stream)的服务。通过超时重传,数据确认等方式确保数据包正确发送至目的端,因此TCP是可靠的

    使用TCP通信协议的双方先建立TCP连接,并在内核中为该连接维持一些必要的数据结构,如连接状态,读写缓冲区,以及诸多定时器等。

    当通信结束,双方必须关闭连接以释放这些内核数据。

    TCP服务是基于流的,基于流的数据没有边界(长度)限制,它源源不断的从通信的一端流入另一端,发送端逐字节向数据流写入数据,接收端逐字节接收数据。

  • UDP (User Datagram Protocol,用户数据报协议)

    UDP与TCP大相径庭,他为应用层提供不可靠,无连接和基于数据包的服务。

    不可靠:使用UDP协议的的应用程序通常要自己处理数据确认,超时重传等逻辑。

    无连接:通信双方不保持一个长久的联系,因此应用程序每次发送数据都要明确指定接收端的地址(IP地址等信息)。

    基于数据报:每个UDP数据报都有长度,接受端必须以该长度作为最小单位将内容一次性读出,否则数据将被截断。

应用层

应用层负责处理应用程序的逻辑。

数据链路层,网络层,传输层各自分工负责处理通信细节,这部分必须稳定且高效,因此他们在内核空间中实现。

而应用层在用户空间实现,它们需负责处理众多逻辑如文件传输,网络管理等。如果应用层也在内核中实现,内核会变得非常庞大,会有少部分服务器程序在内核中实现,这样代码就无需在内核空间和用户空间切换(主要是数据复制),极大提高工作效率,但这类代码实现较为复杂,不够灵活且不便移植。之后的文章将只围绕应用层的系统调用部分(socket编程)。

列举几个应层协议

  • ping 是应用程序,而不是协议,它利用ICMP协议报文检测网络连接,是调试网络环境的必备工具。
  • telnet协议:远程登录协议,使我们在本地完成远程任务。
  • OSPF协议(Open Shortest Path First,开放最短路径优先):是一种动态路由更新协议,用于路由器之间的通信,以告知对方各自的路由信息。
  • DNS协议(Domain Name Service,域名服务)提供机器域名到IP地址的转换。

封装

上层协议要使用下层协议提供的服务,是通过封装实现的。

上层数据沿着协议栈依次往下传递,每层协议都将上层数据的基础上加上自己的头部信息(有时还包括尾部信息),以实现该层的功能,该过程便是封装。

经TCP封装后的数据称为TCP报文段(TCP message segment),TCP协议为通信双方维持一个连接,并在内核存储相关数据:

TCP的头部信息和TCP内核缓冲区(发送或者接收)数据一起构成TCP报文段:

当发送端的应用程序调用send(或write)函数向TCP连接写入数据,内核中的TCP模块将数据复制进内核的TCP发送缓冲区中,然后TCP模块调用IP模块的服务,传递的参数将包含TCP头部信息及TCP发送缓冲区的数据,即TCP报文段。

UDP的封装与TCP类似,但不同的是UDP无需为应用层数据保存副本,他的服务是不可靠的。如果应用程序检测到,UDP数据包没有成功被接收端接受,并打算重发这个数据报,则应用程序需要重新从用户空间将该数据拷贝到UDP内核缓冲区中。

经过数据链路层封装的数据称为帧(frame),传输媒介不同,帧的类型也不同。比如,以太网传输的是以太网帧(ethernet frame),而令牌环网络传输的是令牌环帧(token ring frame)。

以太网帧使用6字节的目的物理地址和6字节的源物理地址来表示通信双方。关于类型字段,会在以后的文章讨论,4字节CRC字段对帧的其他部分提供循环冗余校验。

帧的最大传输单元(Max Transmit Unit,MTU),即帧最多能携带多少上层协议数据,通常受网络类型的影响,过长的IP数据报可能需要被分片传输。

分用

当帧达到目的主机时,沿着协议栈自底向上依次传递,各层协议依次处理帧中本层负责的头部数据,以获取所需信息,并最终将处理后的数据交给目标应用程序。这个过程称为分用,分用是依靠头部信息中的类型字段实现的。

因为IP协议、ARP 协议和RARP协议都使用帧传输数据,所以帧头部需提供类型字段来区分他们。

以太网帧为例:

类型字段为0x800为IP数据报,0x806为ARP请求或应答报文,0x835为RARP请求或应答报文。

同样,因为ICMP协议,TCP协议和UDP协议都使用IP协议,所以IP数据报的头部采用16为的 协议字段来区分它们。

TCP报文段和UDP报文段则通过其头部的16位端口号(port number)字段来区分上层应用程序。比如DNS协议对应端口号为53,HTTP协议对应端口号80。

所以应用层协议使用的端口号都可在 /etc/services文件中找到。

帧通过上述分用步骤后,最终将封装前的原始数据送至目标服务,这样在顶层目标服务看来,封装和分用似乎没有发生过


— end —

青山不改 绿水长流

【Linux网络】第一篇:初识网络(分层,封装与分用)相关推荐

  1. 入木三分学网络第一篇--VRRP协议详解-----(1)

    原帖:http://blog.chinaunix.net/uid-11654074-id-2857384.html 目录 入木三分学网络第一篇--VRRP协议详解 1. VRRP产生背景及应用环境 1 ...

  2. 【JavaSe】网络编程篇(一) 网络编程入门

    JavaSe·网络编程篇(一) 网络编程入门 1. 软件结构 C/S结构:全称为Client/Server结构,是指客户端和服务器结构.常见程序有QQ.百度网盘等软件 B/S结构 :全称为Browse ...

  3. 【Linux入门指北】第一篇 初识Linux

    目录 前言 一.Linux操作系统的发展历史 1.Linux操作系统的诞生 2.Linux操作系统的发展 1.自由软件基金会(FSF) 2.GPL协议 3.GUN工程 二.Linux的不同发行版本 1 ...

  4. Linux基础第一篇

    1 初识Linux 1.1 操作系统 操作系统(Operation System, OS),是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石.操作系统需要处理如管理与配置内存.决 ...

  5. zc706开发板的linux开发,第一篇:zc706 开箱及开发环境搭建

    第一篇:zc706开箱及开发环境搭建 1.拿到zc706时的封装箱子,从该工具箱中打开后,将看到内含的器件: 2.其中zc706评估板具体各部分说明如下: 在拿到开发板后,默认开发板上的拨码开关以及跳 ...

  6. Linux【第一篇总结】

    文章目录 一.入门概述 二.环境搭建 三.走近Linux系统 四.常用的基本命令 4.1.目录管理 4.2.基本属性 4.3.文件内容查看 4.4.Vim编辑器 4.5.账号管理 4.6.用户组管理 ...

  7. 入木三分学网络第一篇--VRRP协议详解-----(2)

    原帖:http://blog.chinaunix.net/uid-11654074-id-2857385.html 2.4 VRRP通告报文的发送与接收处理流程 2.4.1 当收到一个VRRP通告报文 ...

  8. NR接入网从标准到原理:第一篇·NR网络架构(一)

    Chapter 1. NR网络架构 (一) 目前的市面上的书籍往往以5G指标.标准化进展.LTE整体介绍等模块作为开端.这些内容大同小异,随便翻阅一本书籍都能得到较为完整的认知.而本系列文章重点在于查 ...

  9. linux系统第一篇(Linux系统入门介绍)

    Linux发展史 1.1操作系统是什么 操作系统(Operating  System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是配置在计算机硬件上的第一层软件,其他任何软件都必须在操作 ...

  10. python网络爬虫之初识网络爬虫

    第一次接触到python是一个很偶然的因素,由于经常在网上看连载小说,很多小说都是上几百的连载.因此想到能不能自己做一个工具自动下载这些小说,然后copy到电脑或者手机上,这样在没有网络或者网络信号不 ...

最新文章

  1. 情人节微信红包数据公布,你离海王与海后有多远...
  2. PHP几个快速读取大文件例子
  3. xLite连接asterisk提示sip408错误
  4. 网络营销第四课:网络营销需要掌握的网页代码(2)
  5. Qt工作笔记-XML文件的写入
  6. Maven的下载、安装和配置
  7. 数据结构上机实践第四周项目3 - 单链表应用
  8. 2006年上半年开发心得
  9. 数据库索引高频面试题梳理
  10. 提权学习:提权拿服务器方法总结-超细(补充节点0x02)
  11. ENGINEER 05
  12. 阿里Android开发手册正式版一览
  13. 十二首《临江仙》,说尽心中无限事
  14. 聚焦传统网络,学习SDN基础和案例
  15. 【Spring Cloud Alibaba 温故而知新】(五)SpringCloud Sleuth + Zipkin:分布式日志追踪
  16. html文档主体的根标签,HTML详细介绍(基础标签篇)
  17. 前后端分离模式下前端与后端数据交互
  18. 对云计算,大数据和人工智能的浅谈(三)
  19. 中英词典 mysql_英汉字典(含音标)csv导入MySQL
  20. IP地址管理工具——netbox——全

热门文章

  1. keil c语言字符型变量的值,Keil C语言
  2. 加权平均值不等式的证明
  3. office2003注册序列号CAB文件丢失…
  4. bat脚本——提取多个文件夹到指定路径
  5. 学python看小甲鱼还是黑马_为什么我看完小甲鱼的python视频还是不会写呢?
  6. ubuntu查看 固态硬盘位置_ubuntu新增加固态硬盘,格式化并挂载到根目录下
  7. ipa在线安装搭建_iOS 可以永久安装IPA软件了,前提是……
  8. 《Python助力交通》公众号说明
  9. 临安推进智慧交通频频升级
  10. idea分支切换注意事项