1 计算机网络基本概念
计算机网络
@author : duanxxnj@163.com
@time : 2016-11-07
很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,并且很多嵌入式设备都没有操作系统,但TCP/IP协议族允许它们互相进行通信。
网络分层
网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。标准的网络分层OSI将网络分为了7层,而TCP/IP协议组将网络分为了5层。OSI和TCP/IP协议族的对应关系如下图所示。
从上图中也可很容易的看出,从传输层往上的网络层属于"Host Layers",即这部分归操作系统管。而网络层往下,属于"Media Layers",也就是说,这部分归网卡管理,这里的"Media"指的就是网卡。上图中还可以看到一点:物理层的数据格式是:Bits,即比特流;数据链路层的数据格式是:Frames,即数据帧;网络层的数据格式是:Packets,即数据包;传输层的数据格式是:Segments,即数据段;应用层的数据格式是:Data,即我们做应用开发时所面对的数据。
由于OSI分层过于细化,所以从开发之初,就只是一个参考协议,并没有实际使用过。在实际中,我们所使用的都是TCP/IP协议族,往后所讲的所有的网络协议分层的方式,都是按照TCP/IP协议族来分层的。
最后,提供一个最为详细的分层及相关协议依赖说明:
物理层(Physical)
设备:网卡,网线,集线器,中继器,调制解调器
物理层的主要功能是:为数据端设备提供传送数据的通路,即利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异,使其上面的数据链路层不必考虑网络的具体传输介质是什么。
物理层定义了一些传输介质具有的特性,比如机械特性、电气特性、功能特性和过程特性。
传输介质可以分为导向和非导向,无线即为非导向。
有一点需要明确,网络中由于各种干扰的存在,特别是无线网,非常容易受到电磁干扰,物理层提供的数据传输,是不可靠的!!!。
数据链路层(Data Link)
设备:网桥,交换机(二层)一个设备工作在哪一层,关键看它工作时利用哪一层的数据头部信息。网桥工作时,是以MAC头部来决定转发端口的,因此显然它是数据链路层的设备。
它的主要功能是如何在不可靠的物理线路上进行数据的可靠传递。在计算机网络中由于各种干扰的存在,物理链路是不可靠的。因此,这一层的主要功能是在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。
数据链路层被分为介质访问控制(Media Access Control:MAC)和逻辑链路控制(Logical Link Control:LLC)两个子层:MAC子层的主要任务是解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制
LLC子层的主要任务是建立和维护网络连接,执行差错校验、流量控制和链路控制
数据链路层的作用总结:
1. 发送和接收IP数据报
2. 为ARP模块发送ARP请求和接收ARP协议
3. 为RARP发送RARP请求和接受RARP应答
网络层(Network)
设备:路由器交换机和路由器的区别:交换机实际是一个基于网桥技术的多端口第二层网络设备,其内部核心处有一个交换矩阵,为任意两端口间的通信提供通路。它为数据帧从一个端口到另一个任意端口的转发提供了低时延、低开销的通路。而路由器是网络层的分组交换设备,路由器的基本功能是把IP报文传送到正确的网络。路由器主要的功能有:1、路由选择;2、网络连接;3、分隔子网。
生活中使用这两个设备的区别:交换机主要是实现大家通过一根网线上网,但是大家上网是分别拨号的,各自使用自己的宽带,大家各自上网没有影响,哪怕其他人在下载,对自己上网也没有影响,并且所有使用同一条交换机的电脑都是在同一个局域网内。路由器比交换机多了一个虚拟拨号功能,通过同一台路由器上网的电脑是共用一个宽带账号,大家之间上网是相互影响的,比如一台电脑在下载,那么同一个路由器上的其他电脑会很明显的感觉到网速很慢。同一台路由器上的电脑也是在一个局域网内的。
路由器和交换机主要区别如下:
1、路由器可以给你的局域网自动分配IP,虚拟拨号
2、交换机只是用来分配网络数据
3、路由器在网络层,路由器根据IP地址寻址,路由器可以处理TCP/IP协议
4、交换机在中继层,交换机根据MAC地址寻址,不可以处理TCP/IP协议
5、路由器可以把一个IP分配给很多个主机使用,让这些主机组成局域网,而这些主机对外只表现出一个IP。
6、交换机可以把很多主机连起来,这些主机对外各有各的IP。
7、路由器提供防火墙的服务,交换机不能提供该功能
8、集线器、交换机都是做端口扩展的,就是扩大局域网的接入数目,也就是能让局域网可以连进来更多的电脑
9、路由器是用来做网间连接,也就是用来连接不同的网络
10、IP地址是在软件中实现的,描述的是设备所在的网络
11、MAC地址通常是硬件自带的,由网卡生产商来分配,已经固化到了网卡中,一般来说不可更改
一般来说,我们使用路由器和交换机逻辑上满足下面这幅图:
路由器的要任务是:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。
网络层主要的协议是IP协议、ICMP协议、IGMP协议。
数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。数据链路层是解决同一网络内节点之间的通信,而网络层主要解决不同子网间的通信。例如在广域网之间通信时,必然会遇到路由(即两节点间可能有多条路径)选择问题。
在实现网络层功能时,需要解决的主要问题如下:寻址:数据链路层中使用的物理地址(如MAC地址),仅解决网络内部的寻址问题。在不同子网之间通信时,为了识别和找到网络中的设备,每一子网中的设备都会被分配一个唯一的地址。由于各子网使用的物理技术可能不同,因此这个地址应当是逻辑地址(如IP地址)。
交换:规定不同的信息交换方式。常见的交换技术有:线路交换技术和存储转发技术,后者又包括报文交换技术和分组交换技术。
路由算法:当源节点和目的节点之间存在多条路径时,网络层可以根据路由算法,通过网络为数据分组选择最佳路径,并将信息从最合适的路径由发送端传送到接收端。
连接服务:与数据链路层流量控制不同的是,前者控制的是网络相邻节点间的流量,后者控制的是从源节点到目的节点间的流量。其目的在于防止阻塞,并进行差错检测。
传输层(Transport)
运输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。UDP则为应用层提供一种非常简单的服务。
UDP只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。
在第一幅图中也可以很容易的看到,传输层是以Segments为数据格式的,这一层是"Host Layers"和"Media Layers"的接口。
应用层(Application)
对应于OSI七层参考模型的应用层和表达层。因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等。
应用层负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序:
• Telnet 远程登录。
• FTP 文件传输协议。
• SMTP 简单邮件传送协议。
• SNMP 简单网络管理协议。
应用层依赖于下面各层才能实现数据传输,举个例子,这里假设在一个局域网(LAN)中有两台主机,二者都运行FTP协议,那么各层会用到的协议如下:
大多数的网络应用程序都被设计成客户—服务器模式,服务器为客户提供某种服务。
应用程序通常是一个用户进程,而下三层则一般在(操作系统)内核中执行。尽管这不是必需的,但通常都是这样处理的,例如unix操作系统。
应用层关心的是应用程序的细节,而不是数据在网络中的传输活动。下三层对应用程序一无所知,但它们要处理所有的通信细节。
为什么要做网络分层我一般看问题,都遵循 原则,即 、、。,这是个什么东西? ,为什么会有这个东西?,这个是如何实现的?
在前面的介绍中,已经说明了, 和 ,什么是计算机网络分层,计算机网络如何分层。但是,有一个问题还没有说明,就是 ,为什么要做计算机网络分层?分层的依据又是什么?
网上给出的解释,基本上是一致的:分层之后,各层之间是独立的,易于实现和维护。
一种调侃的说话就是:往好了说,网络分层就是将一个大的开发问题分化成小问题,如上所说低耦合高内聚。然而对于普通开发者来说就是方便甩锅,都是你传送层没做容错机制,怎么怪我IP层!物理层丢包率这么大,我上层无能为力啊!
这里我从计算机网络构成的顺序来说明一下,为什么计算机网络要分层,以及分层的依据:首先是物理层。历史回到多年之前,在电脑设计之初,那时候还没有计算机网络,我们每个人有一台电脑,自己玩自己的。为了让两台电脑之间可以相互交换数据,于是,就需要用一根通信线将两台电脑连在一起,由于通信线上是按照一定的速率,使用电平的翻转来传输数据的,所以两台电脑需要协商好一些基本的物理连接的协议:网线的物理接口、网线上的电平、电平翻转的速率等等,也就是机械特性、电气特性、功能特性等等。
一旦,实现了两个电脑之间的通信之后,就会考虑将更多的电脑连在一起,当然所有连接进来的网络,必须和之前的电脑遵循相同的物理协议,否则无法相互通信。而这多个电脑连接在一起使用的一般是集线器(Hub)之类的设备。
数据链路层:随着时间的推移,当基于物理层,实现了多个电脑连接在一起之后,有一个必须要解决的问题,那就是相互连在一起的电脑这么多,我如何保证我给A发送的数据就能发到A那里,而不是发给了B呢?这就需要相互连接的电脑每个电脑都有一个独一无二的ID,也就是MAC地址,此时就需要使用交换机。
在交换机上,每一台电脑,都是通过网线,连接到交换机的一个接口上的,而交换机维护着MAC地址和交换机接口的对应表。
电脑A想要发送数据给电脑B,就只需要向交换机发送电脑B的MAC地址,以及相关的数据,交换机会跟家MAC地址对应的接口,将数据发送给对应的电脑B。到这里,也就组成了所谓的局域网。
相对于之前只关心连接的物理特性,这里更关心是如何在局域网中传输数据,并且还制定了相关的协议,索性直接将和物理相关的那些协议称为物理层,在局域网中传输数据的协议称为数据链路层。
如果只是在局域网内部进行数据传输的话,只需要使用MAC地址就可以了!!!
网络层:时间又往后走,基于上面的两个层,已经实现了很多的局域网,于是乎,自然就有人想把各个局域网也连接在一起。但现在又遇到了一个麻烦的问题:就是现有的各个局域网大多是异构的。准确的说法是,当时有很多丧心病狂的人,设计了很多类型的局域网,设计的时候,这些设计局域网的人相互直接也没商量一下,导致局域网之间的协议不一样,协议不一样,就无法通信(就好像有的局域网说的是汉语,有的局域网说的是英语,而有的说的是鸟语,之间根本没法交流)。
这时候,就出现了一个救世主,准确的说是一个翻译官:路由器,路由器可以将异构的网络连接在一起,让异构网络之间可以相互通信,而路由器起的就是一个翻译官的作用,将一个局域网协议的数据,转换成为另一个局域网协议的数据。
还是以之前举的FTP传输的例子来说,前面举这个例子的时候,是在局域网内部的数据传输,现在要在两个异构的网络之间传输的话,中间就需要使用路由器:
使用了路由器,将局域网连接在了一起,于是乎,就又取了个名字,叫做互联网。
当然了,路由器也有很多的协议,然后就将这些相关的协议划分为一个层,就成为了网络层
上面的三层,由于每一层都有实际的媒体设备与之对应,一般统称为 "Media Layes"
传输层主要是为"Media Layes"和应用层做一个接口,同时提供数据服务。