zoukankan      html  css  js  c++  java
  • 数据链路层

      数据链路层的工作是如何在局域网中把信息从一个主机送到另一个主机,路由器的使用是在此之前。

    3.1 使用点对点信道的数据链路层

      什么是点对点?什么是信道?

      封装成帧

      网络层传下来的包会被数据链路层在首尾各加上一段数据,这样包就成了帧,相应的数据链路层也会把收到的帧拆去首位的数据变成包给上层的网络层。数据链路层在包首尾所加入的信息的格式有严格的规定,这部分信息除了包含控制信息之外最重要的功能是用于帧定界,即一个主机在接收到一串比特流的时候能够知道从哪里开始到哪里结束是一个完整的帧,主机从比特流里找到SOH知道马上有一个帧要传过来,当他看到一个EOT的时候知道帧已经传输完毕,把SOH和EOT之间的比特流当成一个完整的帧去拆解出IP包,由此可见包是网络传输的基本数据单位。

      

      透明传输

      SOH和EOT称为帧界定符,十六进制下分别是01和04。传输的包里有0x04的话那么数据链路层会错误的认为找到了帧结束符,丢弃后面的部分。解决这种“不透明”传输的办法里在发送端如果发现了数据部分有上述两个字符那么就插入ESC字符,接收端如果看到ESC字符就删除该字符。这种字符被称为转义字符,自己平时写代码也会用到,告诉系统转义字符后面的字符当做普通字符处理。

      差错检错

    为了避免传输过程中1误传成0,0误传成1,需要插入一定冗余数据,并在接收端使用一个我懒得看的技术--循环冗余检测技术判断是否出现误传。

    3.2 点对点协议PPP

    3.2.1 PPP协议的特点

      PPP(point-to-ponit)协议是用在主机ISP设备通信的协议。就像每个人的电脑、手机连接到教研室的路由器(ISP)然后再接入局域网。最大的特点是不需要确保可靠性传输,可靠性传输有TCP协议保证。

    3.2.2 PPP协议的帧格式

      

      这个图是对上一节的图的细化表示,信息部分封装着IP数据报,在数据报前后各有帧首和帧尾用于定界和存储控制信息。其中比较重要的控制信息存储在首部的第四部分,若该部分存储的是0x0021代表为IP数据报。

    3.2.3 PPP协议的工作状态

      PPP协议首先要为主机和ISP设备建立数据链路,数据链路的建立是通过一系列LCP分组建立的

    3.3 使用广播信道的数据链路层

    3.3.1 局域网和以太网

      局域网是相对于广域网而言的,区别在于网络的大小,由于网络的范围比较小,所以局域网有以下特点

    • 广播。一台主机可以给局域网内所有的主机发送消息
    • 可靠性较高。局域网内部通信差错出现的概率较小。

      局域网之间的主机有多种连接方式,根据拓扑结构不同可以分为星形网、总线网等结构。以太网指的是星形拓扑的局域网,由于该种拓扑结构的局域网有较好的性能所以以太网几乎成了局域网的代名词。虽然对以太网的介绍是放在数据链路层里,但以太网的不仅仅只有数据链路层的功能。

    3.3.2 适配器

      适配器就是网卡,但是由于现在网卡集成到了主板上,不再具有独立的网卡,所以适配器显得更加专业和精确。适配器的作用是协调CPU和网络之间的通信,适配器和局域网的通信是串行的,适配器的CPU的通信是并行的,所以适配器具有的第一个功能是并行和串行之间的转换。CPU处理数据的速度和网络传输的速度不一致,所以适配器的第二个功能是缓存数据。计算机接在不同的网络中IP地址不相同但MAC地址是相同的,因为IP地址是存储在存储器里,MAC地址在适配器里。

      

    3.3.3 CSMA/CD协议

      用于处理以太网中多主机之间信道冲突的问题

    3.4 使用广播信道的以太网

    3.4.1 什么是集线器

      

      集线器就是一个信号放大器,把接收到的信号放大并转发出去,工作在物理层。

    3.4.2 什么是mac地址

      一个主机的硬件地址,可以理解为主机的唯一标志。

  • 相关阅读:
    C#.Net 如何动态加载与卸载程序集(.dll或者.exe)0-------通过应用程序域AppDomain加载和卸载程序集
    C#.Net 如何动态加载与卸载程序集(.dll或者.exe)6-----在不卸载程序域的前提下替换程序集文件。
    C#.Net 如何动态加载与卸载程序集(.dll或者.exe)5-----Assembly.Unload
    C#.Net 如何动态加载与卸载程序集(.dll或者.exe)4-----Net下的AppDomain编程 [摘录]
    C#.Net 如何动态加载与卸载程序集(.dll或者.exe)3---- 动态加载Assembly应用程序
    C#.Net 如何动态加载与卸载程序集(.dll或者.exe)2----通过应用程序域AppDomain加载和卸载程序集之后,如何再返回原来的主程序域
    C#.Net 如何动态加载与卸载程序集(.dll或者.exe)1----C#中动态加载和卸载DLL
    iOS:制作一个简易的计算器
    iOS:UIView视图与组件控件
    C++:友元运算符重载函数
  • 原文地址:https://www.cnblogs.com/AshOfTime/p/10525912.html
Copyright © 2011-2022 走看看