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程序运行在以下四种模式之一:
- 交互式客户:默认模式。程序和一个服务器相连,然后将标准输入的数据传给服务器,再将从服务器那里接收到的数据复制到标准输出。如图C - 1所示。
我们必须指明服务器主机的名字和想要连接的服务的名字。主机可指明为点分十进制数,服务可指明为一个整数的端口号。从 s u n到b s d i与标准的e c h o服务器(1 . 1 2节)相连,回显我们键入的每一个字符:
- 交互式服务器:指明-s选项。需要指明服务名字(或端口号):
程序等待一个客户的连接请求,然后将标准输入复制给客户,将从客户接收到的东西复制到标准输出。在命令行中,端口号之前可以有一个因特网地址,用来指明接收哪一个本地接口上的连接:
默认的模式是接受任何一个本地接口上的连接请求。 - 源客户:指明- 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服务器。 - 接收器服务器:指明-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节)。