专栏首页cwl_Java速读原著-TCP/IP(sock程序)

速读原著-TCP/IP(sock程序)

sock程序

在本书中一直使用一个称为 s o c k的小测试程序,用来生成 T C P和U D P数据。它既可以用作一个客户进程,也可以用作一个服务器进程。有这样一个可以从外壳程序执行的测试程序,使我们避免了为每一个我们想要研究的特征编写新的客户和服务器 C程序。因为本书的目的是了解网络互联协议,而不是网络编程,所以在这个附录中我们只描述这个程序和它不同的选项。

有很多与s o c k功能类似的程序。J u e rgen Nickelsen写了一个称为s o c k e t的程序,Dave Yo s t写了一个称为s o c k i o的程序。两者都包含了很多类似的特征。s o c k程序的某些部分也受到了Mike Muuss和Terry Slattery所写的公开域t t c p程序的启发。 s o c k程序运行在以下四种模式之一:

  1. 交互式客户:默认模式。程序和一个服务器相连,然后将标准输入的数据传给服务器,再将从服务器那里接收到的数据复制到标准输出。如图C - 1所示。

我们必须指明服务器主机的名字和想要连接的服务的名字。主机可指明为点分十进制数,服务可指明为一个整数的端口号。从 s u n到b s d i与标准的e c h o服务器(1 . 1 2节)相连,回显我们键入的每一个字符:

  1. 交互式服务器:指明-s选项。需要指明服务名字(或端口号):

程序等待一个客户的连接请求,然后将标准输入复制给客户,将从客户接收到的东西复制到标准输出。在命令行中,端口号之前可以有一个因特网地址,用来指明接收哪一个本地接口上的连接:

默认的模式是接受任何一个本地接口上的连接请求。

  1. 源客户:指明- i选项。在默认情况下,将一个 1 0 2 4字节的缓存写到网络中,写 1 0 2 4次。-n选项和-w选项可以改变默认值。例如,

把1 2个缓存,每个包含4 0 9 6字节的数据,送给主机b s d i上的d i s c a r d服务器。

  1. 接收器服务器:指明-i选项和-s选项。从网络中读数据然后扔掉。这些例子都使用了T C P(默认情况),-u选项指明使用U D P。s o c k程序有许多选项,用于对程序的运行提供更好的控制。我们需要使用这些选项来产生本书中用到的所有测试条件。
-b n 将n绑定为客户的本地端口号(在默认情况下,系统给客户分配一个临
时的端口号)。 -c 将从标准输入读入的新行字符转换为一个回车符和一个换行符。类似
地,当从网络中读数据时,将〈回车,换行〉序列转换为新行字符。
很多因特网应用需要 NVT ASCII(2 6 . 4节),它使用回车和换行来终止
每一行。
-f a . b . c . d . p
为一个U D P端点指明远端的I P地址(a . b . c . d)和远端的端口号(p)。 -h 实现T C P的半关闭机制( 1 8 . 5节)。即,当在标准输入中读到一个文件
结束符时并不终止。而是在 T C P连接上发送一个半关闭报文,继续从
网络中读报文直到对方关闭连接。
-i 源客户或接收器服务器。向网络写数据(默认),或者如果和 -s 选项一
起用,从网络读数据。 - n选项可以指明写(或读)的缓存的数目, - w
选项可以指明每次写的大小, -r 选项可以指明每次读的大小。
-n n 当和-i 选项一起使用时, n指明了读或写的缓存的数目。 n的默认值是
1 0 2 4。 -p n 指明每个读或写之间暂停的秒数。这个选项可以和源客户(- i)或接
收器服务器(- i s)一起使用作为每次对网络读写时的延迟。参考- P选
项,实现在第1次读或写之前暂停。
-q n 为T C P服务器指明挂起的连接队列的大小: T C P将为之进行排队的、已
经接受的连接的数目(图1 8 - 2 3)。默认值是5。 -r n 和- i s选项一起使用,n指明每次从网络中读数据的大小。默认是每次读
1 0 2 4字节。
-s 作为一个服务器,而不是一个客户。
-u 使用U D P,而不是T C P。 -v 详细模式。在标准差错上打印附加的细节信息(如客户和服务器的临
时端口号)。 -w n 和- i选项一起使用, n指明每次从网络中写数据的大小。默认值是每次
写1 0 2 4字节。
-A 使能 S O _ R E U S E A D D R插口选项。对于 T C P,这个选项允许进程给自
己分配一个处于2 M S L等待的连接的端口号。对于 U D P,这个选项支持
多播,它允许多个进程使用同一个本地端口来接收广播或多播的数据
报。
-B 使能S O _ B R O A D C A S T插口选项,允许向一个广播 I P地址发送U D P数
据报。
-D 使能S O _ D E B U G插口选项。这个选项使得内核为这个 T C P连接维护另
外的调试信息(A . 6节)。以后可以运行t r p t ( 8 )程序输出这个信息。
-E 如果实现支持,使能 I P _ R E C V D S TA D D R插口选项。这个选项用于
U D P服务器,用来打印接收到的 U D P数据报的目的I P地址。
-F 指明一个并发的T C P服务器。即,服务器使用 f o r k函数为每一个客户连
接创建一个新的进程。
-K 使能T C P的S O _ K E E PA L I V E插口选项(第2 3章)。 -L n 把一个T C P端点的拖延时间 (linger time)(S O _ L I N G E R)设置为n。一
个为0的拖延时间意味着当网络连接关闭时,正在排队等着发送的任何
数据都被丢弃,向对方发送一个重置报文( 1 8 . 7节)。一个正的拖延时
间(百分之一秒)是关闭网络连接必须等待的将所有正在排队等着发
送的数据发送完并收到确认的时间。关闭网络连接时,如果这个拖延
定时器超时,挂起的数据没有全部发送完并收到确认,关闭操作将返
回一个差错信息。
-N 设置T C P _ N O D E L AY插口选项来禁止N a g l e算法(1 9 . 4节)。 -O n 指明一个T C P服务器在接受第一个客户连接之前暂停的秒数。
-P n 指明在第一次对网络进行读或写之前暂停的秒数。这个选项可以和接
收器服务器(- i s)一起使用,完成在接受了客户的连接请求之后但在
执行从网络中第一次读之前的延迟。和接收源(- i)一起使用时,完
成连接建立之后但第一次向网络写之前的延迟。参看- p选项,实现在
接下来的每一次读或写之间进行暂停。
-Q n 指明当一个 T C P客户或服务器收到了另一端发来的一个文件结束符,
在它关闭自己这一端的连接之前需要暂停的秒数。
-R n 把插口的接收缓存( S O _ R C V B U F插口选项)设置为 n。这可以直接影
响T C P通告的接收窗口的大小。对于 U D P,这个选项指明了可以接收
的最大的U D P数据报。
-S n 把插口的发送缓存( S O _ S N D B U F插口选项)设置为 n。对于U D P,这
个选项指明了可以发送的最大的 U D P数据报。
-U n 在向网络写了数字 n后进入T C P的紧急模式。写一个字节的数据以启动
紧急模式(2 0 . 8节)。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 速读原著-TCP/IP(TCP 选项)

    T C P首部可以包含选项部分(图 1 7 - 2)。仅在最初的T C P规范中定义的选项是选项表结束、无操作和最大报文段长度。在我们的例子中,几乎每个 S Y...

    cwl_java
  • 数据库PostrageSQL-短选项

    为了方便起见,系统中还为一些参数提供了单字母的命令行选项开关。它们在Table 19.2中描述。其中一些选项是由于历史原因而存在,并且它们作为一个单字母选项存在...

    cwl_java
  • 速读原著-TCP/IP(TCP的未来和性能)

    T C P已经在从1200 b/s的拨号S L I P链路到以太数据链路上运行了许多年。在 8 0年代和9 0年代初期,以太网是运行 T C P / I P最主...

    cwl_java
  • python: sort, sorted, reverse

    python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加...

    昱良
  • DartVM服务器开发(第七天)--WebSocket

    可以看到我们熟悉的dart介绍,它被用于web、服务器、移动开发和物联网等领域的开发,等等,这里有一个目前比较热门的一个名词,物联网、对的,dart支持物...

    rhyme_lph
  • HDFS读写流程(重点)

    ①服务端启动HDFS中的NN和DN进程 ②客户端创建一个分布式文件系统客户端,由客户端向NN发送请求,请求上传文件 ③NN处理请求,检查客户端是否有权限上传...

    爱学习的孙小白
  • python中列表的sort方法使用详解

    一、基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。 排序,数字、字符串按照ASC...

    用户1214487
  • ECMA-262-3 详解:1、执行上下文

    从来没有深入了解ECMA,网上找了一下,发现早在2010年就有大佬 Dmitry Soshnikov[1] 总结了ECMA中的核心内容,我这里只是翻译记录,加深...

    踏浪
  • LCD显示异常分析——开机闪现花屏【转】

    最近在工作中,有同事遇到LCD开机瞬间会闪现雪花屏的问题,而这类问题都有个共同点,那就是都发生在带GRAM的屏上,同样的问题,在休眠唤醒时也会出现。

    233333
  • Pandas|排序,分组,组内排序

    01 Pandas的基本排序 Pandas的主要数据结构有2个:DataFrame,Series,针对这两个类型的排序Demo如下: #coding=utf-...

    double

扫码关注云+社区

领取腾讯云代金券