Provided by: manpages-zh_1.5-1_all bug

NAME

       tcp - 传输控制幸 (TCP)

 SYNOPSIS
       #include <sys/socket.h>
       #include <netinet/in.h>
       tcp_socket = socket(PF_INET, SOCK_STREAM, 0);

 DESCRIPTION
       本幸槭嵌  RFC973,  RFC1122  和  RFC2001 定义的幸 及其 NewReno 和 SACK
       扩充部份实现的。               它在建立在互联网幸                ip(7)
       之上的两个套接字之间提供了可靠的面向数据流的全双工连接。     TCP     -
       议确保了数据按序到达并在数据包丢失时自动重发。
       它产生和校验每个数据包的校验和  (checksum)  用以捕捉数据传输时错误。TCP
       不保留记录的上下限。

       初始的  TCP   接口不包含远端或本地址并且没有规定明确。   在产生一个出站
       (outgoing)  TCP  连接时使用 connect(2) 来与另个套接字建立一个网络接口。
       在接收一个入站       (incoming)       连接时,套接字使用        bind(2)
       先取得本地地址和端口,然后调用     listen(2)     使套接字进入侦听状态。
       随后可以用 accept(2).  接受为每一个入站 (incoming) 连接建立的新套接字。
       一个已揪过                acceptconnect
       成功调用的套接字表示它已完全明确,可以进行数据传送。
       在侦听状态或尚未建立连接的网络接口之间数据传送将不能进行。

       Linux  2.2  支持  RFC1323  TCP  高性能扩展。这包括采用大  TCP  数据滑移
       窗以支持高延时或高带宽下的多连接。为实现这些功能,必须增加接
       收与发送的数据缓存区。它们可以使用       net.core.wmem_defaultnet.core.rmem_default sysctl 进行全局设定,或用 SO_SNDBUFSO_RCVBUF
       套接字选项对套接字进行单独设定。 套接字缓存区的最大尺寸,受到由全局变量
       net.core.rmem_maxnet.core.wmem_max      两个       sysctl
       限制。详细细节,请参见 socket(7).

       TCP      支持紧急数据。紧急数据用来通知接收方,在数据流中有需要尽快处理
       的重要信息。发送紧急数据,需在      send(2).       中指定       MSG_OOB
       选项。当紧急数据接收后,内核发送  SIGURG  信号到读进程或者那些用  ioctl
       设置了  FIOCSPGRPFIOCSETOWN   套接字的进程或进程组.   当打开了
       SO_OOBINLINE   套接字选项,   那么紧急数据被放入普通数据流中。   (可以用
       SIOCATMARK  ioctl  来测试),  否则只有设置了  sendmsg(2)  中的   MSG_OOB
       标志时,数据才能被接收。

 ADDRESS FORMATS
       TCP  是建立在  IP  之上(参见  ip(7)).  ip(7) 定义定义的地址格式也适用于
       TCP.  TCP只支持点对点通讯,不支持全局及多址广播。

 SYSCTLS
       可以通过访问   /proc/sys/net/ipv4/*   目录下的文件   或通过   sysctl(2)
       接口进行访问这些  sysctl.   此外大多数 IP sysctl 也同样适用于 TCP; 参见
       ip(7).

       tcp_window_scaling
              打开 RFC1323 幸橹 TCP 滑移数据窗尺寸调整.

       tcp_sack
              打开 RFC2018 幸橹 TCP 选择性确认.

       tcp_timestamps
              打开 RFC1323 幸橹 TCP 时间戳.

       tcp_fin_timeout
              规定强迫关闭套接字前,等待最后结束数据包的秒数。 这确实与 TCP -
              议中有关规定相违背。 但这是防止拒绝服务攻击所要求的。

       tcp_keepalive_probes
              丢弃数据包前,进行最大     TCP     保持连接侦测.    保持连接仅在
              SO_KEEPALIVE 套接字选项被打开时才被发送.

       tcp_keepalive_time
              从不再传送数据到向连接上发送保持连接信号之间所需的秒数,  默认为
              10800 秒(3 小时)。

       tcp_max_ka_probes
              在一定时间发送保持连接时间侦测包的数量。为防止突发信号,此
              值不宜设置太高。

       tcp_stdurg
              使 TCP  紧急指针字段遵言  RFC973  幸橹械难细窠馐汀H笔∏榭鱿拢
              紧急指针字段使用与  BSD 相兼容,指针指向紧急数据后的第一个字节。
              在   RFC973    幸橹惺侵赶蚪艏笔莺蟮淖詈笠桓鲎纸凇4蚩庖谎∠
              可能造成操作互换性问题。

       tcp_syncookies
              打开  TCP 同步标签(syncookie),内核必须打开了 CONFIG_SYN_COOKIES
              项进行编译.  同步标签(Syncookie)防止一个套接字在有过多试图连接到
              达时的过载。当使用同步标签(syncookie)时,客户机可能探测不到
              一个超时时间短的过载主机。

       tcp_max_syn_backlog
              每个接口中待发数据队列 (backlog) 长度。Linux 2.2 中,在 listen(2)
              中的定义只说明了已建立的套接字中待发数据队列(backlog)长度。
              每个侦测套接字的还未建立的套接字(在                     SYN_RECV
              状态中的)的最大队列长度用这个            sysctl           设置。
              当更多的连接请求到达时,Linux
              系统将开始丢弃数据包。当同步标签(syncookie)被设置成打开,
              数据包仍能被回应时,这个值将被忽略。

       tcp_retries1
              定义放弃回应一个 TCP 连接请求前发送重试信号的次数。

       tcp_retries2
              定义放弃在已建立通讯状态下一个 TCP 数据包前重发的次数。

       tcp_syn_retries
              定义在放弃发送初始同步数据包(SYN
              packet)到远端主机前重试的次数并返回出
              错消息,此值必须小于255。这仅对出站(outgoing)连接超时有效;
              对于进站(incoming)连接重发数由 tcp_retries1 定义。

       tcp_retrans_collapse
              在重发时试图发送全尺寸数据包。      用来解决一些堆栈中的     TCP
              缺陷(BUG)。

 SOCKET OPTIONS
       设置或取得   TCP    接口选项,调用    getsockopt(2)    进行读操作或调用
       setsockopt(2) 将接口系列选项参数传送到 SOL_TCP 中去.另外,大多数 SOL_IP
       接口 选项对 TCP 接口也适用。更多资料,请参见 ip(7).

       TCP_NODELAY
              关闭  Nagle   算法。这意味着数据包将尽可能快地被发送而没有因有网
              络中更多的数据包造成的延时,期待一个整数表示的布尔标志。

       TCP_MAXSEG
              设置或接收最大出站   TCP  数据段尺寸。如果这个选项在建立连接前的
              设置,它将改变发送到另一端初始信息包中的 MSS 值。这个值大于  MTU
              接口值将被忽略而不起作用。

       TCP_CORK
              设置此项将不发送部份帧。所有排队的部份帧只在此项清除后,
              才能发送。在调用                                     sendfile(2)
              前准备数据报头或对网络吞吐量进行优化有用处。        此选项不能与
              TCP_NODELAY 联用.

 IOCTLS
       这些 ioctl 可以用 ioctl(2) 进行访问。正确调用句法为:

              int value;
              error = ioctl(tcp_socket, ioctl_type, &value);

       FIONREAD
              返回接收缓存中排队的未读数据的数量。
              变量参数是指向一个整数的指针。

       SIOCATMARK
              如果用户程序已窘邮樟怂薪艏笔荩讼罘祷刂滴          0。它与
              SO_OOBINLINE 联用。变量参数是对测试结果,指向一个整数的指针。

       TIOCOUTQ
              返回在接口(socket)发送队列中待发送数据数,
              该指针返回是一个整数数值。

 ERROR HANDLING
       当网络发生错误时,TCP                         幸榻⑹灾匦路⑺褪莅
       当重发一定失败次数后,产生超时错                              ETIMEDOUT
       或报告在此连接上最后出错消息。

       有时程序需要更快地侦测到出错状态。这可以通过打开      SOL_IP     级别的
       IP_RECVERR     接口选项。当此项打开后,所有入站     (incoming)     错误
       被立即送到用户程序中。小心使用该选项-它使       TCP       幸槎月酚傻母
       变和其他正常网络状态变化的容错性下降。

 NOTES
       当建立一个连接时发生错误引发一个对  SIGPIPE   接口写操作,此操作   仅当
       SO_KEEPOPEN 接口选项被设置时才能进行。

       TCP  并不具有真正的额外频带(out-of-band)数据; 虽然它可以有紧 急数据。在
       Linux                      中这意味着如果有其他端发送紧急数据时,旧的紧
       急数据将被当作普通数据插入数据流中。(即使                  SO_OOBINLINE
       值没有被设置).这与基于 BSD 堆栈定义不同.

       缺省状态下,Linux 使用与 BSD  兼容的紧急数据指针字段。这与  RFC1122  -
       议相违背,    但这是与其他堆栈幸橄嗷ゲ僮餍运蟆K梢杂   tcp_stdurg
       sysctl 加以改变.

 ERRORS
       EPIPE  另一端意外关闭了套接字连接或对一个关闭了的套接字进行读操作。

       ETIMEDOUT
              一段时间后,另一端不确认重发数据。

       EAFNOTSUPPORTsin_family 传递套接字地址类型而不是在 AF_INET中的。

       任何定义为 ip(7) 出错或普通套接字出错可能返回为 TCP 出错.

 BUGS
       不是所有的错误都列入了文档。

       没有描述有关透明代理的选项

 VERSIONS
       有关  sysctl  是在  Linux  2.2  中新增的。  IP_RECVERR  是  Linux   2.2
       中的新特性。 TCP_CORK 在 2.2 中是新的内容.

 SEE ALSO
       socket(7), socket(2), ip(7), sendmsg(2), recvmsg(2).
       RFC793 幸橹卸 TCP 有关描述.
       RFC1122 幸橹卸 TCP 要求和一份关于 Nagle 算法描述。
       RFC2001 幸橹幸恍 TCP 算法。

[LetBright <letbright@netease.com>

[2000/10/21

linuxan:
       http://cmpp.linuxforum.net