1

网络基础知识学习 – 物理层和数据链路层

 1 week ago
source link: https://www.taterli.com/9910/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

网络基础知识学习 – 物理层和数据链路层

网络基础知识学习 – 物理层和数据链路层

这篇东西居然写了我三天时间啊!!!

虽然已经配置过很多看起来还算比较大的网络,但是感觉自己其实还是乱折腾,很多东西知其然不知其所以然,所以决定好好学习一下,我自己本身学的是通信相关,但是并不学计算机网络,所以很多东西其实也是网上所学,也欢迎专业人士来指正.

网络在我的理解中,就是七层模型中,下层为上层提供服务,并且不管上层是怎么打包数据的,物理层就是网线,光纤和无线信号,包括我们的蜂窝网络也算是网络物理层.我们的网线接口也算是物理层,我们的天线也是物理层,基站的天线,手机的天线等等都是物理层,包括上面的调制解调电路等等.

所有信号都要经过调制,才能传递,哪怕是电信号他不也要经过编码嘛,一般的调制手段有以下这些.

FDM - 频分复用,把一个大的频带拆成很多个小的频带来通信,每个人都占用一条子信道来通信.

image-15-1024x362.png

TDM - 时分复用,每个人轮流使用时间片,这样就可以达到轮流使用一个比较大的信道,每个人在使用信道时候就比较宽.

image-16-1024x378.png

WDM - 波分复用,其实是利用光纤中的特点,可以入射不同的波长,来在同一条光纤传递不同的信息,比如一条光纤能传1Gbps,如果分成3个波段进去,他就能传3Gbps,当然为了方便接收后区分,这个也是有上限的,我猜QSFP就是这个道理吧.

image-17-1024x321.png

CDMA - 码分复用,这个算是我们国内电信发明的一个通信方法,就是利用多码片机制,基站发送的信号是给到每一个手机的,这样手机只要从信号中和自己的码片进行运算,就能把数据还原出来.因为每个手机收到的都是自己包含多个手机的该收到数据,你不知道接收人的码片就无法解密了,所以还有安全的特点.

image-18-1024x439.png

当然无线调制在空中,还可以有在载波上的频率调试,相位调制,也可以是他们两都结合,能提供更多信息的正交编码,收到数据之后还得校验还原,这不,数据链路层的概念就要出来了.

我们和AP是一个数据链路,我们通过AP连接手机这不叫一条链路,是多条链路组合而成,链路主要目的就是承载数据,把数据最后切成码片,让物理层通过各种方法发送出去.所以我们这里就有了帧的概念,都是一帧一帧的传递的,目前主流的还是古老的以太网V2帧,路由器之间则用PPP帧,之前还有HDLC帧,似乎默认思科之间通信用的就是这个!

以太网V2的MAC帧,在链路层的概念里,我们只关心了链路层的东西,后面的其他层次我们都不关心.

image-19.png

PPP帧相对以太网V2帧,他又起始结束符(示意图中标志字节),所以他应该能更紧凑的通信吧,相对于以太网V2帧的前导码方式来说,资源消耗也应该没那么大.

image-21.png

中间描述的数据载荷,其实就是MTU,所以,MTU其实是不包含链路层的开销的,网上也太多资料把这个算进去了,另外为了达到透明传输,在传输过程如果不慎遇到PPP帧的起始结束符,那就需要对他进行一些小处理.

如果是按字节为传输单位的线路,则会填充转义字符,具体转义规则就是遇到结束起始符的话,就在他前面加入ESC,所以一旦数据读到ESC,后面再看到结束起始符也只能当普通数据看了,如果遇到ESC就前面加入ESC,当然,除此通用方法之外还可以像PPP帧这样处理的.

image-30.png

如果是按位填充的,遇到连续6个1会判定为起始结束符,所以如果是数据,那么数到5个1的时候,就给添加一个0,这样如果接收端收到11111011,也需要去掉其中的0.

image-31.png

另外传输数据就不可避免会出错,所以也要添加一些机制,在传统方式上,我们会用奇偶校验码,就是数一下数据中奇数个人,然后添加一个1或者0,保持数据奇数之类的,但是现在用的更多的是CRC校验,而且现在CRC校验的多项式还有规定的,大概是这些多项式比较科学吧.

比如CRC要发送数据.

image-24.png

接收时候也是用同一个除数,余数为0就是正确,否则不正确.

image-25.png

看一看我们FCS,以太网V2帧中有4B呢,所以足够使用CRC-32进行校验算法,而PPP帧也有2B,用的是CRC-CCITT,反正就是FCS位数多了,肯定更容易找出错误,当然这都是找出错误,并不纠正错误,毕竟重发一次代价远比纠正更低,毕竟数据链路层,考虑的还是链路上的事情,链路嘛,能有多远?

而且数据链路层网上还有TCP之类来保证可靠性,重发什么,当然,链路层的802.11无线局域网由于不太稳定,所以他也有一定的重发机制.在链路层面上保证他能到AP,不代表他能到对方服务器,这个经过东西非常多,还需要更上层的协议进行保证.

停止-等待协议,收到确认信息再发送,否则等到RTO超时发送,或者等到NAK时重传,如果发送的数据比较多还需要用到确认编码,以确保确认了正确的信息.

image-26.png

上面这个方法信道利用率比较低,整个传输包含发送方的数据发送时间Td,中途途径时间RTT,对方返回时间Ta,延迟大的时候效率特别低.

image-27.png

所以这种方法还是比较低效率的,为了提高效率,可以使用回退N帧协议.类似发送需要确认编号一样,回退N帧协议会一次性发送多个,并等待一个或者多个ACK,建立滑动窗口,发送滑动窗口大小必须为2^n-1容量,n大于等于0且为整数,否则可能出现无法判断窗口的问题,回退N帧协议有发送所有ACK或者发送最后一个分组的ACK两种方法,如果收不到预期的ACK则重传窗口内仍未成功数据,如果都成功,滑动窗口,接收窗口只能取1.

image-28.png

现在我们通过比较暴力的方法解决了数据可能出错的问题,是时候讲回协议本身,前面已经讲到PPP帧格式,其中首尾都是标志,其他字段分别怎么用呢.具体就是看其他字段意义,标志位固定为0x7E,属于PPP帧分界符,就是起始结束位了,地址是0xFF,暂时还没用到,控制位是0x03,暂时也还没用到,协议就用到了,主要标注数据payload里承载的是什么东西,FCS前面已经说了是基于CRC-CCITT做的校验,至于如何透明传输,前面已经说过了.

image-29.png

我第一次听到PPP这个名字还是宽带拨号的PPPoE,他意思就是PPP承载在以太网上,拨号鉴权到电信服务器验证,但是PPP本身不是强制要鉴权的.

image-32-1024x505.png

我们在链路层的通信中,常用到物理地址(MAC),但是这个物理地址和物理层毫无关系,物理层可是没有什么地址不地址的,一个网络设备可以拥有多个MAC地址,比如蓝牙有地址,有线网卡有地址,无线网卡也有地址.地址的前6个字节是OUI,Wireshark网站上也可以查对应MAC是谁的,MAC地址是有规范编码的,并不是全部都是公共OUI管理的.

image-33-1024x608.png

工作在非混杂模式的正常网卡,他只会在收到广播包以及和字节MAC对应的包才会响应,所以如果你就算网络层上把IP设置正确了,MAC不对,数据也是到不了的,毕竟链路层不帮你搬运啊,另外有一些组播地址是约定保留的,比如BPDU的地址等.

如果早年用过集线器的人都知道,集线器这货不好用,设备多了就经常断网,是因为他会有碰撞问题,为了减少碰撞的发生,只能限制设备数量,或者限制通信距离,毕竟网络不像CAN那种仲裁机制,在集线器这种模式下,只能靠边发送边监听有没有碰撞,有碰撞就按照规范等一会再发,这种方式叫CSMA/CD.

image-34-866x1024.png

毕竟电信号传输也是要时间的,所以大家检测到总线空闲,大家都一起发数据,最后都发到对方那,才发现碰撞了,大家才开始随机休息再发.人为规定10Mbps网络下,争用期是512比特时间,就是51.2us,带入10Mb/s*51.2us=512b=64Bytes,单端极限传播延迟是51.2us/2=25.6us,25.6us*光速大约等于5km,所以10Mbps线缆最长不超10km是安全的,争用期的估计是δ->0取得极限,就是A给D快,并且马上要碰撞了,D才人为总线空闲开始发,另外最大长度肯定也要规定,所以MTU=1500就是这么来的,加上头尾和透明传输的插入,实际长度就是比1500略大,如果MTU过大,就会产生下面这种情况.

image-35.png

那么这个退让又是怎么做的呢,这就涉及退避算法,大致来说就是碰撞次数越多,退避时间越长,结果不管怎样退避都是失败,那只能报告这个网炸了.

image-36.png

可见,设备只要多了,碰撞就很容易发生,问题就更加明显,网络就炸裂了.所以后面要用到交换机这么一个聪明的家伙.在集线器到交换机途中,还出现一个叫网桥的东西.具体来说,网桥他可以在监听流量中学习到每个接口需要传递的包的MAC,并记录下来,可以做到明确转发,如果还没收到具体的MAC,会进行盲目转发,网桥有STP协议防止产生环路,通过BDPU交互,可以构建出带冗余的网络环境.

网桥也不太能隔离碰撞域,因为他也只是转发数据.如下图如果A发送到E,那么两边集线器都是忙的.

image-37.png

不过,现在交换机已经很便宜了,所以大多数都是交换机,交换机是有内存的,他会存下每个端口来的东西,然后分给对应的位置,就像一个物流中转中心,而且交换机内部很多通路,不会再像以前集线器那样碰撞了.

image-38.png

不过,如果是一个巨大的交换网络呢?虽然碰撞域问题是解决了,但是广播包还是超多的,毕竟无时无刻都有很多ARP包,RIPv1包等等,路由器当然可以分割广播域了,但是成本比较高,这里有一个成本较低的方案就是VLAN,VLAN实际上是对以太网V2帧进行扩展,计算机是不处理的,仅仅用于交换机之间.

image-40-1024x270.png

内部格式.

image-41-1024x482.png

对于电脑来说,配置为Access接口,只有一个VLAN ID且等于PVID(仅在华为的概念),交换机互联用Trunk接口,他能通过多个VLAN,同VLAN的才能收到广播,不同的VLAN广播是隔离的,如果离开Trunk口的VLAN等于Trunk的PVID,也会脱标签,标签只在交换机里或者交换机之间使用.

image-42.png

华为的Hybird接口算是特殊的Trunk口,如果这个接口启用后可以设置一个去标签列表,这样这个接口就可以同时去除多个标签,然后连接普通计算机,这个计算机可以同时访问不同VLAN的东西.

现在讲完网络设备之间连接,该到终端这方面了,终端常用的是以太网V2帧,虽然IEEE 802.3后面才出来,但是流行的依然是以太网V2帧,他们仅仅是类型字段有差别,具体格式往上翻翻,其他对于链路层是没差的.还记得前面说的MTU一般最大1500,加上以太网V2帧的开销,最大就是1518了,因为以太网V2帧没有透明传输的烦恼,他是利用前导码来确认一帧的开始的,所以他的实际最大payload是固定的.

image-39.png

前面已经讲过一些数据链路层的数据保证机制,比如回退N帧,实际上目前我们能接触到需要用到的基本都是无线,而且通常是有固定设施的802.11无线局域网,即有AP.我们说的SSID全称就是服务集标识符,BSSID就是基本(Base)服务集,有时候一个AP负责不过来,就用到了ESS.多个BSS一起提供服务.

image-46.png

我固定设施的802.11无线局域网还是比较少.就是每个设备自建互联,都要互相转发数据,而且标准中没有多跳通信.可能是特殊场景的吧.前面不是说了CSMA/CD嘛,很可惜无线用不了,因为有些情况下,他都检测不到碰撞.只能用CSMA/CA,从检测碰撞改成避免碰撞,避免是尽量避免,不是绝对不碰撞,其中隐蔽站就是最大的问题,检测不到对方是不是发了东西.

image-47.png

所以无线中通过多种机制来避免发生碰撞,其中CSMA就要发送时监听载波,信道忙碌了那就只能等等,这个帧准备要发,需要先监听DIFS定义这么一段时间,然后再执行一个退避时间,然后开始发送,每个人的退避时间是不同的,因为这是随机选择的.类似TDM机制一样把数据发走.

image-48.png

还可以利用额外的RTS/CTS机制来申请一段时间的信道使用权限,只要监听到CTS或者RTS,都知道这个信道马上就不能用了.

image-49.png

无线局域网MAC帧中有三种类型,最多的就是数据帧,还有控制帧和管理帧,上面说的RTS,CTS,之前说的ACK,NAK都是控制帧,加入SSID,移动到另一个AP这些都属于管理帧,占比比较少,往上也有人详细介绍里面的细节,我就不太细致说了,大致说说数据帧.

image-50.png

去往DS和来自DS是两个控制字符,因为我要具体知道数据是要发送到哪个AP去处理,我要把数据从A发到B,想经由AP1处理,那么你看三个MAC地址不都需要了吗?所以他相对以太网而言,就多了地址3这个选项,如果A要发送给B,结果B连接的是AP2,那么AP1发给AP2的数据包就有来自DS=1,去往DS=1,源地址A,目的地址B,源AP地址,目标AP地址四个地址了.如果是去网以太网,到了AP里还需要重新转成以太网V2帧.

image-51.png

最后说一下网络的发展,就算结束这篇学习记录了.

以太网的发展大致如图,到后面的40G/100G已经没什么通信距离了,都是背板到背板通信,超远距离波分复用增加总带宽应该不算单独的40G/100G以太网.

image-43-1024x573.png

无线局域网标准大致如图,大多数设备都支持.

image-44-1024x377.png

比较新的还没大规模使用的无线局域网标准大致如图,但是大家都是比较追求无线体验的,所以很多设备也都支持.

image-45.png




About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK