计算机网络
概述
目录
计算机网络的核心功能就是在不同的网络设备之间传输数据,随着信息技术的发展和普及,网络已经从一种通信基础设施转变成了信息服务基础设施,就像我们日常生活中用到的水、电、煤气一样普及和重要。
发展阶段
计算机网络的发展至今已经有50多年,主要可以分成三个发展阶段:
从APARNET向互联网发展 |
|
逐步构成三级结构的因特网 |
|
逐步形成多层次ISP结构的因特网 |
|
概念解析:
网络 | 网络由若干个节点和连接这些节点的链路组成 |
互联网 | 多个网络还可以通过路由器互联起来,这样就构成了一个覆盖范围更大的网络,即互联网,因此,互联网是网络的网络 |
因特网 | 因特网是世界上最大的互联网 |
因特网的组成
从世界范围看,因特网的组成主要有两个部分,即核心部分和边缘部分,核心部分包括了大量的网络和连接这些网络的路由器,这部分网络位边缘部分网络提供服务,边缘部分由所有连接在因特网上的主机组成,这部分被直接用户用来进行数据通信和资源共享。
数据交换方式
- 电路交换;
- 报文交换;
- 分组交换;
网络的分类
按交换技术分类 | 电路交换网;报文交换网;分组交换网; |
按使用者分类 | 公用网;专用网; |
按传输介质分类 | 有线网;无线网; |
按覆盖范围分类 | 广域网WAN;城域网:MAN;局域网:LAN;个域网:PAN; 总线型网络;星型网;环形网络;网状网络; |
性能指标
速率 | 连接在网络上的主机在数字信道上传送比特的速率 | b/s |
带宽 | 用来表示网络的通信线路所能传输数据的能力,所以网络带宽表示在单位时间内从网络的某一点到另一点能通过的最高数据率 | b/s |
吞吐量 | 在单位时间内通过某个网络(信道、端口)的数据量,吞吐量受带宽和额定速率的限制 | 带宽可以理解为理论上的传输能力,吞吐量可以理解为实际传输速率 |
时延 | 分为发送时延、传播时延和处理时延; 发送时延 = 分组成长度 / 发送速率; 传播时延 = 信道长度 / 电磁波传播速率; | 发送数据受到网卡的发送速率、信道带宽和交换机的接口速率的影响; |
时延带宽积 | 时延(传播时延)和带宽的乘积,即通信线路的容积 | |
往返时间RTT | 双向交互一次所需要的时间 | |
利用率 | 信道利用率:某信道有百分之几的时间是被利用的,即有数据通过; 网络利用率:全网络的信道利用率加权平均; | 信道利用率增大时,会导致时延增加,所以信道利用率并不是越高越好 |
丢包率 | 即分组丢包率,是指在一定时间内,传输过程中丢失的分组数量与总分组数量的比值。 | 丢包的两种情况: ①在传输过程中出现误码,被节点丢弃; ②分组到达一台队列已满的分组交换机时被丢弃;在通信量较大时就可能造成网络拥塞。 轻度丢包率:1%-4% 严重丢包率:5%-15% |
体系结构
OSI体系结构 | 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 |
实事体系结构 | 应用层、传输层、网络层、网络接口层 |
原理体系结构 | 应用层、传输层、网络层、数据链路层、物理层 |
应用层 | 解决通过应用进程的交互来实现特定网络应用的问题 |
传输层 | 解决进程之间基于网络的通信问题 |
网络层 | 解决分组在多个网络上传输(路由)的问题 |
数据链路层 | 解决分组在一个网络上(或一段链路上)传输的问题; 解决如何在一个网络上标识一个主机的问题; |
物理层 | 解决使用何种信号来传输比特的问题 |
物理层
物理层考虑的是怎样在连接计算机的各种媒体上传输比特流,物理层为数据链路层屏蔽了传输媒体的差异,使数据链路层只需要考虑如何完成本层的协议和服务,而不必考虑具体的传输媒体是什么。
传输媒体
引导型传输媒体 | 双绞线、同轴电缆、光纤、电力线 |
非引导型传输媒体 | 无线电波、微波、红外线、可见光 |
主要任务
机械特性 | 指明接口所用接线器的形状、尺寸、引脚数目、排列、固定和锁定装置 |
电器特性 | 指明在接口电缆的各条线上出现的电压范围 |
功能特性 | 指明某条线上的某一个电平的电压表示何种意义 |
过程特性 | 指明对于不同功能的各种可能事件的出现顺序 |
在计算机中所有的数据在底层都体现为0或1,通过接口或网络向外传递数据数,首先将这些0或1转换成电信号,然后在将电信号转换为数字基带信号或模拟基带信号,其中数字基带信号一般用在计算机内部,模拟信号一般用在跨主机/跨网络发送数据中。
编码 | 用数字信号承载数字或模拟数据 |
调制 |
编码就是规定用什么样的波形来代表0或1,调制就是将经过编码的数字信号转换成更频段的模拟信号,模拟信号可以在跨主机的网络中传输。
码元指的是代表不同数值的波形,码元是在编码过程中确定的一种代表某个数字的波形的格式。
不归零编码 | 存在数据同步问题,没有计算机网络被采纳 |
归零编码 | 归零编码相当于把时钟信号放到了编码中,所以不存在数据同步问题,但是在这种编码下大部分的带宽都用来传输了归零信号,所以会导致信道的利用率不高 |
曼彻斯特编码 | 码元中间的跳变即表示时钟,又表示数据 |
差分曼彻斯特编码 | 跳变既表示时钟,码元开始处的电平是否发生变化表示数据 |
调制过程就是将原始的数字信号转换成模拟信号,在使用最基本的调制方法时,一个码元只能表示一个比特的信息,如何能使一个码元包含更多的信息呢?
因为频率和相位是相关的,即频率是随时间的变化率,所以一次只能调制相位和频率中的一个,通常情况下,相位和振幅可以结合起来一起调制,称为正交振幅调制AMQ。
由于数字信号是通过模拟信号在信道上传递的,在外界环境或本身信道电器特性的影响下,模拟信号可能会发生失真,如果失真不是很严重的话,接收方还能够识别出原始信号,但如果失真很严重,接收方就无法识别出原始信号了,影响模拟信号失真程度的因素主要有以下几个:
- 码元传输速率;
- 信号传输距离;
- 噪音干扰;
- 传输媒体的质量;
奈氏准则:在假定的理想条件下,为了避免码间串扰(失真),码元的传输速率是有上限的。所以如果想要提高信息的传输速率(比特率),就必须设法让每一个码元携带更多的比特的信息,这需要采用多元制。
数据链路层
链路,指的是从一个节点到相邻节点的一段物理线路,而数据链路是指把实现通信协议的硬件和软件加载链路上,就构成了数据链路。
在数据链路层传输数据的基本单位是 帧。
数据链路层要解决的三个核心问题:
- 封装成帧;
- 差错检测;
- 可靠传输;
封装成帧
封装成帧指的是数据链路层给网络层交付的协议数据单元添加帧头和帧尾的操作,帧头和帧尾能够让接收方识别出一个完整的帧。
- 帧头和帧尾中包含了重要的控制信息;
- 帧头和帧尾的作用之一就是帧界定;
PPP协议中的帧头和帧尾都有一个标志位来标识帧头和帧尾,但以太网MAC帧却没有,这是因为是在物理层完成的,在物理层会给帧添加一个前导码作为帧头,而帧间间隔作为帧尾。
?透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路不存在一样,但如果上层传输的数据内部包含了帧界定表示的话,那么数据链路层会对其做转义处理,并不会让其对帧界定产生影响。
- 面向字节的物理链路使用字节填充的方式实现透明传输;
- 面向比特的物理链路使用比特填充的方法实现透明传输;
为了提高帧的传输效率,应该使帧的数据部分在规定的范围内尽可能的大一些。
差错检测?
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错,1可能变成0,0可能变成1,这称为比特差错。在一段时间内,传输错误的比特占所有传输比特总数的比率成为误码率。使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层要解决的重要问题之一。
奇偶校验
在待发送数据的后面添加一位奇偶校验位(0/1),使得整个数据中的1的个数为奇数(奇校验)或偶数(偶校验)。
- 如果有奇数个位发生误码,则奇偶性发生变化,可以检测出误码;
- 如果有偶数个位发生误码,则就行不会发生变化,不能检测出误码,也就发生了漏检;
循环冗余校验CRC
- 收发双方约定号一个生成多项式G(x);
- 发送方基于待发送的数据和生成多项式计算出差错检测码,将其添加到传输数据的后面一起传输;
- 接收方通过生成多项式来计算收到的数据是否产生误码;
说明
- 检错码只能检测出帧在传输过程中是否出现了差错,但并不能定位错误,因此无法纠正错误;
- 要想纠正传输中的差错,可以使用冗余信息更多的就错误码进行前向纠错,但纠正码的开销比较大,在计算机网络中很少使用;
- 使用冗余校验CRC有很好的检错能力,虽然比较复杂,但易于用硬件实现,因此被广泛应用在数据链路层;
- 在计算机网络中通常会采用后续讨论的检错重传方式来纠正传输中的错误,或者仅仅是丢弃检测到的错误码,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务;
可靠传输
基本概念
可靠传输的基本逻辑是当出现错误是能够通过某种机制保证最终结果的正确性,也就是说使用差错检测技术(奇偶校验或循环冗余校验)在接收方验证数据是否出现误码,然后再通过某种机制来与发送方进行协商把错误数据解决掉。
- 不可靠传输:仅仅丢弃有误码的帧,其他什么都不做;
- 可靠传输:想办法实现发送端发什么接收端就收什么;
在数据链路层,如果是点对点的通信一般不会出现误码等错误,只有在无线网络中(比如wifi)可能误码率会高一下,所以数据链路层也可以不提供可靠传输服务,但这也取决于网络层的要求。
停止等待协议SW
- 接收端检测到数据分组有误码时,将其丢弃并等待发送方超时重传,但对于误码率比较高的点对点链路?,为使发送方尽早重传,也可以给发送方发送NAK分组;
- 为了让接收方能够判断所收到的分组是否是重复的,需要给数据分组编号,由于停止等待协议的停等特性,只需一个比特编号就够了,即0或1;
- 为了能让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用比特数量一样,数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给ACK分组编号;
- 超时计时器设置的重传时间应该仔细选择,一般可以将重传时间选择略大于”从发送方到接收方的平均往返时间“;
- 在数据链路层的点对点访问时间比较确定,重传时间比较好确定;
- 但在传输层,端到端的往返时间非常不确定,设置合适的重传时间并不容易;
- 当往返时延RTT原大于数据帧发送时延TD时(比如卫星通信),信道的利用率非常低;?
- 若出现重传,则对于传送有数据的信息来说,信道的利用率还会更低;
- 为了克服等待-停止协议信道利用率很低的缺点,就产生了另外两种协议,即后退N帧协议GBN和选择重传协议SR;
回退N帧协议GBN
回退重传协议的核心思路是基于一个滑动窗口,在滑动窗口内实现比停止-等待协议更灵活、高效的可靠性控制,具体可分为三种情况来分析:无差错情况、累计确认、有差错的情况。
发送方 | 接受方 |
|
|
回退N帧协议的问题在于,当当前窗口的最早的分组传送失败了,后面的分组即使传送失败了也需要重传,如果信道的误码率比较高的话,信道传输效率就会变的非常低。
选择重传协议SR
选择重传协议与回退N帧协议最大的区别在于,它把接收方的窗口大小从1改成了跟发送方窗口大小一致,这样就可以在当前窗口内记录哪个分组成功了哪个分组失败了,当失败时进行局部重传就可以了,而不需要回退N个帧进行重发,但是,选择重传协议需要对每一个分区都给发送方反馈ACK确认消息,所以这种协议更适合用在误码率比较高的信道上,而回退N帧协议比较适合用在误码率比较低的信道上。
发送方 | 接收方 |
|
|
点对点协议PPP
定义
点对点控制协议PPP是目前使用最广泛的点对点链路层协议。
PPP协议为在点对点链路上传输各种协议的数据报提供了一个标准方法主要有三个部分组成:
- 对各种协议数据报的封装方法(封装成帧);
- 链路控制协议LCP,用于建立、配置以及测试数据链路的连接;
- 一套网络控制协议NCPs,其中每一个协议支持不同的网络层协议;
?帧格式
标志位F | PPP帧的界定符,取值为0x7E |
地址为A | 取值为0xFF,预留字段,目前没什么意义 |
控制位C | 取值为0x03,预留字段,目前没什么意义 |
协议位P | 指明帧的数据部分交由哪个协议处理
|
帧检验序列位FCS | CRC计算出来的校验码,用于进行差错检测 |
透明传输
透明传输要处理的问题就是对出现在数据段的帧结束标识进行转移,以此让接收方能够分辨出一个个的帧。PPP协议提供了两种透明传输方式:
- 面向字节的同名传输:利用字符填充法插入转义字符;
- 发送方
- 出现的每一个7E(PPP真界定符)字节转变成2字节的序列(7D,5E);
- 出现的每一个7D(转义字符)字节变成2字节劽(7D,5D);
- 出现的每一个ASCII码控制字符(数值小于0x20的字符),则在该字符前面插入一个7D字节,同时将该字符的编码加上0x20;
- 接收方
- 进行反变换即可恢复出原来的帧数据
- 发送方
- 面向比特的透明传输:利用比特填充法插入”比特0“;
- 发送方
- 对帧的数据部分进行扫描(一般由硬件实现),只要发现5个连续的比特1,则立即填充一个比特0;
- 接收方
- 对帧的数据部分进行扫描(一般由硬件实现),只要发现5个连续的比特1,就把其后的一个比特0删除;
- 发送方
差错检测
PPP协议的差错检测是基于CRC循环校验码实现的,循环校验码存放在帧的FCS位置,CRC循环校验的多项式为:
CRC-CCITT = X^16 + X^12 + X^5 + 1;
接收方每收到一个PPP帧,就进行CRC检验,若CRC检验正确,就手下这个帧,反之,就丢弃这个帧。使用PPP协议的数据链路层向上不提供可靠传输服务;
工作状态
媒体接入控制
定义
共享信道要着重考虑的一个问题是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control)
- 静态划分信道
- 频分多址
- 时分多址
- 码分多址
- 动态接入控制
- 受控接入
- 集中控制
- 分散控制
- 随机接入
- 受控接入
其中,静态划分信道指的是预先固定分配号信道,这类方法非常不灵活,对于突发性数据传输 信道利用率很低。通常在无线网络的物理层中使用,而不是在数据链路层使用。
集中控制模式是有一个主站以循环的方式轮询每个站点有无数据发送,只有被轮询到的站点才能发送数据,最大的缺点是存在单点故障问题。
分散控制模式下各个站点是平等的,并连接成一个环形网络,令牌(一个特殊的控制帧)沿着环逐渐传递,接收到令牌的站点才有权发送数据,并在发送完数据后传递给下一个站点。
在随机接入模式下,所有站点通过竞争随机的在信道上发送数据,如果恰巧有两个或更多的站点在同一个时刻发送数据,则信号就要在共享媒体上产生碰撞(即发生了冲突)。使得这些站点的发送都失败了,因此这类协议要解决的核心问题是如何尽量避免冲突以及在发生冲突后如何尽快恢复通信,著名的共享式以太网采用的就是随机接入。
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用使用点对点链路和链路层交换机的交换式局域网在有线领域已经完全取代了共享式局域网,但由于无线通信的广播性质,无线局域网仍然使用的是共享媒体技术。
复用技术
复用是通信技术中的一个重要概念,复用就是通过一条物理线路同时传输多路用户的信号。当网络中传输媒体的传输容量大于单一信道的总传输容量时,就可以利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽。
频分复用FDM
频分复用就是为为不同的主机分配不同频率的模拟信号,以此实现在同一个信道上相互独立的传输数据。
时分复用TDM
时分复用的思路是在一个TDM帧内为每一个主机分配一段时隙,也就是让每一个TDM帧同时包含多个主机的数据,然后接收方用时钟来分割出自己的数据。
码分复用CDM
码分复用CDM是另一种共享信道的方法,实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址,即CDMA。与FDM和TDM不同的是,CDM的多个用户可以在同样的时间使用同样的频带进行通信,由于各个用户使用了经过特殊挑选的不同码型,因此各个用户之间不会造成干扰。
CDM最终是用在军事通信中,因为这种系统所发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不容易被敌人发现,随着技术的进步,CDMA设备的价格和体积都大幅下降,因而现在已经广泛用于民用的移动通信中。
在CDMA中每一个比特时间再划分为m个短时间段,成为码片(Chip),通常m的值为64或128
- 一个站点如果要发送比特1,则发送它自己的m bit码片序列;
- 一个站点如果要发送比特0,则发送它自己的m bit码片序列的二进制反码;
- 例如指派给CDMA系统中某个站点的码片序列为00011011
- 发送比特1:发送自己的码片序列?00011011
- 发送比特0:发送自己的码片序列的二进制反码 111100100
- 码片序列的挑选规则如下:
- 分配给每个站点的码片序列必须各不相同,实际常采用伪随机码序列;
- 分配给每个站点的码片序列必须相互正交(规格化内积为0);
CSMA/CD协议
CSMA/CD的全称是 载波监听多址接入/膨胀检测。
多址接入MA | 多个站连接在一条总线上,竞争使用总线 |
载波监听CS | 每个站在发送帧之前要检测一下总线上是否有其他站点在发送帧(先听后说)
|
碰撞检测CD | 每一个正在发送帧的站点变发送边检测碰撞(边说边听)
|
征用期
设以太网单程端到端的传播时延为t
- 主机最多经过2t的时间就可以检测到本次发送是否发生了碰撞;
- 因此,以太网的端到端往返传播时延2t成为征用期,或碰撞窗口;
- 经过征用期这段时间还没有检测到碰撞的话,才能肯定这次发送不会发生碰撞;
- 每一个主机在自己发送帧之后的一小段时间内存在着遭遇碰撞的可能性,这一小段时间是不确定的,这取决于发送帧的主机到本主机的距离,但不会超过总线的端到端往返传播时间,即一个征用期;
- 在以太网中发送帧的主机越多,端到端的往返传播时延就越大,发生碰撞的概率就越大,因此共享式以太网不能连接太多的主机,使用的总线也不能太长;
最小帧长
规定最小帧长的原因在于如果帧长太小,就可能会出现帧已经发送完成,但发送时间小于一个征用期的情况,这样就无法确定这个帧会不会发生碰撞。
- 以太网规定最小帧长为64字节,即512比特;
- 如果发送数据太少,那么必须加入一些补充字节,使得帧长不小于64字节;
- 以太网的最小帧长确保了主机可再帧发送完成之前检测到该帧发送过程中是否遭遇了碰撞;
- 如果在征用期内没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞;
- 如果在征用期内检测到了碰撞,就立即终止发送,这时已经发送出去的数据一定小于64字节,因此,凡是长度小于64字节的帧都是由于碰撞而异常终止的无效帧。
最大帧长
如果帧过长,则会导致信道被长时间占用,以至于超过一个征用期。
退避算法
二进制指数退避算法如下:
- 若连续多次发生碰撞,这表明可能有较多的主机参与信道竞争,但使用上述退避算法可以使重传需要推迟的平均时间随着重传的次数增加而增大(动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定性。
- 当重传达到16c次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发送碰撞,则丢弃该帧,并向上层报告。?
发送流程
接收流程? ?
CSMA/CA协议
CSMA/CA的全称是载波监听多址接入/碰撞避免,既然CSMA/CD已经成功的应用于广播信道的局域网中,那么同样使用广播信道的无线局域网为什么不能使用CSMA/CD?
在无线局域网中仍然可以采用CSMA,即在发送帧之前先对传输媒体进行载波监听,若发现有其他站在发送帧,就推迟发送以免发生碰撞,但在无线局域网中不能采用碰撞检测CD,原因如下:
- 由于无线信道的传输条件特殊,其信号强渡的波动范围很大,无线网卡上接受到的信号强渡远远小于发送信号的强度,如果要在无线网卡上实现碰撞检测CD,对硬件的要求非常高;
- 即使能够在硬件上实现无线局域网的碰撞检测,但由于无线电波的传播的特殊性(存在隐蔽站的问题),进行碰撞检测的现实意义也不大;
802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加的碰撞避免CA功能,而不再实现碰撞检测,由于不可避免会存在碰撞,而且无线信道的误码率比较高,802.11标准还使用了数据链路层的确认机制 即停止-等待协议 来保证数据被正确接收。
802.11的MAC层标准定义了两种不同的媒体接入控制方式:
- 分布式协调功能DCF,在CDF模式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权,这事802.11定义的默认方式;
- 点协调功能PCF,PCF方式使用集中的控制阀方式,是802.11的可选方式,在实际中很少使用。
帧间间隔
802.11标准规定,所有的站点,必须在持续检测到信道空闲一段指定的时间后才能发送帧,这段时间称为帧间间隔IFS,帧间间隔长度取决于该站点要发送的帧的类型:
- 高优先级帧需要等待的时间较短,因此可优先获取发送权;
- 低优先级帧需要等待的时间较长,若某个站点的低优先级帧还没来得及发送,而其他站点的高优先级帧已经发送到信道上,则信道变为忙碌状态,因而低优先级的帧只能再推迟发送,这样就减少了发送碰撞的机会;
常用的两种帧间间隔如下:
- 短帧间间隔SIFS,是最短的帧间间隔,用来分隔开属于一次对话的各个帧,一个站点应当能够在这段时间内从发送方式切换到接收方式,使用SIFS的帧类型有ACK帧,CTS帧,由过长的MAC帧分片后的数据。
- DCF帧间间隔DIFS,它比段帧间间隔SIFS要长的多,在DCF方式中用来发送数据帧和管理帧。
退避算法
在执行退避算法时,站点为退避计时器设置一个随机退避时间:
- 当退避计时器的时间减小到零时,就开始发送数据;
- 当退避计时器的时间未减小到零时而信道又转变为忙状态,这事就冻结退避计时器的数值,重新等到信道变为空闲,再经过DIFS后,继续重新启动计时器;
在进行第i次退避时,退避时间在时隙编号0 ~ 2^2+i - 1中随机算则一个,然后乘以基本退避时间就可得到随机退避时间,这样做是为了使不同站点选择相同的退避时间的概率减少,当时隙编号达到255时就不在增加了。
MAC/IP/ARP协议
- MAC地址是以太网的MAC子层锁使用的地址,属于数据链路层;
- IP地址是TCP/IP体系结构中网络层使用的地址;
- ARP协议数据TCP/IP体系结构的网络层,作用是对于已经分配IP地址的设备,可以使用ARP协议通过IP地址获取到设备的MAC地址;
MAC地址
当多个主机连接在同一个广播信道上,想要实现两个之机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层的地址。在每个主机发送的帧中,必须携带标识发送主机和接受主机的地址,由于这类地址是用于媒体接入控制MAC,因此这类地址被成为MAC地址:
- MAC地址一般被固化在网卡(网络适配器)中,因此MAC地址也被成为硬件地址;
- MAC地址有时候也被称为物理地址,但这并不意味着MAC地址属于物理层;
一般情况下,用户的主机会包含两个网络适配器,即有线局域网是配置和无线局域网是配置,每个网络是配置都有一个全球唯一的MAC地址,而交换机和路由器往往有用更多的网络接口,所以会有用更多的MAC地址,所以严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各个设备的唯一标识。
IP地址
IP地址是因特网上主机和路由器的所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百万级的网络;
- 主机编号:标识一个网络上不同的主机;
很显然之前介绍的MAC地址不具备区分不同网络的能力,如果只是一个单独的网络,不需要接入因特网,那么可以只使用MAC地址,但如果需要接入因特网,那么MAC地址和IP地址需要一起使用。
?MAC地址和IP地址在网络体系中所处的层级不一样
?下面来看一个数据包在转发过程中,MAC地址和IP地址的变化过程
- 数据包在转发过程中源IP地址和目标IP地址不变;
- 数据包在转发过程中源MAC地址和目标MAC地址逐个链路变化;
ARP协议?
在对数据包进行转发的过程中,由于在刚开始的时候目标IP对应的MAC地址是没有的,ARP协议就是通过IP地址获取MAC地址的协议。
APR地址只能解析两个转发节点直接的IP到MAC地址的转换,而不能跨节点
?集线器与交换机的区别
集线器 | 交换机 |
|
|
网络层
概述
网络层的主要任务是实现网络互联,进而实现数据包在各个网络之间传输,网络层任务主要有以下几个:
- 网络层向传输层提供怎样的服务(可靠传输还是不可靠传输);
- 网络寻址问题;
- 路由选择问题;
网络层通过路由器将不同的网络连接在一起,路由器内存在一个路由表,路由表内记录了要到达目标网络需要跳向的下一个地址。
网络层提供的两种服务
面向连接的虚电路服务 |
|
无连接的数据服务 |
|
ipv4
在TCP/IP体系中,IP地址是一个最基本的概念,ipv4地址就是给因特网上的每个主机或路由器的每个接口分配一个全世界范围内唯一的32比特的标识符。
IP地址由因特网名字和数字分配机构CANNI进行分配,在2011年2月3号,互联网号码分配管理局宣布ipv4地址已经分配完毕,目前已经开始全面使用ipv6。
ipv4地址的编址方式经历了三个阶段的房展:
- 分类编址 A/B/C;
- 划分子网,子网掩码;
- 无分类编址;
分类编址 A/B/C
分类编址是将网络地址分为A/B/C/D/E三类,
- 在A类地址中网络号占8位(0+7位网络号)?主机号占24位;
- 在B类地址中网络号栈16(10+14位网络号)位 主机号占16位;
- 在C类地址中网络号栈24(110+21位网络号)位 主机号栈8位;
- D类是1110 开头,是多播地址;
- E类是1111 开头,保留为今后使用;
只有A/B/C类地址可以分配给网络中的主机或路由器的各个接口,主机号为”全0“的地址是网络地址,不能分配给主机或路由器的各个接口,主机号为”全1“的地址是广播地址,不能分配给主机或路由器的各个接口。
?对于A类地址来说:
- 网络号栈8位,主机号占24位;
- 最小网络号为0,保留,不指派;
- 第一个可指派的网络号为1,网络地址为1.0.0.0;
- 最大网络号为127,作为本地环回测试地址,不指派;
- 最小的本地环回测试地址,127.0.0.1;
- 最大的本地环回测试地址,127.255.255.254;
- 最后一个可指派的网络号为126,网络地址为126.0.0.0;
- 可指派的网络数量为2^(8-1) - 2,-2是因为去除了最小网络号0和最大网络号127;
- 每个网络中可分配的IP地址数量为2^24 - 2,-2是因为去除了主机号全为0的网络地址和全为1的广播地址;
对于B类地址来说:
- 网络号占18位,主机号也占16位;
- 最小网络号 也是第一个可以指派的网络号 128.0,网络地址是128.0.0.0;
- 最大网络号 也是最后一个可指派的网络号 191.255,网络地址是191.255.0.0;
- 可指派的网络数量为2^(16-2);
- 每个网络中可分配的IP地址数量为 2^16 - 2,去除全0的网络地址和全1的广播地址;
对于C类地址来说:
- 网络号占24位,主机号占8位;
- 最小的网络号 也是第一个可指派的网络号192.0.0,网络地址为192.0.0.0;
- 最大的网络号 也是最后一个可指派的网络号223.255.255,网络地址为?223.255.255.0;
- 可指派的网络数量为2^(24-3);
- 每个网络中可分配的IP地址数量为 2^8 -2 = 254; 去除了全0的网络地址 和 全1的广播地址;
划分子网
为新的网络申请新的网络编号会带来弊端:
- 需要等待时间和花费更多的费用;
- 会增加其他路由器路由表记录的数量;
- 浪费原有网络中剩余的大量IP地址;
子网掩码是一个高位都为1的32位数字,通过与原网络IP做与或运算来划分子网(1的为数大于当前IP的所属分类的网络号的为数),即32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号:
- 子网掩码使用连续的比特1来对应网络号和子网号;
- 子网掩码使用连续的比特0来对应主机号;
- 将划分子网的ipv4地址与其相应的子网掩码进行逻辑与运算就可以得到ipv4地址躲在子网的网络地址;
例如,某个C类网络的地址为218.75.230.0,使用子网掩码255.255.255.128对其进行子网划分,划分过程的细节为:
?划分出的子网数量为2^1,即第八个比特位的0/1,每个子网可分配的地址数量为2^(8-1) - 2 = 126个(去掉全0的网络地址和去掉全1的广播地址)。
在给定一个分类IP地址的和其子网掩码的情况下,就能够确定以下细节:
- 划分出的子网的数量;
- 每个子网可分配的IP地址的数量;
- 每个子网的网络地址和广播地址;
- 每个子网可分配的最小和最大的地址;
默认的子网掩码指的是在为划分子网的情况下使用的子网掩码
- A类地址默认的子网掩码是 255.0.0.0;
- B类地址默认的子网掩码是 255.255.0.0;
- C类地址默认的子网掩码是 255.255.255.0;
无分类地址
由于分类划分法能够分配的网络数量非常有限,为了解决这个问题,就需要把网络号的范围进行更灵活的分配,所以就出现了无分类地址,采用斜线标识符来表示一个无分类地址,比如128.14.35.7/20,其中网络号占用的位数为20,主机号占用的位数为12,通过任何一个无分类地址都可得到这个网络的所有细节:
- 地址块的最小地址;
- 地址块的最大地址;
- 地址块中的地址数量;
- 地址块聚合某类网络的数量;
- 子网掩码;
以128.14.35.7/20为例,网络细节如下:
- 最小地址为,128.14.00100000.00000000,即128.14.32.0;
- 最大地址为,128.14.00101111.1111111,即128.14.47.255;
- 地址数量为2^(32-20);
- 聚合C类网的数量为 2^(32-20) / 2^8 ,其中除以2^8是抹掉C类地址中的主机号;
- 子网掩码为 11111111.11111111.11110000.00000000,即255.255.240.0;
在无分类地址中,网络前缀越长,地址块越小,路由就越具体,当路由器在查找路由表进行转发时如果发现有多条路线可选,则选择网络前缀最长的那个,即更具体的那个,这成为最长前缀匹配,因为这样的路由更具体。
地址划分
定长子网掩码 | 变长子网掩码 |
|
|
IP数据报的转发
通过交换机连接的各个主机处在同一个网络,而路由器连接的是多个网络,通过路由器在两台计算机之间通信时,属于跨网络通信,
- 那么原主机是如何判断出目的主机和自己不在同一个网络中?
- 路由器是如何知道把IP数据报转发到那个网络上的?
对于第一个问题,发送数据的主机首先会将自己的ip地址与自己的子网掩码进行与或运算,得到当前网络的网络号,然后再用目的主机的ip地址和当前网络的子网掩码进行与或运算,如果得到的网络号和前一步得到的网络号不相等,那么说明目的主机不在当前网络中,需要通过路由器进行转发。在当前网络中有一个网关/默认网关,这个网关指向了当前网络中一个能够进行跨网络转发的路由器,当前主机发现目的主机不在当前网络中时,就把数据包转发的网关所指向的路由器,然后由路由器进行跨网络转发。
与此同时,目的主机所在的网络对应的网关也执行了它的出口路由器,这样,路由器之间就能够通过网关地址 + 路由表 来找到对方,然后在通过网关将数据包转发给当前网络下具体的目的主机。
?对于第二个问题,路由器首选会检查数据报的首部是否存在错误,如果存在错误,则告知发送主机,如果没有错误,则在本地路由表中查找转发的下一跳(即下一个路由或网络)然后进行转发,如果没有找到,则告知发送主机。转发过程是,路由器用目的主机的地址逐条与路由表中的子网掩码进行与或运算,如果计算得到的目的主机网络号能够匹配路由表中的记录,就通过下一跳的团课将数据转发出去,如果没有找到,就告知发送主机没有找到目的网络。
静态路由
静态路由就是通过手工配置路由表的方式来让路由器实现转发的功能,静态路由比较适合规模不大的内网环境,除了能够手工配置常规路由外,还能给路由表配置默认路由和主机路由。
当网络拓扑结构足够简单或者想要配置一个兜底路由时,都可以配置通过默人路由来实现,默认路由的目的网络为 0.0.0.0/0,下一跳为待跳转的路由器ip地址,当没有更具体的路由能够匹配到时,就会通过这个默认路由进行转发。
主机路由与默认路由相反,它是一个更具的、指向了某个目的主机的路由规则,即目的网络是一个具体的主机的ip地址,下一跳为转发路由的ip地址。
但静态路由存在的最大的一个问题就是有可能会出现路由环路,具体有以下几种情况:
- 配置错误导致的路由环路;
- 聚合了不存在的网络导致的路由环路;
- 网络故障导致的路由环路;
针对因为配置错误导致的路由环路,在IP数据报的首部都设置了生存时间TTL字段,IP数据报进入路由后,TTL字段的值-1,若TTL的值不等于0,则被路由器转发,否则直接丢弃。
针对聚合了不存在的网络导致的路由环路的情况,比如路由表R2针对IP地址192.168.2.0/24和192.168.1.0/22进行了聚合,聚合后的IP地址为192.168.0.0/22,路由表中的表项为
目的网络 下一跳
192.168.0.0/22 10.0.0.1
但由于192.168.0.0/22下有192.168.0.0/24、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24四个子网,但其中有两个并不真实存在,所以在目标路由器中配置了默认路由并且指向了当前转发路由的情况下,如果想不存在的网络转发IP数据报的话,那么就会被对向的路由器通过默认路由转发回当前路由器中,为了解决这个问题,引入了黑洞路由,即在当前路由器中将两个不存在的目标网络指向一个黑洞路由null,也就相当于在转发哪些指向了不存在的网络的数据包的时候,直接将其丢弃。
而对于第三种情况网络故障导致的路由环路,当路由器检测到某个网络不可用时,就会将其从路由表中删除,此时,如果当前路由表中配置了指向另外一个路由器的默认路由时,当接到那些发送给故障网络的数据包,就会被当前路由器通过默认路由转发到指定的路由器,然后出现环路,针对这种情况,需要在出现故障的那个网络所在的路由器的路由表中为这个故障网络指定一个黑洞路由,这样就避免了出现路由环路。
动态路由
动态路由通过路由选择协议自动获取路由信息,能够很好的使用网络状态的变化,适合大规模的网络环境。
路由器
路由器的主要左右是实现跨网络的数据转发,内部主要通过路由表实现该功能,主要包括以下几个部分:
- 交换结构
- 转发表
- 路由选择机构
- 路由表
- 输入端口
- 输出端口
路由协议
- 内部网关协议IGP
- 路由信息协议RIP;
- 内部网关路由协议IGPR;
- 增强型内部网关路由协议EIGPR;
- 开放式最短路径优先协议OSPE;
- 中间系统到中间系统协议IS-IS;
- 外部网关协议EGP
- 外部网关协议EGP
- 边界网关协议BGP;
- 外部网关协议EGP
IP数据报格式
传输层
传输层的任务是实现进程到进程的通信,运行在计算机上的进程是通过进程标识符PI来标识,因特网上的计算机并不是使用统一的操作系统,也是使用不同的进程标识符,为了使运行在不同操作系统上的计算机应用进程之间进行网络通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标识。TCP/IP体系的传输层使用端口号来区分应用层的不同应用进程。
端口分配
- 端口号采用16比特表示,取值范围为0~65535;
- 熟知端口:0~1023,这些端口指派给TCP/IP体系中最重要的一些应用协议,比如http协议用的是80端口,NDS协议用的是53端口;
- 登记端口:1024~49151,为没有熟知端口的应用程序使用,使用这类端口号必须在IANA按照规定的手续登记,以防止重复。
- 短暂端口:49152~65535,留给客户进程选择使用,当服务器进程收到客户端请求报文时,就知道客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
- 端口号只具有本地意义,即端口号只为了,标识本计算机应用程序中的各进程,在因特网中,不同计算机中的相同端口号是没有联系的。
TCP/IP协议下的常见应用层协议所使用的端口号如下:
TCP/UDP对比
UDP | TCP |
|
|
TCP流量控制
TCP协议通过滑动窗口来实现流量控制,核心思路是数据接收方根据自己的接收能力实时的与数据发送方协调滑动窗口的大小,以此来保证发送方的发送能力在接收方的接收能力范围之内。具体流程如下:
- 首先,A和B通过TCP握手来建立连接,这时B会给到A一个初始的滑动窗口大小,比如500;
- 在滑动窗口内,A分批次向B发送数据,首先发送1-100号数据,再发送101-200号数据;
- 在发送201-300号数据的时候,数据丢了,B没有成功接收到;
- B收到1-200的数据,给A发送确认消息,并把滑动窗口大小调整为300;
- 由于滑动窗口大小变小了,所以此时A还能发送201-500的数据;
- A继续发送301-400和401-500的数据;
- 由于201-300的数据丢失,触发了A的超时重传机制,201-300的数据从新发送给B;
- B成功接收到了201-500的数据,给A反馈确认消息,并将滑动窗口大小调整为100;
- 此时A向B发送501-600的数据,并等待B反馈确认消息;
- B收到消息后给A返回确认消息,同时,由于接收压力,将当前连接上的滑动窗口大小调整为0;
- 此时A不能再给B发送消息了;
此时如果B向A发送了一条调整滑动窗口大小的消息,但该消息由于网络原因丢失了,如果没有其他机制的话,此时A和B就会互相等待,但TCP中提供了探测机制,如果A过一点时间没有收到B发来的调整滑动窗口大小的消息的话,就会向B发送一条探测消息,相当于主动拉取最新的滑动窗口大小,具体流程如下
TCP拥塞控制
在某个时间段内,若对网络中某个资源的需求超过该资源所能提供的可用部分,网络性能就会变坏,这种情况叫做拥塞,如果出现拥塞而不进行控制,整个网络的吞吐量将随着输入负荷的增加大而下降。
实现拥塞控制的算法有四种:
- 慢开始;
- 拥塞避免;
- 快重传;
- 快恢复;
发送方维护了一个叫做 拥塞窗口cwnd 的状态变量,其值取决于网络拥塞的程度,并且动态化。
- 拥塞窗口的维护原则是,只要网络没有出现拥塞,拥塞窗口就再增大一些,但只要网络出现拥塞,拥塞窗口就减少一些。
- 判断出现网络拥塞的依据是,没有按时收到应该到达的确认报文,即发生超时重传。
发送方将发送窗口作为发送窗口swnd,即swnd = cwnd,并维护一个慢开始门限 ssthresh 状态变量:
- 当cwnd < ssthresh时,使用慢开始算法;
- 当cwnd > ssthresh时,停止使用慢开始算法,而改用拥塞避免算法;
- 当cwnd = ssthresh时,既可使用慢开始算法,也可以使用拥塞避免算法;
慢开始是指一开始向网络注入的报文段少,并不是指拥塞窗口cwnd增长速度慢;拥塞避免并非指完全能够避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
慢开始和拥塞避免算法是1988年提出的TCP拥塞控制算法,在1990年又增加了两个新的拥塞控制算法(改进TCP的性能),这就是快重传和快恢复。有时个别报文段会在网络中丢失,但实际上网络并未发生阻塞:
- 这将导致发送方超时重传,并误以为发生了网络阻塞;
- 发送方把拥塞窗口cwnd又设置为最小值1,并错误的启动慢开始算法,因而降低了网络传输效率;
采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失,而所谓的快重传就是使发送发尽快进行重传,而不是等到超时重传计时器超时再重传。
- 要求接收方不要等待自己发送数据时才捎带确认,而是立即发送确认;
- 即使收到了失序的报文段也要立即发出对已收到报文段的重复确认;
- 发送方一旦收到三个连续的重复确认, 就将响应的报文段立即重传,而不是等到报文段的超时重传计时器超时再重传;
- 对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞,进而降低拥塞窗口cwnd=1,使用快重传可以使整个网络的吞吐量提高约20%;
?发送方一旦收到3个重复确认,就知道现在只是丢失了个别报文段,于是不启动慢开始算法,而是执行快速恢复算法:
- 发送方将慢开始门限ssthresh的值和拥塞窗口cwnd的值调整为当前窗口的一半,开始执行拥塞避免算法;
- 也有的块恢复实现是把恢复开始是的拥塞窗口cwnd值再增大一些,即等于新的ssthresh + 3;
- 既然发送方收到了三个重复确认,就表明三个数据报文段已经离开了网络;
- 这三个报文段不再消耗网络资源,而是停留在接收方的接收缓存中;
- 可见,在网络中不是堆积了报文段而是减少了3个报文段,因此可以适当把拥塞窗口扩大一些;
TCP重传时间
重传超时时间的选择是一个非常复杂的问题,假设一个请求-响应的往返时间为RTT0,如果将超时时间数组为RTT0/2,那么一点ack确认消息超时就会出发超时重传,但由于现实网络相当负责,确认消息慢一点是难免的事,这就会造成不必要的重传,增加整个网络的负荷。
而如果把超时时间设置为一个大于RTT0的时间,那么当出现真实的确认报文丢失时,就会造成延迟重传,降低网络的利用率。
?可见,超时时间应该设置为略大于RTT0,但重点在于RTT时间并不是一个固定值,而是随着网络的使用情况不同而动态变化的,所以就需要对RTT进行动态的采样,以此来得到一个针对当前网络环境的RTT时间,即利用每次测量得到的RTT样本,计算出加权平均往返时间RTTs:
新的RTTs = (1 - α) * 旧的RTTs +?α * 新的RTTs样本;
在上式中,0 <=?α <= 1:
- 若?α 接近于0,则新的RTT样本对RTTs的值影响不大;
- 若?α 接近于1,则新的RTT样本对RTTs的值影响很大;
- 已经成为建议保准的RFC6298推荐α的值为0.125;
通过这种方式得到的加权平均往返时间RTTs要比测量出的RTT值更平滑,显然,超时重传时间RTO应该略大于加权平均往返时间RTTs。
上面的两种情况显然会对RTT的样本带来错误的影响,所以,针对出现超时重传时无法测准往返时间RTT的情况,Karn提出了一个算法:在计算加权平均往返时间RTTs时,只要报文段重传了,就不采用其往返时间RTT作为样本,也就是出现重传时,不重新计算RTTs,进而超时重传时间RTO也不会重新计算。?但这又引出了另外一个问题,即当报文段的时延突然增大时,并且之后很长一段时间都会保持这种延迟,因此,在原来得出的重传时间内,不会收到确认报文,于是就重传报文段,但根据Karn算法,不考虑重传的报文段的往返时间作为样本。这样,超时时间就无法更新,这会导致报文段反复被重传。
因此要对Karn算法进行修正,具体的方法是,报文段每重传一次,就把超时时间增大一些,典型的做法是将超重传时间的取值增大为原来的2倍。
TCP可靠传输
TCP采用以字节为单位的滑动窗口来实现可靠传输。?
虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大,因为在网络上传输窗口的值具有一定的滞后性,并且这个滞后时间是不确定的,另外,发送方还可能根据网络当时的拥塞情况适当减少自己的发送窗口的尺寸。
对于不按序到达的数据应该如何处理,TCP并没有明确的规定。如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理会比较简单,但这样会减少网络资源的利用率,因为发送方会重复传送较多的数据。TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中缺少的字节收到后,再按序交付上层应用。
TCP还要求接收方必须有累计确认和捎带确认机制,这样可以减小传输开销,接收方可以在合适的时候发送确认,也可以在自己有数据要发送的时候把确认信息顺便带上。
- 接收方不应该过分推迟发送确认,否则回导致发送方不必要的重传,这反而会浪费网络资源,TCP规定,确认推迟的时间不应该超过0.5秒。若收到一连串具有最大长度的报文,则必须每隔一个报文段就发送一个确认。
- 捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据。
TCP通信是全双工通信,通信中的每一方都在发送和接收报文,因此,每一方都有自己的发送窗口和接收窗口。
TCP建立连接
TCP采用三次握手的方建立连接
?之所以采用三次握手,而不是两次握手,主要是为了防止失败的连接请求报文突然又传到了TCP服务器,从而导致错误。?
TCP释放连接
TCP采用四次报文挥手的方式实现连接的释放
?应用层
概述
C/S结构与对等结构
DNS
万维网
参考:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!