促进高效数据传输的TCP_IP选项.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
促进高效数据传输的TCP_IP选项.pdf

促进高效数据传输的TCP/IP选项 来源:刷钻 / TCP/IP数据传输 TCP/IP网络的数据传输通常建立在数据块的基础之上。从程序 员的观点来看,发送数据意味着发出(或者提交)一系列“发送数据 块”的请求。在系统级,发送单个数据块可以通过调用系统函数write() 或者sendfile() 来完成。在网络级可以看到更多的数据块,通常把 它们叫做帧,帧再被包装上一定字节长度的报头然后通过线路在网络 上传输。帧及其报头内部的信息是由若干协议层定义的,从OSI参考 模型的物理层到应用层都可能会牵扯到。 因为在网络连接中是由程序员来选择最适当的应用协议,所以网 络包的长度和顺序都在程序员的控制之下。同样的,程序员还必须选 择这个协议在软件中得以实现的方式。TCP/IP协议自身已经有了多 种可互操作的实现,所以在双方通信时,每一方都有它自身的低级行 为,这也是程序员所应该知道的情况。通常情况下,程序员不必关心 操作系统和网络协议栈发送和接收网络数据的方法。系统内置算法定 义了低级的数据组织和传输方式;然而,影响这些算法的行为以及对 网络连接施加更大强度控制能力的方法也是有的。例如,如果某个应 用协议使用了超时和重发机制,程序员就可以采取一定措施设定或者 获取超时参数。 他或她还可能需要增加发送和接收缓冲区的大小来保证网络上 的信息流动不会中断。改变TCP/IP协议栈行为的一般的方法是采用 所谓的TCP/IP选项。下面就让我们来看一看你该如何使用这些选项 来优化数据传输。 TCP/IP选项 有好几种选项都能改变TCP/IP协议栈的行为。使用这些选择能 对在同一计算机上运行的其他应用程序产生不利的影响,因此普通用 户通常是不能使用这些选项的(除了root用户以外)。我们在这里主 要讨论能改变单个连接操作(用TCP/IP的术语来说就是套接字)的 选项。 ioctl风格的getsockopt()和setsockopt()系统函数都提供了 控制套接字行为的方式。比方说,为了在Linux上设置TCP_NODELAY 选项,你可以如下编写代码: intfd, on = 1; … /* 此处是创建套接字等操作,出于篇幅的考虑省略*/ … setsockopt (fd, SOL_TCP, TCP_NODELAY, on, sizeof (on)); 尽管有许多TCP选项可供程序员操作,而我们却最关注如何处置其中 的两个选项,它们是TCP_NODELAY 和 TCP_CORK,这两个选项都对网 络连接的行为具有重要的作用。许多UNIX系统都实现了TCP_NODELAY 选项,但是,TCP_CORK则是Linux系统所独有的而且相对较新;它 首先在内核版本2.4上得以实现。此外,其他UNIX系统版本也有功 能类似的选项,值得注意的是,在某种由 BSD 派生的系统上的 TCP_NOPUSH选项其实就是TCP_CORK的一部分具体实现。 TCP_NODELAY和TCP_CORK基本上控制了包的“Nagle化”,Nagle 化在这里的含义是采用Nagle算法把较小的包组装为更大的帧。John Nagle是Nagle算法的发明人,后者就是用他的名字来命名的,他在 1984年首次用这种方法来尝试解决福特汽车公司的网络拥塞问题(欲 了解详情请参看IETF RFC 896)。他解决的问题就是所谓的silly window syndrome ,中文称“愚蠢窗口症候群”,具体含义是,因为 普遍终端应用程序每产生一次击键操作就会发送一个包,而典型情况 下一个包会拥有一个字节的数据载荷以及40个字节长的包头,于是 产生4000%的过载,很轻易地就能令网络发生拥塞, Nagle化后来成 了一种标准并且立即在因特网上得以实现。它现在已经成为缺省配置 了,但在我们看来,有些场合下把这一选项关掉也是合乎需要的。现 在让我们假设某个应用程序发出了一个请求,希望发送小块数据。我 们可以选择立即发送数据或者等待产生更多的数据然后再一次发送 两种策略。如果我们马上发送数据,那么交互性的以及客户/服务器 型的应用程序将极大地受益。例如,当我们正在发送一个较短的请求 并且等候较大的响应时,相关过载与传输的数据总量相比就会比较 低,而且,如果请求立即发出那么响应时间也会快一些。以上操作可 以通过设置套接字的TCP_NODELAY选项来完成,这样就禁用了Nagle 算法。

文档评论(0)

书屋 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档