Transmission Control Protocol, TCP 传输控制协议( 九 )


Receive
格式: RECEIVE (local connection name, buffer address, byte count) -> byte count, urgent flag, push flag
此命令分配一个接收缓冲区给指定的连接 。假如下面不是一个OPEN命令或者此调用进行未被授权使用此连接返回错误 。最简单的实现方法是在缓冲区没有填充完以前不返回控制权,但这样可能会造成严重的死锁 。更复杂的实现方法答应同时存在多个RECEIVE,这样会提高效率 。这样是在控制复杂的情况下取得了高效率 。
假如在PUSH之前的数据已经填满缓冲区,那么对于RECEIVE的响应中就不用设置PUSH位了 。缓冲区会容纳尽可能多的数据,假如在缓冲区填布满以前看到PUSH位,将返回缓冲区中的数据并设置PUSH 。在处理紧急状态时,假如有URGENT标记,还有紧急数据;假如没有URGENT标记了,就返回所有紧急数据,用户也离开紧急状态 。请注重,在紧急指针指向的点以后的那些数据不能和紧急数据一起返回,即使它们在同一个缓冲区内,当然,假如用户指定要这么做例外 。
为了区别多个RECEIVE并保证缓冲区不被布满,返回的数据中也要包括缓冲区指针和一个计数器指明现在接收了多少数据 。RECEIVE可以有自己专用了缓冲区,也可以和用户共享一个缓冲区 。
Close
格式: CLOSE (本地连接名)
此命令关闭连接,假如连接未打开,或未授权可以关闭连接返回错误 。在关闭的时候应该注重正常关闭,让所有的发送都发送完数据,也可以如上所说在CLOSE后面加上几个SEND,这就要求用户在收到CLOSE后仍然要进行接收 。因此,CLOSE意指“我没有更多的数据要发了”,并不代表“我不再发送任何数据了” 。关闭方也可能在超时前不能发出所有数据,这种情况下,要由CLOSE转入ABORT状态 。用户可以自己决定在任何时间关闭连接,也可以根据TCP返回的提示关闭 。因此关闭操作要和外TCP进行通信,因此在关闭状态可能要呆一会儿,在CLOSE没有返回前调用打开,会返回错误 。
Status
格式: STATUS (本地连接名) -> status data
这个命令和具体的实现有关,而且有可能会有负作用 。返回的信息通常来自有连接相关的TCB 。返回的数据块中包括下面的信息:本地套接字,外套接字,本地连接名,接收窗口,发送窗口,连接状态,等待确认的缓冲区数,等待接收的缓冲区数,紧急状态,优先级,security/compartment和传输超时 。因此实现不同,所以上述数据项中可能有几项没有意义或根本不存在 。假如调用进程没有被授权使用这一连接,返回错误 。这一点会防止未被授权的进程获得连接状态 。
Abort
格式: ABORT (本地连接名)
此命令中止所有SEND和RECEIVE,删除TCB,将发送非凡的RESERT信息到对方TCP 。具体的返回信息会因实现不同而不同 。
TCP到用户信息
假定操作系统提供一种可以使TCP异步传送信息到用户程序的机制 。当TCP确实通知用户程序时会返回一些特定的信息 。通常在这些信息中也会有错误信息,在其它情况下会有关于完成SEND或RECEIVE或其它用户调用的相关信息 。会提供下面的几种消息:
本地连接名 都提供
响应串 都提供
缓冲区地址 发送和接收
字节记数 接收
Push标记 接收
Urgent标记 接收

TCP和下层接口
TCP实际上调用下层服务才能在网络上传输数据,在互联网上我们通常认为TCP的下层是IP协议 。假如下层是IP层,它提供一些类于服务类型和生存时间的参数 。TCP使用这些参数的如下设置:
Type of Service = Precedence: routine, Delay: normal, Throughput: normal, Reliability: normal;或是数字00000000 。
Time to Live = 一分钟,或是数字00111100 。

推荐阅读