rfc793中文翻译二(dlmu2001)
作者blog:blog.csdn.net/dlmu2001
欢迎访问
2.体系(PHILOSOPHY)
2.1 Internetwork系统的元素
internetwork环境由连接到依次通过网关互联的网络的主机组成。这里的网络有可能是局域
网络(比如 ETHERNET)或者大网络(比如ARPANET),但是任何一种情况都是基于包
交换技术。产生和消费消息的活动代理是进程。在网络,网关和主机上不同层次的协议支持
一个通信系统,该系统提供了进程端口之间在逻辑连接上的双向数据流。
术语包(packet)用在这里表示一个主机和它的网络之间的一次事务的数据。我们通常不用
关心一个网络内交换的数据块的格式。
主机是附着在一个网络上的计算机,从通信网络的观点来看,是包的源和目的地。进程在
主机里被视为活动的元素(根据相对普遍的定义,进程是在执行的程序)。终端和文件或者其它I/O设备都被视为通过进程的使用彼此通信的东东。因此,所有的通信被视为进程间
通信。
既然一个进程可能需要在它自己和其它进程间区分通信流,我们想像每个进程可以有几个
端口,通过这些端口,进程同其它进程的端口进行通信。
2.2 操作模型
进程通过调用TCP传输数据,调用时传递数据的缓冲。TCP将这些缓冲的数据打包成分片,
然后调用internet模块来传输每个分片到目的TCP。接收TCP将一个分片中的数据放置到
接收用户缓冲,然后通知接收用户。TCPs在分片里面包含了控制信息来确保可靠有序的数据传输。
Internet通信模型是由一个同每个TCP有联系的internet协议模块提供了到局域网络的接口,
这个internet模块组装TCP分片到internet数据报,然后为这些数据报选路到一个目的internet模块或者中继网关。为了在局域网络上传输数据报,它被包含在一个局域网络桢中。
包交换可以执行进一步的包装,分片或者其它操作以投递局域网包到目的internet模块。
在一个网络间的网关上,从它的局域网包上来的internet数据报是未经包装的(unwrapped),这些数据报被检查以确定数据报下一个要经过的网络。然后Internet数据报被包装成适合于下一个网络的局域包,然后被选路到下一个网关或者最后的目的地。
允许网关将一个internet数据报分解成更小的internet数据报分片,如果这在下一个网络中传输是必要的话。要这样做,网关要产生一套internet数据报,每个携带一个分片。分片在接下去的网关中可能会进一步分解成更小的分片。Internet分片设计成目的internet模块可以组装分片成一个internet数据报的格式。
目的internet模块从数据报解开分片后(如果需要,经过重组数据报)传给目的TCP。
这个简单的操作被多个细节注释。一个重要的特性是服务类型。这给网关(或internet模块)提供了指导它选择在下一个网络上传输的服务参数的信息。包含在服务类型信息里面的是数据报的优先级信息。数据报也可以携带安全信息来允许主机和操作在不同安全级别环境上的网关来基于安全考虑正确隔离数据报。
2.3 主机环境
TCP被当作操作系统中的一个模块。用户就像他们访问文件系统那样访问TCP。TCP可以调用其它操作系统接口,比如,管理数据结构的接口。假设真正的对网络的接口由设备驱动模块控制。TCP不直接调用网络设备驱动,而是调用internet数据报协议模块,在internet数据报协议模块中调用设备驱动。
TCP机制并不排除在一个前端(台)处理器(front-end processor)上的TCP实现。但是,在这样一个实现中,一个主机到前台(host-to-front-end)的协议必须提供功能来支持在本文档中描述的TCP用户接口的类型。
2.4 接口
TCP/用户接口提供了用户可以调用的TCP的接口,这些接口用来打开或者关闭一个连接,发送或者接收数据,或者获取一个连接的状态信息。这些接口同操作系统中其它用户的接口相似,比如,打开,读取或者关闭一个文件的接口。
TCP/internet接口提供了在internet系统中发送和接收寻址到主机上的TCP模块的数据报。这些接口中可以传递地址(address),服务类型(type of service),优先级(precedence),安全(security)和其它控制信息。
2.5 同其它协议的关系
下图展示了TCP在协议层次结构中的地位:
+------+ +-----+ +-----+ +-----+
|Telnet| | FTP | |Voice| ... | | Application Level
+------+ +-----+ +-----+ +-----+
| | | |
+-----+ +-----+ +-----+
| TCP | | RTP | ... | | Host Level
+-----+ +-----+ +-----+
| | |
+-------------------------------+
| Internet Protocol & ICMP | Gateway Level
+-------------------------------+
|
+---------------------------+
| Local Network Protocol | Network Level
+---------------------------+
Protocol Relationships
Figure 2.
TCP被期望能够有效支持高层协议。必须容易确定高层协议如ARPANET Telnet或者AUTODIN II THP和TCP的接口
2.6可靠通信(Reliable Communication)
在一个TCP连接上的数据流可以可靠的顺序地投递到目的地。
传输通过系列号(sequence numbers)和确认(acknowledements)来确保可靠。概念上,每八位字节数据分配一个系列号码。一个分片里面的第一个八位字节数据同分片一块传输,被
称为分片系列号码。分片也携带一个确认号码,该确认号码是在相反方向的下一个期望的传输八位字节数据的系列号码。当TCP传输一个包含数据的分片的时候,他将该数据分片的拷贝放在重传队列中,然后开始一个定时器,当数据的确认收到的时候,该分片拷贝从队列中删除,如果在定时到达之前没有收到确认,分片被重传。
TCP的确认并不保证数据被投递到最后的用户,只是保证接收TCP将负起该责任。
为了控制TCPs之间的数据流量,采用了一个流量控制机制。接收TCP报告一个“窗口”(window)来发送TCP。这个窗口指定了接收TCP当前准备接收的数据的字节数目,该数据字节从确认号码开始。
2.7连接建立和清除(Connection Establishment and Clearing)
为了鉴别TCP可能要处理的分散的数据流,TCP提供了一个端口标识。因为端口标识是每个TCP单独选择了,他们可能不是唯一的。为了在每个TCP内提供一个唯一地址,我们将标识TCP的一个internet地址和一个端口标识结合起来创建一个socket,这在所有互联的网络上是唯一的。
一个连接由两端的socket对完全指定。一个本地的socket可以参与到多个外部socket的多个连接。一个连接可以用来携带两个方向的数据,这就是“全双工”(full duplex)。
TCP可以自由地将端口和他们选择的进程联系起来。但是,在任何实现中,有些基本概念是必须的。必须有些众所皆知的sockets,在这些socket上TCP仅通过一些方法同合适的进程联系在一起。我们想像进程可以“拥有”端口,且这些进程仅可以在他们拥有的端口上发起连接。(实现拥有权的方式是一个本地问题,但我们想像一个请求端口用户命令,或者唯一分配一组端口给一个指定进程的方法,比如,将端口名字的高位同一个指定的进程联系在一起)
连接由带有本地端口和外部socket参数的OPEN调用被指定。反过来,TCP提供了一个(短的)本地连接名字,通过这个名字,用户可以在接下来的调用中索引到这个连接。这里有些关于一个连接的信息必须被记住。为了存储这些信息,我们假定有个称为传输控制块(Transmission Control Block :TCB)的数据结构。一个实现策略是将一个指向该连接的TCB的指针作为本地连接名字。OPEN调用也指定了连接的建立是主动要求的,还是被动接受的。
被动OPEN请求意味着进程要接受到来的连接请求而不是尝试初始化一个连接。通常请求一个被动OPEN的进程将接受任何调用者的连接请求。在这种情况下,全0的外部socket用来指示一个未指定的socket。未指定的外部socket仅在被动OPENs被允许。
一个服务进程如果希望为其它未知进程提供服务,要以未指定的外部socket发起一个被动的OPEN请求。然后连接可以通过请求连接到该本地socket的任何进程建立。如果这个本地socket已知用来同这个服务联系,这将是有帮助的。
将一个socket地址同标准服务联系起来的这种众所皆知的socket是一个便利的机制。比如,“Telenet-Server”进程永久地分配给一个特定的socket,其它的soket保留给文件传输(File Transfer),远程工作入口(Remote Job Entry),文本产生器(Text Generator),回声(Echoer)和Sink进程(后面三个进程测试用)。一个socket地址可能被保留来访问一个“Look-Up”服务,该服务将返回指定的socket,在该socket上一个新创建的服务将被提供。众所皆知的socket是TCP规范的一部分,但是分配socket给服务超出了这个规范。(参见[4])
进程可以创建(issue)被动OPENs,然后等待其它进程的匹配的主动OPENs,当连接建立时,TCP就会通知它。在同一时间彼此向对方发起主动OPENs的两个进程将被正确连接。这个弹性对支持分部式计算是至关重要的,在分部式计算中,各个部分异步行动,不考虑对方。
在本地被动OPENs和一个外部主动OPENs时有两种匹配socket的基本情况。第一种情况,本地被动OPENs完全指定了外部socket,在这种情况中,匹配是精确的。第二种情况,本地被动OPENs未指定外部socket,在这种情况下,任何外部的socket只要本地socket匹配就被接受。其它可能的情况包括部分严格匹配。
如果有几个具有相同本地socket的悬而未决的被动OPENs(记录在TCBs),如果存在一个指定了外部socket的TCB,则在选择一个未指定外部socket的TCB之前,外部主动OPEN将被匹配到该TCB。
建立连接的工程利用了同步控制标志(SYN),包含了三条消息的交换。这个交换被称为三步握手[3]。
通过包含一个SYN的到达分片和由用户OPEN命令创建的一个等待TCB条目的集合点,连接被发起。当一个连接被发起时,判定本地和外部socket的匹配。当系列号(sequence numbers)在两个方向被同步的时候,连接创建。
连接的清除也包括分片的交换,此时,携带的是FIN控制标志。
2.8 数据通信(Data Communication)
在一个连接上的数据流可以视为字节流。发送用户在每个SEND调用中指示数据是否要通过PUSH标志的设置被立即推给接收用户。
发送TCP允许集结从发送用户过来的数据,以他们便利的方式以分片发送那些数据,直到push函数被标记,然后它发送所有的未发送的数据。当接收TCP看到PUSH标志,它必须立即将数据传递给接收进程而不是等待发送TCP的其它数据。
Push功能和分片边界之间没有必然联系。在任何特定分片的数据可以是一个单独的SEND调用的结果,全部或者部分,或者是多个SEND调用。
PUSH功能和PUSH标志的目的是把数据从发送用户推给接收用户。它不提供一个记录服务(record service)。
Push功能和TCP/用户接口的数据的缓冲的使用有个结合点。每次,一个PUSH标志同放到接收用户缓冲的数据联系在一起,即使缓冲没有满也会返回给用户处理。如果数据到达,且在发现PUSH标志前充满了整个缓冲,数据以缓冲大小为单元传给用户。
TCP还定义了一种同数据接收者通信的方法,就是在某些点上,有紧急数据,接收者正在读取(TCP also provides a means to communicate to the receiver of data that at some point further along in the data stream than the receiver is currently reading there is urgent data.)。TCP并不尝试定义用户在收到悬而未决的紧急数据的通知时确定的行为,但是通用的观念是接收进程将很快采取行动处理紧急数据。
2.9 优先级和安全性
TCP使用internet协议的服务类型头部和安全选项来在每个连接上提供优先级和安全性。不是所有的TCP模块必须在多级别安全环境下起作用。有些可能仅限于未分类使用,其它可能仅在一个安全级别和隔离上操作。从而,有些TCP实现和对于用户的服务可以限制在多级别安全场合的一个子集上。
运行在多级别安全环境的TCP模块必须正确标记外出的分片的安全性,分隔和优先级。这样的TCP模块必须同时提供他们的用户或者高层协议入Telnet或者THP一个接口以允许他们指定要求的安全级别,分隔和连接优先级。
2.10 坚固性原则(Robustness Principle)
TCP实现遵循了一个通用的坚固性原则:对自己所做的保守,对从其它地方接受的自由。
阅读(3736) | 评论(0) | 转发(0) |