《TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》 —1.4 T/TCP上的客户-服务器

举报
华章计算机 发表于 2019/11/19 20:49:54 2019/11/19
【摘要】 本节书摘来自华章计算机《TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》一书中第1章,第1.4节,作者是[美]W. 理查德·史蒂文斯(W.Richard Stevens) ,胡谷雨 吴礼发 等译 谢希仁 校。

1.4   T/TCP上的客户-服务器

我们的T/TCP客户-服务器的源代码和上一节的TCP客户-服务器的源代码略有不同,以便能够利用T/TCP的优势。图1-10给出了T/TCP上的客户程序。

image.png


图1-10   T/TCP上的事务客户程序

image.png

图1-10   (续)

1. 创建TCP插口

10-15   对socket函数的调用与TCP上的客户程序一样,在Internet插口地址结构中同样也填入服务器的IP地址和端口号。

2. 向服务器发送请求

17-19   T/TCP上的客户程序不调用connect函数,而是直接调用标准的sendto函数,该函数向服务器发送请求,同时与服务器建立起连接。此外,我们还用sendto函数的第4个参数指定了一个新的标志MSG_EOF,用以告诉系统内核数据已经发送完毕。这样做就相当于图1-5中的调用shutdown函数,向服务器发送一个FIN。MSG_EOF标志是T/TCP实现中新加入的,不要把它与MSG_EOR标志混淆,后者是基于记录的协议(比如OSI的运输层协议)中用来标志记录结束的。我们将在图1-12中看到,调用sendto函数的结果是客户端的SYN、客户的请求以及FIN都包含在一个报文段中发送出去。换言之,调用一个sendto函数就实现了connect、write和shutdown三个函数的功能。

3. 读服务器的应答

20-21   读服务器的应答还是用read_stream函数,与前文讨论过的TCP上的客户程序一样。

图1-11所示的是T/TCP上的服务器程序。

image.png

图1-11   T/TCP上的事务服务器程序

image.png

图1-11   (续)

这个程序与图1-7中TCP上的服务器程序几乎完全一样:对socket函数、bind函数、listen函数、accept函数和read_stream函数的调用都一模一样。唯一的不同在于T/TCP上的服务器发送应答时调用的是send函数,而不是write函数。这样就可以设置MSG_EOF标志,从而可以将服务器的应答和服务器的FIN合并在一起发送。

图1-12所示的是T/TCP上客户-服务器事务的时序图。

T/TCP上的客户测量到的事务时间和UDP上的几乎一样(图1-4):RTT + SPT。我们估计T/TCP上的时间会比UDP上的时间稍长一点,因为TCP需要处理的事情比UDP要多一些,而且通信双方都要执行两次read操作分别读数据和文件结束标志(而UDP环境下双方都只要调用一次recvfrom函数即可)。但是双方主机上这一段额外的处理时间比一次网络往返时间RTT要小得多(我们在1.6节中给出了一些测试数据,用来比较UDP、TCP和T/TCP上的客户-服务器事务的差别)。由此我们可以得出结论:T/TCP上的事务时间要比TCP上的事务小大约一次网络往返时间RTT。T/TCP中省下来的这个RTT来自于TAO,即TCP加速打开(TCP Accelerated Open)。这种方式跳过了三次握手的过程。下面两章中我们将说明其实现方法,在4.5节中我们还将证明这样做的正确性。

UDP上的事务需要两个分组来传送,T/TCP上的事务需要3个分组,而TCP上的事务则需要9个分组(这些数字的前提是没有分组丢失)。因此,T/TCP不仅缩短了客户端的事务处理时间,而且也减少了网络上传送的分组数。我们希望减少网络上的分组数,因为路由器往往受限于它们可以转发的分组数,而不是每个分组的长度。

概括地讲,T/TCP以一个额外的分组和可以忽略的延续时间为代价,同时具有了可靠性和适应性这两个对网络应用至关重要的特性。

image.png

图1-12   T/TCP上客户-服务器事务的时序图


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。