Bacysoft.cn

 找回密码
 邀请注册
查看: 28026|回复: 0
打印 上一主题 下一主题

[第一章] 1.3.4 传输层

[复制链接]
跳转到指定楼层
楼主
发表于 2012-4-27 13:16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通常传输层被认为是用来保证在两个通信进程或者程序之间的可靠数据传输。然而,这仅仅在使用面向连接的协议时才是正确的,比如传输控制协议(TCP),而不是低可靠性的用户数据报协议(UDP),UDP 也是 TCP/IP 协议栈中的传输层协议。

传输层协议主要负责:
• 控制端到端的通信。
• 为上层提供面向连接或者无连接的传输服务。
• 使用客户端和服务器端口地址来标识主机上运行的进程。

注意
通常用“段”来描述被传输层操作的信息。传输层在收到上层协议传递过来的消息或者数据流时会将他们分成许多可以管理的小片段,并为了能跟踪每个片段,传输层会给每个片段分配源和目的端口地址。

传输层的任务一是表示主机上需要通信的进程或者程序,并为他们提供面向连接或者无连接的传输服务。面向连接的服务提供可靠的数据传输。无连接的服务提供更快捷的数据传输,但无法保证可靠性。TCP 和 UDP 都是传输层协议。

传输层使用端口来寻址。这些地址用来标识正在通信的上层程序或者进程。终端系统中可能同时运行着很多活动的应用程序,他们之间使用不同的端口地址。所以端口地址是用来区分在同一个终端系统中的不同应用程序。

术语套接字用来描述终端系统中本地IP地址和传输层端口的组合。这个组合唯一的标识了一台主机上运行的一个进程。当两个终端系统进行通信时,一个套接字对将被创建。这个套接字对包含了两个终端系统的IP地址和端口地址,他们唯一的标识了两个远程系统之间的逻辑通信频道。当一个服务器上有很多连接需要管理时,也将通过套接字对来区分和跟踪他们。

套接字对
在业界把在端到端通信中的源目的地址以及端口称为套接字对。

我们知道,基于客户端以及基于服务器的地址就是 TCP 或者 UDP 端口,他们用来表示运行在主机上的进程或者程序。通常客户端端口地址从1024到65635,并且是在客户端进程启动是随机指定的。

服务器端口地址从1到1023。其中1到255是业内公认的一些专用服务器端口地址。从256到1023,可以由商家自行分配给他们自己的程序或者进程。附录C包含了常用的TCP和UDP端口列表。

完全理解无连接服务和面向连接服务的性质,以及 TCP 和 UDP 的功能非常重要。

所有的协议都能被分为面向连接的或者是无连接的。面向连接的协议能在两个终端系统之间提供可靠的数据传输服务。

在任何有意义的数据交换前,一个虚拟的逻辑连接将在两台远程主机之间建立。在这个连接建立之后,数据就能通过这条连接进行传输了。在整个会话过程中,所有被交换的信息都能通过序号被跟踪,并且通过确认来保证可靠性。跟踪每个分片需要向终端系统发送大量资源请求,这增加发送到网络上的流量。当数据传输或者通讯完成以后,会话将不在需要,终端系统会将其拆除。

面向连接的协议在传输过程中的资源请求总数取决于协议是如果实现的。一些协议按照每个数据帧排序,也有的按照帧内每字节排序。无论哪种方法,目的只有一个:探测出有多少帧或者数据在传输中丢失了,并且通过重传丢失的帧或者数据来保证传输的可靠性。

当没有用户数据交换的时候,虚拟连接需要被维护,这通过保活机制来实现(Keepalives)。保活机制本质上没有承载任何上层数据,仅仅是用来维护空闲连接,使其保持连接状态而不会被终端系统拆除。

另外一个面向连接协议的功能就是流量控制。当数据发送太快时,可能会占满接收端主机的缓存,从而导致数据丢失。为了阻止这种情况发生,一种流量控制机制就可以派上用场。

TCP/IP 协议栈中的 TCP 就是一种面向连接的传输层协议。

所有的 TCP 连接在数据传输前被创建。一个确立的连接需要在远程主机之间进行三次握手。在连接被建立以后,TCP 序号和确认用来保证发送或者接收的数据没有在传输中丢失。并且当连接不在需要时,将被拆除。

注意
将在第7章中讨论的 BGP(边界网关协议)协议就是利用了 TCP 的面向连接的服务。

作为对比,无连接的协议,比如 UDP(用户数据报协议),发送信息时不需要虚拟连接,也不需要确认信息是否被接收了,因此发送速度很快,但是无法保证可靠性。因此 UDP 需要依靠其他协议来确保发送的数据被无差错的接收。这些无连接协议不如面向连接的协议那么可靠,但是他们快速且开销很小。多数情况下简单的CRC校验被用来验证协议头部没有在传输过程出错。IP 协议就是一个无连接协议,向高层提供快速但是不可靠的传输服务。

通过对比两种类型发服务,有两点值得思考:速度还是可靠性和开销。当厂商希望更加快速的传输,可以选择使用无连接协议,比如 UDP;当可靠性比速度更加重要时,则选择面向连接的协议,比如 TCP。这里有个典型实例,厂商写打印应用程序是会选择面向连接的协议,因为用户不想打印出错而重复打印的工作!

您需要登录后才可以回帖 登录 | 邀请注册

本版积分规则



京ICP备08000958号-1|腾讯云|阿里云|联系方式|Bacysoft.cn

GMT+8, 2024-12-26 16:08 , Processed in 0.013033 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表