tcp/ip 協議(上)

TCP/IP協議

TCP/IP 是一個協議族,也是按照層次劃分。共四層:應用層,傳輸層,互連網絡層,網絡接口層。
OSI網絡協議模型,是一個參考模型,而TCP/IP協議是事實上的標準。TCP/IP協議參考了OSI 模型,但是并沒有嚴格按照OSI規定的七層去劃分標準,而只劃分了四層,這樣會更簡單點,更實用。
TCP/IP協議和OSI模型也并不沖突,TCP/IP協議中的應用層協議,就對應于OSI中的應用層,表示層,會話層。
TCP/IP分層:


我們日常開發中涉及到的網絡請求比如http請求和socket都是應用層的,基于tcp協議的。雖然我們沒有必要去探究整個協議細節問題,但傳輸層tcp和udp的一些知識還是需要深入理解的。

http協議

Http協議是建立在TCP協議基礎之上的,當瀏覽器需要從服務器獲取網頁數據的時候,會發出一次Http請求。Http會通過TCP建立起一個到服務器的連接通道,當本次請求需要的數據完畢后,Http會立即將TCP連接斷開,這個過程是很短的。所以Http連接是一種短連接,常見應用場景是web請求,以及一些弱同步需求的場景,比如部分實時性要求不高的游戲。

TCP:傳輸控制協議

TCP是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。
面向連接: 面向連接意味著使用tcp的應用程序在傳輸數據前必須先建立連接,需要三次握手:


三次握手

客戶端主動發起連接,發送syn包,server受到包后,同時帶ACK標志和SYN標志。表示對剛才客戶端SYN報文的回應,seq表示序號,雙方發出序號的包不一樣,但一定是遞增的。ACK=x+1表示,已經收到了x包,期望下一個需要為x+1的包。client受到sever的syn報文,在回復一個ACK表示確認。

為什么必須是三次握手?

信道不可靠,數據傳輸要可靠。三次通信是理論上的最小值(我理解的實際上需要雙方互相確認,將SYN和ACK合并為一次了)。參照

可靠性:

1.確認:

接收方收到報文就會確認,發送方發送一段時間后沒有收到確認就重傳。



實際開發中可以根據需要是否開啟延時確認,響應可能結合在一起,成一個響應,減少協議開銷 。
優點:減少了數據段的個數,提高了發送效率
缺點:過多的delay會拉長RTT

2.TCP重傳機制

TCP需要重傳機制來保證所有的數據包都可以到達。
1)超時重傳
  超時重傳機制用來保證TCP傳輸的可靠性。每次發送數據包時,發送的數據報都有seq號,接收端收到數據后,會回復ack進行確認,表示某一seq號數據已經收到。發送方在發送了某個seq包后,等待一段時間,如果沒有收到對應的ack回復,就會認為報文丟失,會重傳這個數據包。

  1. 快速重傳
    TCP引入了一種叫Fast Retransmit 的算法,不以時間驅動,而以數據驅動重傳。也就是說,如果,包沒有連續到達,就ack最后那個可能被丟了的包,如果發送方連續收到3次相同的ack,就重傳。Fast Retransmit的好處是不用等timeout了再重傳。
    另外一種更好的方式叫:Selective Acknowledgment (SACK)(參看RFC 2018),這種方式需要在TCP頭里加一個SACK的東西,ACK還是Fast Retransmit的ACK,SACK則是匯報收到的數據碎版。
3.流量控制

TCP header中有一個Window Size字段,它其實是指接收端的窗口,即接收窗口,用來告知發送端自己所能接收的數據量,從而達到一部分流控的目的。三次握手的過程中雙發發送的數據包里就帶了各自的winsize,發送端的發送窗口是基于接收端的接收窗口來計算的。



(1)已經發送并且對端確認(Sent/ACKed)---------------發送窗外 緩沖區外
(2)已經發送但未收到確認數據(Sent/UnACKed)-------發送窗內 緩沖區內?
(3)允許發送但尚未防的數據?(Unsent/Inside)-----------發送窗內 緩沖區內?
(4)未發送暫不允許(Unsent/Outside)-------------------發送窗外 緩沖區內?

TCP窗口就是這樣逐漸滑動,發送新的數據,滑動的依據就是發送數據已經收到ACK,確認對端收到,才能繼續窗口滑動發送新的數據。可以看到窗口大小對于吞吐量有著重要影響,同時ACK響應與系統延時又密切相關。
擁塞控制下篇在寫,好難寫。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容