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

/ 0评 / 0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

比如CRC要发送数据.

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

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

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

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

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

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

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

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

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

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

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

毕竟电信号传输也是要时间的,所以大家检测到总线空闲,大家都一起发数据,最后都发到对方那,才发现碰撞了,大家才开始随机休息再发.人为规定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过大,就会产生下面这种情况.

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

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

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

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

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

内部格式.

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

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

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

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

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

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

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

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

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

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

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

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

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注