溫習tcp知識
什麼是TCP
TCP是一種面向連線(連線導向)的、可靠的、基於位元組流的運輸層(Transport layer)通訊協議;
在簡化的計算機網路OSI模型中,它完成第四層傳輸層所指定的功能,UDP是同一層內另一個重要的傳輸協議
全雙工模式
telnet/ssh/ftp/http都建立在TCP上
三次握手協議
建立連線
連線方 SYNà 接收方
ßSYN|ACK
ACK à
關閉連線
連線方 FINà 接收方
ßFIN|ACK
FIN|ACK à 接收方關閉
Time_wait後連線方自動關閉
MTU
對IP包分片,,通常與通訊介面有關;
乙太網最大MTU為1500,jumboFrames支援最大支援9000
round trip time(RTT):一個資料包從傳送到確認被接收所需時間
retransmission timeout(RTO):等待ACK超時重新傳輸資料包,最小200ms
TCP Receive Window(RWIN):—接收端在通知傳送者之前可接收的資料包大小;
視窗大小取決於接收端為此TCP連線分配的記憶體大小,同時傳送端也需相應設定,因為被髮送的資料在被確認接收前,一直快取在sender的記憶體中,以便接收失敗時重新傳送;
bandwidth-delay product(BDP):即在傳送和接收端之間正在傳輸的資料最大bit;高效能的網路都有很大的BDP,假定某鏈路頻寬10 Gbit/s,延遲RTT為0.5s,則其BDP= 0.5 * 10G bit= 5G bit= 625 MB;
效能限制
使用TCP通訊協議的鏈路,其吞吐量除了頻寬外,還受TCP視窗和網路延遲的影響;
根據木桶原理,任何一點都可能成為鏈路的瓶頸;
例如,某鏈路頻寬為1G,網路延遲為30ms,預設的TCP視窗為64KB;
則其實際吞吐量= min(band width, window size/round trip time) = min(1G, 65536/0.03) = min(1G, 17.4M) = 17.4M
為了提高頻寬利用率,需要提升window size或降低RTT,但是後者遠比前者困難的多;
提升window size需要用到TCP window scale option,可以讓TCP接收視窗超過65535位元組上限,Linux 2.6.8預設開啟此功能tcp_window_scaling;
根據上述公式可反推出TCP window size = bandwidth * RTT = 1 000 000 000 bps * 0.03 s= 30 000 000 bits/8 = 3 750 000 Bytes
注:這些buffer必須位於記憶體中,不可swap;而且傳送端也需要設定同樣大小的視窗,因為在確認接收前必須將其保留於記憶體中,以便傳送失敗時重發;
另外,任何的包丟失都會導致整個視窗所有包重新傳輸(除非使用了selective acknowledgement)
http://bradhedlund.com/2008/12/19/how-to-calculate-tcp-throughput-for-long-distance-links/
相應引數
[oracle@justin ipv4]$ pwd
/proc/sys/net/ipv4
tcp_window_scaling
啟用window scale,將視窗上限從64K提升為更高
tcp_moderate_rcvbuf
自動調整接收緩衝
[oracle@justin ipv4]$ more tcp_moderate_rcvbuf
1
tcp_wmem/tcp_rmem
設定TCP連線接收和傳送快取的大小,依次為min/default/max
[oracle@justin ipv4]$ more tcp_wmem
4096 16384 4194304
[oracle@justin ipv4]$ more tcp_rmem
4096 87380 4194304
tcp_sack
啟用selectivty acknowledgment,一旦發生丟包只需傳送丟失的部分,而不用將整個視窗的包全部重傳
[oracle@justin ipv4]$ more tcp_sack
1
tcp_syn_retries
定義SYN重試次數,可一定程度上防止syn flood攻擊
SYN flood攻擊
向伺服器發起tcp連線請求,在伺服器回發SYN+ACK之前斷線,導致伺服器在一定時間內重發直至超時;
如果惡意攻擊者大量模擬這種操作,伺服器會維護一個非常大的半連線列表從而耗盡CPU資源設定導致堆疊溢位;
[oracle@justin ipv4]$ more tcp_syn_retries
5
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-757720/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- rac基礎知識溫習(1)
- [TCP]轉TCP相關知識TCP
- TCP/IP 基礎知識TCP
- TCP與DUP知識點整理TCP
- TCP/IP 基礎知識總結TCP
- Android知識重溫之生命週期Android
- TCP/IP基礎知識&Oracle的TCP/IP網路應用TCPOracle
- 前端進階必須懂得TCP/IP知識前端TCP
- 《圖解TCP/IP》讀書筆記二:TCP/IP基礎知識圖解TCP筆記
- web知識學習Web
- 知識學習綜合
- 高併發架構的TCP知識介紹架構TCP
- 為什麼你得學些 TCP 的知識?TCP
- TCP學習筆記(二) 相識篇TCP筆記
- 知識圖譜學習
- JAVA學習知識集合Java
- 前端知識學習01前端
- 前端知識學習03前端
- Linux複習知識Linux
- linux 知識補習Linux
- MyBatis知識點學習MyBatis
- Java知識點學習Java
- 知識圖譜學習記錄--知識圖譜概述
- 初識TcpTCP
- 前端必須懂的計算機網路知識—(TCP)前端計算機網路TCP
- linux網路知識:TCP/IP設定內容(轉)LinuxTCP
- 【轉載】oc語言基礎知識全面 看完oc基礎教程後再溫習一遍C語言
- 前端鑑權知識學習前端
- 碎片化學習前端知識前端
- Bootstrap 個人學習知識點boot
- jQuery 個人學習知識點jQuery
- 逆向爬蟲知識學習爬蟲
- Java學習知識大綱Java
- java學習知識回顧Java
- 學習記錄 -- 知識點
- java知識點學習圖Java
- ExtJs 基本知識學習JS
- 【ASM學習】基礎知識ASM