zoukankan      html  css  js  c++  java
  • 【计算机网络】数据链路层

    一、数据链路层是TCP/IP模型中的倒数第二层,其主要解决的问题有:

      (1)当我从网络层接收到一个包之后,我应该将这个包发送给谁?

                

                                    图 1

       针对这个问题,我们可以看一下这一层网络包的格式图1, 最开始是目标MAC和源MAC,这两个字段解决的了我这个数据包应该发送给谁和这个数据包是谁发的的问题。

         后一个类型字段分为两种:

                   一种是 IP数据包,这表明后面的数据里面封装的是TCP or UDP 包等。

           另一种是ARP协议(地址解析协议),ARP协议,它主要负责将IP地址转发为MAC地址,好知道我该将这个数据包发送给谁的问题,而ARP的通信模型为在我这个本地局域网里面,我对局域网里所有机器发送一个广播包里面包含了我需要知道目的IP的MAC地址(本地通信全靠吼),当局域网里面其他人收到之后,根据IP判断是不是和自己的IP一样,不是自己的话,就不理会。如果是自己的话,就给发送给他回复一下,我的IP是这个,然后这是我的MAC地址。当收到这个回复之后,然后更具MAC地址将其发送给对应主机。

                               

     (2)如果局域网里面所有机器都在发送数据会不会产生混乱?发包有没有先后顺序?

        在局域网里面有三种数据发送控制方式:第一种是信道划分(每台主机都有各自的信道,如果发送数据的话,只能走那条信道,如果用成其他信道,消息将会传送到其他主机那里)。 第二种是轮流协议(主要指的是对于同一个信道,你用一个时间段,我用一个时间段。如果发送数据的话,只能等待自己的时间段来发送)。 第三种是随机接入协议(当我们要发送数据的时候,先将数据发送出去,但是网络中数据传输非常繁忙,经常导致丢包等问题,然后我们就等待一会,当数据信道传输快空闲的时候才发送。)

     (3)如果数据在发送的过程中出现了错误怎么?我怎么知道我收到的数据是正确的?

        最后一个字段是CRC(冗余校验码)来检测这个数据在传输过程中是否存在误差。主要是通过XOR的原理来计算。

    二、数据链路层的交换设备:

      1)集线器:集线器采用的是广播模式,当一个收到一个需要转发的消息时,他会将这个数据给每一个主机到发送一个,电脑在接收到之后判断是不是自己的,如果是的话,我们就收下,不是的话就直接丢弃。这种模式在消息较少,或者主机较少的情况下可以行得通,但是一旦消息增多,就容易产生广播风暴。

      (2)交换机(二层设备):他可以通过学习的办法来记住某一个MAC应该对应的一个端口(转发表),而不需要像集线器一样所有的主机都发送一份。但是这里会存在一个问题就是当多个交换机组成一个环路的时候,数据会不断的转发,最终导致数据累计塞满整个局域网的情况。  这个问题有一个解决办法:就是STP(最小生成树协议):大概原理就是通过对不同的交换机设置不同的权重来打破换。这个协议存在的问题就是效率太低,如果当前网络系统很庞大时,当新加入一个交换机时,需要进行长时间的运算才能确定该交换机的位置。

     

    三、虚拟局域网(VLAN)他的原理是在二层数据格式上加上一个字段来区分与辨别同一局域网的不同网段(支持该协议的交换机会有一个Trunk口); VLAN ID一共12位,最多支持4098个VLAN的划分。这个区分思想在后面的虚拟机和容器网络通信之间用的比较多。

           

      

  • 相关阅读:
    Linux的kobject机制
    利用内核模块添加系统调用
    register_sysctl_table实现内核数据交互
    设计模式17---享元模式
    设计模式16---中介者模式
    java实现PV操作
    设计模式15---桥接模式
    设计模式15---迭代器模式
    设计模式14---组合模式
    设计模式13---备忘录模式
  • 原文地址:https://www.cnblogs.com/GoodRnne/p/10579176.html
Copyright © 2011-2022 走看看