网络协议概述
- 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。
- 网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal传输控制协议/英特网互联协议),它是一个包括TCP协议和IP协议,UDP(User Datagram Protocol)协议和其它一些协议的协议组,在学习具体协议之前首先了解一下TCP/IP协议组的层次结构。
- 在进行数据传输时,要求发送的数据与收到的数据完全一样,这时,就需要在原有的数据上添加很多信息,以保证数据在传输过程中数据格式完全一致。TCP/IP协议的层次结构比较简单,共分为四层,如图所示。
上图中,TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层进行详细地讲解。
链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。
网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。
传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。
应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。
网络协议之链路层
1. 数据链路和帧
链路(物理链路):从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
数据链路(逻辑链路):把实现通信协议的硬件和软件加到链路上,就构成了数据链路。现在最常用的方法是网络适配器来实现这些协议和软件。一般的适配器都包括了数据链路层和物理层这两层的功能。
帧:数据链路层的协议数据单元。
数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并交给网络层。在因特网中,网络层协议数据单元就是IP数据报(简称为数据报、分组、包)
----简化模型
如上图,点对点信道的数据链路层在进行通信时的主要步骤如下:
(1) 结点A的数据链路层把网络层交下来的IP数据报添加到首部和尾部封装成帧。
(2) 结点A把封装好的帧发送给结点B的数据链路层。
(3) 若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给上面的网络层,否则就丢弃这个帧
2. 适配器的作用
计算机与外界局域网的连接是通过通信适配器。适配器本来是在主机箱内插入的一块网络接口板(或者是在笔记本电脑中插入的一块PCMCIA卡),这种接口板又称为网络接口卡NIC(Network Interface Card)或简称为“网卡”,由于较新的计算机主板上已经嵌入了这种适配器,不使用单独的网卡,因此使用适配器这个术语会更准确。在适配器上装有处理器和存储器(包括RAM和ROM)。适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的,而适配器和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行的。因此,适配器的一个重要功能就是要进行数据串行和并行传输的转换。因为网络的数据率和计算机总线上的数据率并不相同,因此在适配器中必须装有对数据进行缓存的存储芯片。若在主板上插入适配器时,还必须把管理该适配器的设备驱动程序安装在计算机的操作系统中。这个驱动程序以后就会告诉适配器,应当从存储器的什么位置把多长的数据块发送到局域网,或者应该在存储器的什么位置上把局域网传送过来的数据块存储下来。适配器还要能够实现以太网协议。
适配器接收和发送各种帧时不使用计算机的CPU。这时CPU可以处理其他任务。当适配器收到有差错的帧时,就把这个帧丢弃而不必通知计算机。当适配器收到正确的帧时,它就使用中断来通知计算机并交付给协议栈中的网络层。当计算机要发送IP数据报时,就由协议栈把IP数据报向下交给适配器,组装成帧后,发送到局域网。下图表示适配器的作用。注意:计算机的硬件地址在适配器的ROM中,而计算机的软件地址—IP地址,则在计算机的存储器中。
— 计算机通过适配器与局域网进行通信
3. 在数据链路层扩展以太网
3.1. 网桥的内部结构
下图给了网桥的内部结构要点。最简单的网桥有两个接口。两个以太网通过网桥连接起来后,就成为一个覆盖范围更大的以太网,而原来的每个以太网就可以称为一个网段。
网桥依赖转发表来转发帧。转发表也叫做转发数据库或路由目录。如下图,若网桥从接口1收到A发给E的帧,则在查找转发表后,把这个帧送到接口2转发到另一个网段。使E能够收到这个帧。若网桥从接口1收到A发送给B的帧,就丢弃这个帧,因为转发表表指出,转发给B的帧应当从接口1转发出去,而现在正是从接口1收到这个帧,这说明B和A处在同一个网段上,B能够直接收到这个帧而不需要借助于网桥的转发。
网桥是通过内部的接口管理软件和网桥协议实体来完成上述操作的。
注:网桥的接口也称为端口
3.2. 网桥的优缺点
网桥的优点:
1) 过滤通信量,增大吞吐量。网桥工作在链路层的MAC子层。可以使以太网各网段成为隔离开的碰撞域。如果把网桥换成工作在物理层的转发器,那就没这种过滤通信量的功能。如下,网桥B1和B2把三个网段连接成一个以太网。但它具有三个隔离开的碰撞域。
–网桥使各网段成为隔离开的碰撞域
可以看到,不同网段上的通信互不干扰。例如,A和B正在通信,但其他网段上的C和D以及E和F也都可以同时通信。但如果A要和另一个断网上的C通信,必须经过网桥B1的转发,那么这两个网段上就不能再有其他的站点进行通信(但这时E和F仍然可以通信)。因此,若每一个网段的数据率都是10Mb/s,那么三个网段合起来的最大吞吐量就变成30Mb/s。如果把两个网桥换成集线器或转发器,那么整个网络仍然是一个碰撞域,当A和B通信时,所有其他站点都不能够通信。整个碰撞域的最大吞吐量仍然为10Mb/s
注:
两个网桥之间也可使用一段点到点链路
注意,网桥在转发帧时不改变帧的源地址
2) 扩大了物理范围,因而也增加了整个以太网工作站的最大数目。
3) 提高了可靠性。当网络出现故障时,一般只影响个别网段。
4) 可互连不同物理层、不同MAC子层和不同速率(如10Mb/s和100Mb/s)的以太网
网桥的缺点:
1) 由于网桥对接收的帧要先存储然后查找转发表,然后才转发,而转发之前,还必须执行CSMA/CD算法,增加了延时
2) 在MAC子层并没流量控制功能。当网络上的负荷很重时,网桥中的缓存的存储空间可能不够而发生溢出,以致产生帧丢失的现象。
3) 网桥只适合于用户数不太多(不超过几百个)和通信量不太大的以太网,否则可能因传播过多的广播信息而产生我拿过来拥塞。
3.3. 透明网桥
目前使用最多的网桥,一种即插即用设备,即只要把网桥介入局域网,不用人工配置转发表网桥就能工作。
网桥自学习原理
若从某个站A发出的帧从接口x进入了某网桥,那么从这个接口出发沿相反方向一定可以把一个帧传送到A。所以网桥只要每收到一个帧,就记下其源地址和进入网桥的接口,作为转发表中的一个项目。请注意,转发表中并没有“源地址”这一栏,而只有“地址”这一栏。在建立转发表时是把帧首部中的源地址写在“地址”这一栏的下面。在转发帧时,则是根据收到的帧首部中的目的地址来转发的。这时就把“地址”栏下面已经记录的原地址当作目的地址,而把记下的进入接口当作转发接口。以下图为例,说明转发表的建立过程。当首先我们要在强调一下网桥和集线器的一个重要区别:网桥是按存储转发方式工作的,一定是把整个帧收下来(但集线器或转发器是逐比特转发)在进行处理,而不管其目的地址是什么。因此网桥丢弃CRC检验有错误的帧以及帧长过短和过长的无效帧,然后按照以下步骤进行处理:
1) A向B发送帧。连接在同一个局域网上的站点B和网桥B1都能接收到A发送帧。网桥B1按源地址A查找转发表。B1的转发表中没有A的地址,于是把地址A和收到此帧的接口1写入转发表中。这就表示,以后若收到要发给A的帧,就应当从这个接口1转发出去。接着,再按目的地址B查找转发表。转发表中没有B的地址,于是就通过除收到此帧的接口1以外的所有接口(现在就是接口2)转发该帧。网桥B2从其接口1收到这个转发过来的帧。
网桥B2按照同样方式处理收到的帧。B2的转发表中没有A的地址,因此在转发表中写入地址A和接口1.B2的转发表中没有B的地址,因此B2通过接收此帧的接口1以外的所有接口(现在就是接口2)转发该帧。
请注意,现在两个转发表已各有一个项目了。读者可能问,B本来就可以直接收到A发送的帧,为什么还要让网桥B1和网桥B2盲目的转发这个帧呢?答案是:这两个网桥当时并不知道网络拓扑,因此要通过自学习过程(盲目转发的过程)才能逐步弄清除所有的网络拓扑,建立起自己的转发表
2) F向C发送帧。网桥B2从其接口2收到这个帧。B2的转发表中没有F,因此转发表写入地址F和接口2.B2的转发表中没有C,因此要通过B2的接口1把帧转发出去。现在C和网桥B1都能收到这个帧。在网桥B1的转发表中没有F,因此要把地址F和接口2写入转发表,并且还要从B1的接口1转发这个帧。
3) B向A发送帧。网桥B1从器接口1收到这个帧。B1的转发表中没有B,因此在转发表写入地址B和接口1.再查找目的地址A。现在B1的转发表可以查到A,其转发接口是1,和这个帧进入网桥B1的接口一样。于是网桥B1知道了,自己不用转发这个帧。这次网桥B1的转发表增加了一个项目,网桥B2的转发表没变。
显然,如果网络上的每一个站都有发送过帧,那么每一个站的地址最终都会记录在两个网桥的转表中。
实际上,在网桥的转发表中写入的信息除了地址和接口外,还有帧进入该网桥的时间。网桥中的接口管理软件周期性的扫描转发表中的项目,只要在一定时间以前登记的都要删除,以保持最新的网络拓扑。
总结:网桥的自学习和转发帧的一般步骤
1.网桥收到一帧后先进行自学习。查找转发表中与收到帧的源地址,有无相匹配的项目。如果没有,就在转发表中增加一个项目(源地址、进入的接口和时间)。如果有,则把原有的项目进行更新。
2.转发帧。查找转发表中与收到帧的目的地址有无相匹配的项目。如果没有,则通过所有其它接口(进入网桥的接口除外)进行转发。如有,则按转发表中给出的接口进行转发。但应注意,若转发表中给出的接口就是该帧进入网桥的接口,则应该丢弃这个帧(因为这时不需要经过网桥进行转发)