十进制网络技术及应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3.4 三层和四层模型的融合

考虑到网络的平稳过渡和对传统网络的兼容,十进制网络模型同时包括了四层和三层混合模型。那么,三层模型和四层模型的共存和触发机制是个重要的问题,需要让应用程序通知网络框架什么时候传输IP包和什么时候传输M数据,同时网络框架可以分别使用不同的网络模型来处理和传输数据。完美的场景就是一台计算机和另一台计算机之间的通信可以是IP包和M数据,如图2.12所示。

图2.12 三/四层模型的融合

1.TCP/IP/M协议簇

TCP和UDP提供不同的服务,大部分的应用程序只用其中的一个。如果需要可靠的数据传送,TCP可能是最佳的选择了;如果需要数据包服务,UDP是最佳的;如果需要高效的长的通路,TCP可能是最佳的;如果需要快的网络反应时间,UDP 可能是最佳的。如果不想分类,则“最佳”的选择就是模糊的。然而,应用程序能够弥补选择上的不足。举个例子,如果选择UDP的同时又需要可靠性,则在应用程序上加上可靠性就可以了。如果选择TCP需要标记的服务,那么应用程序必须在字节流里加入标记。

网络应用程序的数目是连续增长的。自从Internet技术开始推广就有一些应用程序了:TELNET和FTP。其他的是较新的:X-WINDOWS和SNMP。下面是一些网络应用程序的简要说明。

① TELNET。TELNET提供远端登录服务,它的操作和外形与电话拨号是相似的,在命令行上用户输入:“TELNET DELTA”就会收到从“delta”发来的登录提示。

② FTP(文件传送协议)。FTP 是与 TELNET 一样的网络应用程序,也有广泛的应用。从操作来看好像登录上了远端的计算机。但是必须用特殊的命令取代习惯上的命令。FTP命令允许在两台计算机之间复制文件。

③ RSH。远端shell(rsh或者remsh)是全部远端UNIX类型命令族中的一个。UNIX复制命令--CP,变成了RCP。UNIX命令“谁在登录”WHO变成了RWHO。这个系列都被变成了“R”系列命令。

R 命令主要工作在 UNIX 系统及被设计成在互相信任的主机间操作。安全性很少被考虑,但是提供了方便的用户环境。

如果在一台远端叫作delta的计算机上执行命令“cc file.c”,输入“rsh delta cc file.c”,复制文件到delta上,输入“rcp file.c delta”。为了登录delta,输入“rlogin delta”。在某种特定的方式上管理这台计算机将不会有登录提示。

④ NFS(网络文件系统)。NFS是由美国SUN公司开发的,它使用UDP,在不同的计算机之间上载 UNIX 系统文件是很出色的。一个无磁盘的工作站通过存取服务器的硬盘就好像磁盘是本地的。在主机“alpha”上的单一的数据库同样能被主机“beta”使用,只要数据库文件用NFS上载到“beta”上。

NFS 加入大量的信息给网络,从而使连接的速度很慢,但是它的优点是突出的。NFS客户端在内核执行,允许使用NFS的磁盘,如同在本地一样。

⑤ SNMP(简单网络管理协议)。SNMP 使用 UDP,被设计成由中心网络点来管理。它很智能,如果给它足够的数据,网络管理员就能够发觉和诊断网络问题。中心点用SNMP从网上的计算机收集数据。SNMP定义了这种数据的格式,由中心点或网络管理员来解释这种数据。

⑥ X-Window。X-Window系统并不是一个软件,而是一个协议(protocal),这个协议定义一个系统产品所需具备的功能,任何系统能满足此协议及符合X协会其他的规范,便可称为X,它能够用来设计用户界面。

2.传输层协议

(1)UDP(用户数据报协议)。

UDP是在IP层之上的两个主要协议之一。它提供用户网络应用程序的服务,用到UDP的网络应用程序有NFS(网络文件系统)和SNMP(简单网络管理协议)。UDP服务只是在IP的基础上加了少许一点。

UDP是无连接的数据报服务,没有丢失检测。UDP不与远端的UDP模块保持点到点连接,它仅仅把包发送出去而不管有没有丢失和接收来自外面的数据包。

UDP在IP的基础上加了两个属性,一个是端口号,另一个是检查数据完整性的校验和。

① 端口号。UDP和应用程序之间的通信路径是通过UDP端口的。这些端口是用数字表示的,从 0 开始。提供服务的应用程序用特定的端口号等待消息的进入。服务器不间断扫描客户端的请求服务。

例如,SNMP总是在端口161上等待消息。每台计算机只能有一个SNMP代理,因为只有一个UDP端口号161。这个端口号是众人皆知的,它是固定的,是网络分配的唯一的号。如果SNMP客户请求服务,则它会发送UDP包到目的计算机的端口161。

当应用程序发送UDP包,则远端收到的是一个单元。比如,应用程序发了5个UDP包,则远端就读取5次。当然,发的5个包和读取的5个包的大小是相等的。

UDP保存每一个完整的包,它不会将两个应用程序消息封装在一块,也不会将一个包拆成两个。

② 校验和。在IP头域里显示“UDP”的IP包被送到UDP模块。当UDP模块收到UDP包时将要检查它的校验和。如果它的校验和为0,则意味着在发送端校验和没有被计算,可以忽略。因此发送端的计算机的UDP包产不产生校验和没关系。如果数据帧在一个网络的两个UDP模块间通信,则不需要产生校验和。但是推荐使用校验和是因为路由表的改变可能导致数据通过不可靠的媒介。

如果校验和是正确的或为 0,目的端口就会检查它。UDP 包传向这个端口,排队等待应用程序处理它,否则UDP包就会被丢弃。如果UDP包到达的速度比应用程序能够处理的速度快或者等待的UDP包把队列排满,UDP包就会被丢弃。UDP模块会一直丢弃UDP包直到队列有多余的空间。

(2)TCP(传输控制协议)。

TCP提供与UDP不同的服务,TCP提供有连接的比特流,不同于无连接的数据报服务。TCP保证可靠传输,而UDP不保证。

TCP 被网络应用程序调用时保证可靠传输和不能有超时和误传。两个典型的网络应用程序是FTP(文件传送协议)和TELNET。其他的流行的TCP网络应用程序包括X-Window系统、scp(远程复制)和series commands。TCP的强大功能是要付出代价的,它需要更多的CPU和网络带宽。TCP模块的内部比UDP模块要复杂得多。

与UDP相似,网络应用程序和TCP端口连接。特定的端口号对应特定的应用程序。比如,TELNET服务器使用端口23,其客户端只能通过连接特定计算机上的端口23才能成功。

当应用程序通过TCP启动,在客户端的TCP模块和在服务器端的TCP模块互相通信,这样两个端点的TCP模块构成了虚拟的电路,这个虚拟电路消耗两端的资源,虚拟电路是双向的,数据能够同时向两个方向传送。应用程序把数据写到TCP端口,数据通过网络由远端的应用程序控制。

TCP包可以分成任意大小,包与包之间没有界限。比如,如果应用程序给TCP端口发了5次,远端的应用程序也许要读10次,或者它只读一次。在一端写的次数和大小与另一端读的次数和大小是没有关联的。

TCP是一个有超时和重发的滑动窗口协议。发出去的包必须得到远端的确认。确认信息可以携带在数据包上。两个接收端能够控制远端,从而防止缓冲器溢出。

对于所有的滑动窗口协议,有一个窗口的大小,窗口的大小决定了在收到确认信息以前可以发送的总的数据。对于TCP,这个数量不是TCP段的数量而是字节的数量。

(3)IP协议。

IP网际协议是TCP/IP的核心,也是网络层中最重要的协议。

IP 层接收由更低层(网络接口层)发来的数据包,并把该数据包发送到更高层—TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP 数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP 地址形成了许多服务的认证基础,这些服务数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP-source-routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统,平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被当作非法入侵。