一、网络通讯协议

一般地,关注于逻辑数据关系的协议通常被称为上层协议,而关注于物理数据流的协议通常被称为低层协议。

IEEE802就是一套用来管理物理数据流在局域网中传输的标准,包括在局域网中传输物理数据的802.3以太网标准。还有一些用来管理物理数据流在使用串行介质的广域网中传输的标准,如帧中继FR(FrameRelay),高级数据链路控制HDLC(High-LevelDataLinkControl),异步传输模式ATM(AsynchronousTransferMode)。

二、分层模型

一般来说有这四种网络通讯协议:TCP/IP、OSI、IPX/SPX、SNA,需要了解的有OSI、TCP/IP两种分层模型,下面具体说这两种分层模型

OSI

  1. 物理层    ----    在设备之间传输比特流
  2. 数据链路层    ----    将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质
  3. 网络层    ----    提供逻辑地址,供路由器确定路径
  4. 传输层    ----    提供面向连接或非面向连接的数据传递以及进行重传前的差错检测
  5. 会话层    ----    负责建立、管理和终止表示层实体之间的通信会话,该层的通信由不同设备中的应用程序之间的服务请求和响应组成
  6. 表示层    ----    提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别
  7. 应用层    ----    为应用程序提供网络服务

TCP/IP

  1. 网络接口层    ----    PDU(数据)
  2. 网络层    ----    Segment(数据段)
  3. 传输层    ----    Packet(数据包)
  4. 应用层    ----    Frame(数据帧)    ----    BIT(比特流)

TCP/IP模型将网络分为四层。TCP/IP模型不关注底层物理介质,主要关注终端之间的逻辑数据流转发。TCP/IP模型的核心是网络层和传输层:网络层解决网络之间的逻辑转发问题,传输层保证源端到目的端之间的可靠传输。最上层的应用层通过各种协议向终端用户提供业务应用。

三、终端之间的通讯

帧格式分为以下两种:Ethernet_II、IEEE802.3

主要区别:EthernetII格式中包含一个Type字段,标识以太帧处理完成之后将被发送到哪个上层协议进行处理。IEEE802.3格式中,同样的位置是长度字段。

不同的Type字段值可以用来区别这两种帧的类型,当Type字段值小于等于1500(或者十六进制的0x05DC)时,帧使用的是IEEE802.3格式。当Type字段值大于等于1536(或者十六进制的0x0600)时,帧使用的是EthernetII格式。以太网中大多数的数据帧使用的是EthernetII格式。

以太帧中还包括源和目的MAC地址,分别代表发送者的MAC和接收者的MAC,此外还有帧校验序列字段,用于检验传输过程中帧的完整性。

Ethernet_II

  • Ethernet_II帧类型值大于等于1536(0x0600)。
  • 以太网数据帧的长度在64-1518字节之间。

  Ethernet_II帧中字段说明

  1. DMAC(DestinationMAC)是目的MAC地址。DMAC字段长度为6个字节,标识帧的接收者。
  2. SMAC(SourceMAC)是源MAC地址。SMAC字段长度为6个字节,标识帧的发送者。
  3. 类型字段(Type)用于标识数据字段中包含的高层协议,该字段长度为2个字节。类型字段取值为0x0800的帧代表IP协议帧;类型字段取值为0806的帧代表ARP协议帧。
  4. 数据字段(Data)是网络层数据,最小长度必须为46字节以保证帧长至少为64字节,数据字段的最大长度为1500字节。
  5. 循环冗余校验字段(FCS)提供了一种错误检测机制。该字段长度为4个字节。

IEEE802.3

  • EEE802.3帧长度字段值小于等于1500(0x05DC)。

  IEEE802.3帧中字段说明:IEEE802.3帧格式类似于Ethernet_II帧,只是Ethernet_II帧的Type域被802.3帧的Length域取代,并且占用了Data字段的8个字节作为LLC和SNAP字段。

  1. Length字段定义了Data字段包含的字节数。
  2. 逻辑链路控制LLC(LogicalLinkControl)由目的服务访问点DSAP(DestinationServiceAccessPoint)、源服务访问点SSAP(SourceServiceAccessPoint)和Control字段组成。
  3. SNAP(Sub-networkAccessProtocol)由机构代码(OrgCode)和类型(Type)字段组成。Orgcode三个字节都为0。Type字段的含义与Ethernet_II帧中的Type字段相同。IEEE802.3帧根据DSAP和SSAP字段的取值又可分为以下几类:
  • 当DSAP和SSAP都取特定值0xff时,802.3帧就变成了Netware-ETHERNET帧,用来承载NetWare类型的数据。
  • 当DSAP和SSAP都取特定值0xaa时,802.3帧就变成了ETHERNET_SNAP帧。ETHERNET_SNAP帧可以用于传输多种协议。
  • DSAP和SSAP其他的取值均为纯IEEE802.3帧。

四、数据帧传输

  • 数据链路层基于MAC地址进行帧的传输。

以太网在二层链路上通过MAC地址来唯一标识网络设备,并且实现局域网上网络设备之间的通信。MAC地址也叫物理地址,大多数网卡厂商把MAC地址烧入了网卡的ROM中。发送端使用接收端的MAC地址作为目的地址。以太帧封装完成后会通过物理层转换成比特流在物理介质上传输。

五、以太网的MAC地址

网络设备的MAC地址是全球唯一的。MAC地址长度为48比特,通常用十六进制表示。MAC地址包含两部分:前24比特是组织唯一标识符(OUI,OrganizationallyUniqueIdentifier),后24位序列号是厂商分配给每个产品的唯一数值,由各个厂商自行分配。

六、单播、广播、组播

1)单播:指从单一的源端发送到单一的目的端。每个主机接口由一个MAC地址唯一标识,MAC地址的OUI中,第一字节第8个比特表示地址类型。对于主机MAC地址,这个比特固定为0,表示目的MAC地址为此MAC地址的帧都是发送到某个唯一的目的端。在冲突域中,所有主机都能收到源主机发送的单播帧,但是其他主机发现目的地址与本地MAC地址不一致后会丢弃收到的帧,只有真正的目的主机才会接收并处理收到的帧。

2)广播:表示帧从单一的源发送到共享以太网上的所有主机。广播帧的目的MAC地址为十六进制的FF:FF:FF:FF,所有收到该广播帧的主机都要接收并处理这个帧。

广播方式会产生大量流量,导致带宽利用率降低,进而影响整个网络的性能。

当需要网络中的所有主机都能接收到相同的信息并进行处理的情况下,通常会使用广播方式。

3)组播:组播比广播更加高效。组播转发可以理解为选择性的广播,主机侦听特定组播地址,接收并处理目的MAC地址为该组播MAC地址的帧。

组播MAC地址和单播MAC地址是通过第一字节中的第8个比特区分的。组播MAC地址的第8个比特为1,而单播MAC地址的第8个比特为0。

当需要网络上的一组主机(而不是全部主机)接收相同信息,并且其他主机不受影响的情况下通常会使用组播方式。

网络设备如何确定以太网数据帧的上层协议?

以太网帧中包含一个Type字段,表示帧中的数据应该发送到上层哪个协议处理。比如,IP协议对应的Type值为0x0800,ARP协议对应的Type值为0x0806。

终端设备接收到数据帧时,会如何处理?

主机检查帧头中的目的MAC地址,如果目的MAC地址不是本机MAC地址,也不是本机侦听的组播或广播MAC地址,则主机会丢弃收到的帧。如果目的MAC地址是本机MAC地址,则接收该帧,检查帧校验序列(FCS)字段,并与本机计算的值对比来确定帧在传输过程中是否保持了完整性。如果检查通过,就会剥离帧头和帧尾,然后根据帧头中的Type字段来决定把数据发送到哪个上层协议进行后续处理。

HCNA(二)以太网的帧结构的更多相关文章

  1. Java虚拟机运行时栈帧结构--《深入理解Java虚拟机》学习笔记及个人理解(二)

    Java虚拟机运行时栈帧结构(周志明书上P237页) 栈帧是什么? 栈帧是一种数据结构,用于虚拟机进行方法的调用和执行. 栈帧是虚拟机栈的栈元素,也就是入栈和出栈的一个单元. 2018.1.2更新(在 ...

  2. CAN总线学习记录之二:系统结构与帧结构

    CAN总线系统结构 CAN 控制器  接收控制单元中微处理器发出的数据,处理数据并传给 CAN 收发器 CAN 收发器 将数据传到总线 or 从总线接收数据给 CAN 控制器 CAN 数据传递终端 避 ...

  3. ETHERNET帧结构

    以太网帧http://blog.csdn.net/guoshaobei/article/details/4768514 Ethernet的帧格式 (转)  http://jiangqiaosun.bl ...

  4. 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(四)

    全系列Index: [原创]只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(一) [原创]只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(二) [原创]只学到二维数组和结构体,不用链表也能 ...

  5. 深入理解java虚拟机(十) Java 虚拟机运行时栈帧结构

    运行时栈帧结构 栈帧(Stack Frame) 是用于虚拟机执行时方法调用和方法执行时的数据结构,它是虚拟栈数据区的组成元素.每一个方法从调用到方法返回都对应着一个栈帧入栈出栈的过程. 每一个栈帧在编 ...

  6. C语言函数调用及栈帧结构

    source:http://blog.csdn.net/qq_29403077/article/details/53205010 一.地址空间与物理内存 (1)地址空间与物理内存是两个完全不同的概念, ...

  7. 【Unity Shaders】学习笔记——SurfaceShader(二)两个结构体和CG类型

    [Unity Shaders]学习笔记——SurfaceShader(二)两个结构体和CG类型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5596698. ...

  8. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  9. CAN协议,系统结构和帧结构

    CAN:Controller Area Network,控制器局域网 是一种能有效支持分布式控制和实时控制的串行通讯网络. CAN-bus: Controller Area Network-bus,控 ...

随机推荐

  1. Linux who命令详解

    who 命令显示关于当前在本地系统上的所有用户的信息.显示以下内容:登录名.tty.登录日期和时间.输入whoami 显示您的登录名.tty.您登录的日期和时间.如果用户是从一个远程机器登录的,那么该 ...

  2. 奇怪的bug,不懂Atom在添加markdown-themeable-pdf,在配置好phantomjs的情况下报错

    本来打算用一下atom但是导出pdf报错,可是在预览的情况下就没有问题,顺便吐槽一下谷歌浏览器自己的markdown在线预览插件无法适配,用搜狗搭载谷歌的插件才能导出pdf,一下感觉逼格少了很多,等忙 ...

  3. mysql 插入汉字异常: Incorrect string value: '\xE8\xB0\xA2\xE9\x9D\x99' for column 'uname' at row 1

    该字段编码问题,不支持中文,设置支持中文即可

  4. canvas小球 时间demo

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. URAL-1039 Anniversary Party---树形DP入门题

    题目链接: https://cn.vjudge.net/problem/URAL-1039 题目大意: 开一个party,每个员工都有一个欢乐值,只有是上司和下属不同时存在时才能欢乐,问怎样安排能有最 ...

  6. Django的视图流式响应机制

    Django的视图流式响应机制 Django的响应类型:一次性响应和流式响应. 一次性响应,顾名思义,将响应内容一次性反馈给用户.HttpResponse类及子类和JsonResponse类属于一次性 ...

  7. burpsuit常用功能

    1.生成GET数据包:复制url -> 打开burp -> repeater -> 右键paste url as request 2.生成POST数据包:生成一个GET数据包 -&g ...

  8. Go并发与.Net TAP

    Go package main import "fmt" func sum(arrays []int, ch chan int) { fmt.Println(arrays) sum ...

  9. svn .externals 属性

    问:如下自定下载关联模块呢? 答:第一步: 编辑svn.externals文本,如下所示 dir/moduel_name URL/module dir/moduel_name URL/module 第 ...

  10. USDT/BTC/ETC/HT的解释

    USDT 泰达币 泰达币(USDT)是Tether公司推出的基于稳定价值货币美元(USD)的代币Tether USD(下称USDT),1USDT=1美元,用户可以随时使用USDT与USD进行1:1兑换 ...