Provided by:
manpages-zh_1.5.1-2_all 
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) 连接建立的新套接字。
一个已揪过 accept 或 connect
成功调用的套接字表示它已完全明确,可以进行数据传送。
在侦听状态或尚未建立连接的网络接口之间数据传送将不能进行。
Linux 2.2 支持 RFC1323 TCP 高性能扩展。这包括采用大 TCP 数据滑移
窗以支持高延时或高带宽下的多连接。为实现这些功能,必须增加接
收与发送的数据缓存区。它们可以使用 net.core.wmem_default 和
net.core.rmem_default sysctl 进行全局设定,或用 SO_SNDBUF 和 SO_RCVBUF
套接字选项对套接字进行单独设定。 套接字缓存区的最大尺寸,受到由全局变量
net.core.rmem_max 和 net.core.wmem_max 两个 sysctl
限制。详细细节,请参见 socket(7).
TCP 支持紧急数据。紧急数据用来通知接收方,在数据流中有需要尽快处理
的重要信息。发送紧急数据,需在 send(2). 中指定 MSG_OOB
选项。当紧急数据接收后,内核发送 SIGURG 信号到读进程或者那些用 ioctl
设置了 FIOCSPGRP 或 FIOCSETOWN 套接字的进程或进程组. 当打开了
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
一段时间后,另一端不确认重发数据。
EAFNOTSUPPORT
在 sin_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