other languages
other sections
TCP(7) | Linux Programmer's Manual | TCP(7) |
NAME¶
tcp - 傳輸控制協議 (TCP)總纜 SYNOPSIS¶
#include <sys/socket.h>描述 DESCRIPTION¶
本協議是對 RFC973, RFC1122 和 RFC2001 定義的協議 及其 NewReno 和 SACK 擴充部份實現的。 它在建立在網際網路協議 ip(7) 之上的兩個套接字之間提供了可靠的面向數據流的全雙工連接。 TCP 協議確保了數據按序到達並在數據包丟失時自動重發。 它產生和校驗每個數據包的校驗和 (checksum) 用以捕捉數據傳輸時錯誤。TCP 不保留記錄的上下限。地址格式 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 堆棧定義不同.已知錯誤 ERRORS¶
- EPIPE
- 另一端意外關閉了套接字連接或對一個關閉了的套接字進行讀操作。
- ETIMEDOUT
- 一段時間後,另一端不確認重發數據。
- EAFNOTSUPPORT
- 在 sin_family 傳遞套接字地址類型而不是在 AF_INET中的。
不足之處 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).[中文版維護人]¶
LetBright <letbright@netease.com>[中文版最新更新]¶
2000/10/21《中國linux論壇man手冊頁翻譯計劃》:¶
http://cmpp.linuxforum.net25 Apr 1999 | Linux Man Page |