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

NAME

       tcp - 傳輸控制協議 (TCP)

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

yz DESCRIPTION
       本協議是對  RFC973,  RFC1122 和 RFC2001 定義的協議 及其 NewReno 和 SACK
       擴充部份實現的。      它在建立在網際網路協議      ip(7)       之上的兩-
       荇M接字之間提供了可靠的惘V數據流的全雙工連接。                      TCP
       協議確保了數據按序到達並在數據包丟失時自動奏o。         它產生和校驗每-
       蚍琤]的校驗和          (checksum)         用以捕捉數據傳輸時錯誤。TCP
       不保留記錄的上下。

       初始的   TCP   接口不包含遠端或本地址並且沒有規定明確。   在產生一茈X站
       (outgoing)  TCP  連接時使用  connect(2)  來與另荇M接字建立一蚨蘢翿竣f。
       在接收一茪J站       (incoming)        連接時,套接字使用        bind(2)
       先取得本地地址和端口,然後調用     listen(2)     使套接字進入偵聽狀態。
       隨後可以用 accept(2).  接受為每一茪J站 (incoming)  連接建立的新套接字。
       一茪w經經過               acceptconnect
       成功調用的套接字表示它已完全明確,可以進行數據傳送。
       在偵聽狀態或尚未建立連接的網路接口之間數據傳送將不能進行。

       Linux  2.2  支持  RFC1323  TCP  高性能擴展。這包括採用大  TCP  數據滑移
       窗以支持高延時或高帶寬下的多連接。為實現這些功能,必須增加接
       收與發送的數據緩存區。它怚i以使用        net.core.wmem_defaultnet.core.rmem_default sysctl 進行全局設定,或用 SO_SNDBUFSO_RCVBUF
       套接字選項對套接字進行單獨設定。 套接字緩存區的最大尺寸,受到由全局變量
       net.core.rmem_maxnet.core.wmem_max 兩 sysctl  制。詳細細節,請參見
       socket(7).

       TCP  支持緊急數據。緊急數據用來通知接收方,在數據流中有需n盡快處理 的-
       n信息。發送緊急數據,需在        send(2).         中指定        MSG_OOB
       選項。當緊急數據接收後,核心發送  SIGURG  信號到讀進程或者那些用  ioctl
       設置了  FIOCSPGRPFIOCSETOWN   套接字的進程或進程組.   當打開了
       SO_OOBINLINE   套接字選項,   那麼緊急數據被放入普通數據流中。   (可以用
       SIOCATMARK  ioctl  來測試),  否則只有設置了  sendmsg(2)  中的   MSG_OOB
       標誌時,數據才能被接收。

a} ADDRESS FORMATS
       TCP  是建立在  IP  之上(參見  ip(7)).  ip(7) 定義定義的地址格式也適用於
       TCP.  TCP只支持點對點通訊,不支持全局及多址廣播。

t 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
              規定強〡鶶洫M接字前,等待最後結束數據包的秒數。   這確實與   TCP
              協議中有關規定相違I。 但這是防止拒絕服務攻擊所n求的。

       tcp_keepalive_probes
              丟棄數據包前,進行最大     TCP     保持連接偵測.    保持連接僅在
              SO_KEEPALIVE 套接字選項被打開時才被發送.

       tcp_keepalive_time
              從不再傳送數據到向連接上發送保持連接信號之間所需的秒數,  預設為
              10800 秒(3 小時)。

       tcp_max_ka_probes
              在一定時間發送保持連接時間偵測包的數量。為防止突發信號,此
              ㄘy設置太高。

       tcp_stdurg
              使 TCP 緊急指針字段遵循在 RFC973  協議中的嚴格解釋。預設情況下,
              緊急指針字段使用與  BSD  相相容,指針指向緊急數據後的第一茼r節。
              在   RFC973    協議中是指向緊急數據後的最後一茼r節。打開這一選項
              可能造成操作互換性問題。

       tcp_syncookies
              打開  TCP 同步標簽(syncookie),核心必須打開了 CONFIG_SYN_COOKIES
              項進行編譯.   同步標簽(Syncookie)防止一荇M接字在有過多試圖連接到
              達時的過載。當使用同步標簽(syncookie)時,客戶機可能探測不到  一-
              荈W時時間短的過載主機。

       tcp_max_syn_backlog
              每荓竣f中待發數據隊列 (backlog) 長度。Linux 2.2 中,在  listen(2)
              中的定義只說明了已建立的套接字中待發數據隊列(backlog)長度。  每-
              荌輕套接字的還未建立的套接字(在                        SYN_RECV
              狀態中的)的最大隊列長度用這            sysctl            設置。
              當更多的連接請求到達時,Linux
              系統將開始丟棄數據包。當同步標簽(syncookie)被設置成打開,
              數據包仍能被回應時,這蚧將被忽略。

       tcp_retries1
              定義放棄回應一 TCP 連接請求前發送姜晛H號的次數。

       tcp_retries2
              定義放棄在已建立通訊狀態下一 TCP 數據包前奏o的次數。

       tcp_syn_retries
              定義在放棄發送初始同步數據包(SYN            packet)到遠端主機前-
              姜晡漲蜈礙藀^出                                    錯消息,此-
              眸楔p於255。這僅對出站(outgoing)連接超時有效;
              對於進站(incoming)連接奏o數由 tcp_retries1 定義。

       tcp_retrans_collapse
              在奏o時試圖發送全尺寸數據包。      用來解決一些堆棧中的      TCP
              缺陷(BUG)。

f SOCKET OPTIONS
       設置或取得   TCP    接口選項,調用    getsockopt(2)    進行讀操作或調用
       setsockopt(2) 將接口系列選項參數傳送到 SOL_TCP 中去.另外,大多數 SOL_IP
       接口 選項對 TCP 接口也適用。更多資料,請參見 ip(7).

       TCP_NODELAY
              關閉  Nagle   算法。這意味著數據包將盡可能快地被發送而沒有因有網
              絡中更多的數據包造成的延時,期待一蚞蒱磳靰漸牯蜈郅x。

       TCP_MAXSEG
              設置或接收最大出站   TCP   數據段尺寸。如果這蚇龠策b建立連接前的
              設置,它將改變發送到另一端初始信息包中的  MSS  C這蚧大於   MTU
              接口N被忽略而不起作用。

       TCP_CORK
              設置此項將不發送部份幀。所有排隊的部份幀只在此項清除後,
              才能發送。在調用                                     sendfile(2)
              前準備數據報頭或對網路吞吐量進行優化有用處。        此選項不能與
              TCP_NODELAY 聯用.

JXr IOCTLS
       這些 ioctl 可以用 ioctl(2) 進行訪問。正確調用句法為:

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

       FIONREAD
              返回接收緩存中排隊的未讀數據的數量。           變量參數是指向一-
              蚞蒱澈針。

       SIOCATMARK
              如果使用者程式已經接收了所有緊急數據,此項返回        0。它與
              SO_OOBINLINE 聯用。變量參數是對測試結果,指向一蚞蒱澈針。

       TIOCOUTQ
              返回在接口(socket)發送隊列中待發送數據數,       該指針返回是一-
              蚞蒱。

XBz ERROR HANDLING
       當網路發生錯誤時,TCP           協議將嘗試奐s發送數據包,           當-
       奏o一定失敗次數後,產生超時錯 ETIMEDOUT 或報告在此連接上最後出錯消息。

       有時程式需n更快地偵測到出錯狀態。這可以通過打開      SOL_IP      級別的
       IP_RECVERR     接口選項。當此項打開後,所有入站     (incoming)     錯誤
       被立即送到使用者程式中。小心使用該選項-它使     TCP      協議對路由的改
       變和其他正常網路狀態變化的容錯性下陛C

` NOTES
       當建立一茬s接時發生錯誤引發一蚢    SIGPIPE   接口寫操作,此操作   僅當
       SO_KEEPOPEN 接口選項被設置時才能進行。

       TCP 並不具有真正的額外頻帶(out-of-band)數據; 雖然它可以有緊  急數據。在
       Linux                      中這意味著如果有其他端發送緊急數據時,舊的緊
       急數據將被當作普通數據插入數據流中。(即使                  SO_OOBINLINE
       S有被設置).這與基於 BSD 堆棧定義不同.

       預設狀態下,Linux   使用與   BSD  相容的緊急數據指針字段。這與  RFC1122
       協議相違I,   但這是與其他堆棧協議相互操作性所n求。它可以用   tcp_stdurg
       sysctl 加以改變.

w~ ERRORS
       EPIPE  另一端意外關閉了套接字連接或對一蚚鶶洶F的套接字進行讀操作。

       ETIMEDOUT
              一段時間後,另一端不確認奏o數據。

       EAFNOTSUPPORTsin_family 傳遞套接字地址類型而不是在 AF_INET中的。

       任何定義為 ip(7) 出錯或普通套接字出錯可能返回為 TCP 出錯.

B BUGS
       不是所有的錯誤都列入了文件。

       沒有描z有關透明代理的選項

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

S SEE ALSO
       socket(7), socket(2), ip(7), sendmsg(2), recvmsg(2).
       RFC793 協議中對 TCP 有關描z.
       RFC1122 協議中對 TCP n求和一份關於 Nagle 算法描z。
       RFC2001 協議中一些 TCP 算法。

[]
       LetBright <letbright@netease.com>

[]
       2000/10/21

mlinuxan:
       http://cmpp.linuxforum.net