TCP協議細節學習

2021-09-23 05:54:05 字數 1792 閱讀 4632

tcp協議中並不包含ip資訊,ip資訊是在第三層處理的,tcp中處理的是埠資訊

( 65553 * 8 ) / ( 100 * 1024 * 1024 ) ≈ 0.005(s)
在100m網路下傳輸一幀就需要5ms,也就是說這5ms其他程序傳送不了任何資料。如果是早先的**撥號,網速只有2m的情況下:

( 65553 * 8 ) / ( 2 * 1024 * 1024 ) ≈ 0.100(s)
100ms,這簡直是噩夢。其實這就像紅綠燈,時間要設定合理,交替通行,不然同乙個方向如果一直是綠燈,那麼另乙個方向就要堵成翔了。

既然大了不行,那設定小一點可以麼?

假設mtu值設定為100,那麼單個幀傳輸的時間,在2mbps頻寬下需要:

( 100 * 8 ) / ( 2 * 1024 * 1024 ) * 1000 ≈ 5(ms)
時間上已經能接受了,問題在於,不管mtu設定為多少,乙太網頭幀尾大小是固定的,都是14 + 4,所以在mtu為100的時候,乙個乙太網幀的傳輸效率為:

( 100 - 14 - 4 ) / 100 = 82%
寫成公式就是:( t - 14 - 4 ) / t,當t趨於無窮大的時候,效率接近100%,也就是mtu的值越大,傳輸效率最高,但是基於上一點傳輸時間的問題,來個折中的選擇吧,既然頭加尾是18,那就湊個整來個1500,總大小就是1518,傳輸效率:

1500 / 1518 =  98.8%
( 1518 * 8 ) / ( 100 * 1024 * 1024 ) * 1000 = 0.11(ms)
( 1518 * 8 ) / ( 2 * 1024 * 1024 ) * 1000 = 5.79(ms)
總體上時間都還能接受

因此,1500,是乙個折中的結果而已,這就是為啥路由器上一般都設定成這個值。

另外,如果使用pppoe協議(adsl),就需要設定成更小的值,為啥呢,。

pppoe協議頭資訊為:

| ver(4bit) | type(4bit) | code(8bit) | session-id(16bit) | length(16bit) |
這裡總共是48位,也就是6個位元組,那麼另外2個位元組是什麼呢?答案是ppp協議的id號,占用兩個位元組,所以在pppoe環境下,最佳mtu值應該是:1500 - 4 - 2 = 1492

說回來,mtu的值的計算,需要從1500中減去ip資料報包頭的大小20bytes和tcp資料段的包頭20bytes,最後就得到了1460。

tcp連線是全雙工的,即一端接收到fin報時,對端雖然不再能傳送資料,但是可以接收資料,所以需要兩邊都關閉連線才算完全關閉了這條tcp連線。

主動關閉的一方收到對端發出的fin報之後,就從fin-wait-2狀態切換到time-wait狀態了,再等待2msl時間才再切換到closed狀態。這麼做的原因在於:

net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將time-wait sockets重新用於新的tcp連線,預設為0,表示關閉。

net.ipv4.tcp_tw_recycle = 1 表示開啟tcp連線中time-wait sockets的快速**,預設為0,表示關閉。

net.ipv4.tcp_max_tw_buckets = 5000表示系統同時保持time_wait套接字的最大數量,如果超過這個數字,time_wait套接字將立刻被清除並列印警告資訊。預設為180000,改為5000。

TCP協議學習筆記

tcp 面向連線的可靠的傳輸層協議,基於資料流 位元組流 rfc編號。特點 超時重傳 解決亂序 20,21 ftp檔案傳輸 22 ssh,遠端登入,telnet的替代品 80 http,網路服務 443 https,安全的web ssl tls之上的http inetd internet daemo...

TCP協議的學習1

朱老師物聯網大講堂 學習筆記 直接使用朱老師課上筆記 3.9.2.tcp協議的學習1 3.9.2.1 關於tcp理解的重點 1 tcp協議工作在傳輸層,對上服務socket介面,對下呼叫ip層 2 tcp協議面向連線,通訊前必須先3次握手建立連線關係後才能開始通訊。3 tcp協議提供可靠傳輸,不怕丟...

HTTP協議細節

參考文章 一 http簡介 是超文字傳輸協議 hyper text transfer protocol 的縮寫,是從全球資訊網伺服器傳輸超文字到本地瀏覽器的傳送協議。二 http的報文結構 返回結果的 http 狀態碼 狀態碼負責表示客戶端 http 請求的返回結果 標記伺服器端的處理是否正常 通知...