TCP 7

中文man手册

目录

TCP

NAME
æ»ç¼ SYNOPSIS
æè¿° DESCRIPTION
å°åæ ¼å¼ ADDRESS FORMATS
ç³»ç»æ§å¶ SYSCTLS
æ¥å£é项 SOCKET OPTIONS
è¾å¥è¾åºæ§å¶å IOCTLS
åºéå¤ç ERROR HANDLING
éæ³¨ NOTES
å·²ç¥é误 ERRORS
ä¸è¶³ä¹å¤ BUGS
çæ¬ VERSIONS
åè§ SEE ALSO
[䏿çç»´æ¤äºº]
[ä¸æçææ°æ´æ°]
ãä¸å½linux论åmanæå页翻è¯è®¡åã:
è·

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 åè®®ä¸ç严格解éã缺çæåµä¸ï¼ ç´§æ¥æéåæ®µä½¿ç¨ä¸ BSD ç¸å¼å®¹ï¼æéæåç´§æ¥æ°æ®åç第ä¸ä¸ªåèã å¨ RFC973 åè®®ä¸æ¯æåç´§æ¥æ°æ®åçæåä¸ä¸ªåèãæå¼è¿ä¸é项 å¯è½é ææä½äºæ¢æ§é®é¢ã

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 åè®®ç¸è¿è, ä½è¿æ¯ä¸å¶ä»å æ åè®®ç¸äºæä½æ§æè¦æ±ãå®å¯ä»¥ç¨ 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

ãä¸å½linux论åmanæå页翻è¯è®¡åã:

http://cmpp.linuxforum.net

è·

æ¬é¡µé¢ä¸æçç±ä¸æ man æå页计åæä¾ã
䏿 man æå页计åï¼https://github.com/man-pages-zh/manpages-zh