tcp/ip 協(xié)議(上)

TCP/IP協(xié)議

TCP/IP 是一個協(xié)議族硅蹦,也是按照層次劃分荣德。共四層:應(yīng)用層,傳輸層童芹,互連網(wǎng)絡(luò)層涮瞻,網(wǎng)絡(luò)接口層。
OSI網(wǎng)絡(luò)協(xié)議模型假褪,是一個參考模型署咽,而TCP/IP協(xié)議是事實上的標(biāo)準(zhǔn)。TCP/IP協(xié)議參考了OSI 模型嗜价,但是并沒有嚴(yán)格按照OSI規(guī)定的七層去劃分標(biāo)準(zhǔn)艇抠,而只劃分了四層,這樣會更簡單點久锥,更實用家淤。
TCP/IP協(xié)議和OSI模型也并不沖突,TCP/IP協(xié)議中的應(yīng)用層協(xié)議瑟由,就對應(yīng)于OSI中的應(yīng)用層絮重,表示層,會話層歹苦。
TCP/IP分層:


我們?nèi)粘i_發(fā)中涉及到的網(wǎng)絡(luò)請求比如http請求和socket都是應(yīng)用層的青伤,基于tcp協(xié)議的。雖然我們沒有必要去探究整個協(xié)議細(xì)節(jié)問題殴瘦,但傳輸層tcp和udp的一些知識還是需要深入理解的狠角。

http協(xié)議

Http協(xié)議是建立在TCP協(xié)議基礎(chǔ)之上的,當(dāng)瀏覽器需要從服務(wù)器獲取網(wǎng)頁數(shù)據(jù)的時候蚪腋,會發(fā)出一次Http請求丰歌。Http會通過TCP建立起一個到服務(wù)器的連接通道,當(dāng)本次請求需要的數(shù)據(jù)完畢后屉凯,Http會立即將TCP連接斷開立帖,這個過程是很短的。所以Http連接是一種短連接悠砚,常見應(yīng)用場景是web請求晓勇,以及一些弱同步需求的場景,比如部分實時性要求不高的游戲。

TCP:傳輸控制協(xié)議

TCP是一種面向連接的绑咱、可靠的绰筛、基于字節(jié)流的傳輸層通信協(xié)議。
面向連接: 面向連接意味著使用tcp的應(yīng)用程序在傳輸數(shù)據(jù)前必須先建立連接描融,需要三次握手:


三次握手

客戶端主動發(fā)起連接别智,發(fā)送syn包,server受到包后稼稿,同時帶ACK標(biāo)志和SYN標(biāo)志。表示對剛才客戶端SYN報文的回應(yīng)讳窟,seq表示序號让歼,雙方發(fā)出序號的包不一樣,但一定是遞增的丽啡。ACK=x+1表示谋右,已經(jīng)收到了x包,期望下一個需要為x+1的包补箍。client受到sever的syn報文改执,在回復(fù)一個ACK表示確認(rèn)。

為什么必須是三次握手坑雅?

信道不可靠辈挂,數(shù)據(jù)傳輸要可靠。三次通信是理論上的最小值(我理解的實際上需要雙方互相確認(rèn)裹粤,將SYN和ACK合并為一次了)终蒂。參照

可靠性:

1.確認(rèn):

接收方收到報文就會確認(rèn),發(fā)送方發(fā)送一段時間后沒有收到確認(rèn)就重傳遥诉。



實際開發(fā)中可以根據(jù)需要是否開啟延時確認(rèn)拇泣,響應(yīng)可能結(jié)合在一起,成一個響應(yīng)矮锈,減少協(xié)議開銷 霉翔。
優(yōu)點:減少了數(shù)據(jù)段的個數(shù),提高了發(fā)送效率
缺點:過多的delay會拉長RTT

2.TCP重傳機制

TCP需要重傳機制來保證所有的數(shù)據(jù)包都可以到達苞笨。
1)超時重傳
  超時重傳機制用來保證TCP傳輸?shù)目煽啃哉洹C看伟l(fā)送數(shù)據(jù)包時,發(fā)送的數(shù)據(jù)報都有seq號猫缭,接收端收到數(shù)據(jù)后葱弟,會回復(fù)ack進行確認(rèn),表示某一seq號數(shù)據(jù)已經(jīng)收到猜丹。發(fā)送方在發(fā)送了某個seq包后芝加,等待一段時間,如果沒有收到對應(yīng)的ack回復(fù),就會認(rèn)為報文丟失藏杖,會重傳這個數(shù)據(jù)包将塑。

  1. 快速重傳
    TCP引入了一種叫Fast Retransmit 的算法,不以時間驅(qū)動蝌麸,而以數(shù)據(jù)驅(qū)動重傳点寥。也就是說,如果来吩,包沒有連續(xù)到達敢辩,就ack最后那個可能被丟了的包,如果發(fā)送方連續(xù)收到3次相同的ack弟疆,就重傳戚长。Fast Retransmit的好處是不用等timeout了再重傳。
    另外一種更好的方式叫:Selective Acknowledgment (SACK)(參看RFC 2018)怠苔,這種方式需要在TCP頭里加一個SACK的東西同廉,ACK還是Fast Retransmit的ACK,SACK則是匯報收到的數(shù)據(jù)碎版柑司。
3.流量控制

TCP header中有一個Window Size字段迫肖,它其實是指接收端的窗口,即接收窗口攒驰,用來告知發(fā)送端自己所能接收的數(shù)據(jù)量蟆湖,從而達到一部分流控的目的。三次握手的過程中雙發(fā)發(fā)送的數(shù)據(jù)包里就帶了各自的winsize玻粪,發(fā)送端的發(fā)送窗口是基于接收端的接收窗口來計算的帐姻。



(1)已經(jīng)發(fā)送并且對端確認(rèn)(Sent/ACKed)---------------發(fā)送窗外 緩沖區(qū)外
(2)已經(jīng)發(fā)送但未收到確認(rèn)數(shù)據(jù)(Sent/UnACKed)-------發(fā)送窗內(nèi) 緩沖區(qū)內(nèi)?
(3)允許發(fā)送但尚未防的數(shù)據(jù)?(Unsent/Inside)-----------發(fā)送窗內(nèi) 緩沖區(qū)內(nèi)?
(4)未發(fā)送暫不允許(Unsent/Outside)-------------------發(fā)送窗外 緩沖區(qū)內(nèi)?

TCP窗口就是這樣逐漸滑動,發(fā)送新的數(shù)據(jù)奶段,滑動的依據(jù)就是發(fā)送數(shù)據(jù)已經(jīng)收到ACK饥瓷,確認(rèn)對端收到,才能繼續(xù)窗口滑動發(fā)送新的數(shù)據(jù)痹籍∧孛可以看到窗口大小對于吞吐量有著重要影響,同時ACK響應(yīng)與系統(tǒng)延時又密切相關(guān)蹲缠。
擁塞控制下篇在寫棺克,好難寫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末线定,一起剝皮案震驚了整個濱河市娜谊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斤讥,老刑警劉巖纱皆,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡派草,警方通過查閱死者的電腦和手機搀缠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來近迁,“玉大人艺普,你說我怎么就攤上這事〖撸” “怎么了歧譬?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長搏存。 經(jīng)常有香客問我缴罗,道長,這世上最難降的妖魔是什么祭埂? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮兵钮,結(jié)果婚禮上蛆橡,老公的妹妹穿的比我還像新娘。我一直安慰自己掘譬,他們只是感情好泰演,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著葱轩,像睡著了一般睦焕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上靴拱,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天垃喊,我揣著相機與錄音,去河邊找鬼袜炕。 笑死本谜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的偎窘。 我是一名探鬼主播乌助,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼陌知!你這毒婦竟也來了他托?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤仆葡,失蹤者是張志新(化名)和其女友劉穎赏参,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡登刺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年籽腕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纸俭。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡皇耗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出揍很,到底是詐尸還是另有隱情郎楼,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布窒悔,位于F島的核電站呜袁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏简珠。R本人自食惡果不足惜阶界,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望聋庵。 院中可真熱鬧膘融,春花似錦、人聲如沸祭玉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脱货。三九已至岛都,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間振峻,已是汗流浹背臼疫。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扣孟,地道東北人多矮。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像哈打,于是被迫代替她去往敵國和親塔逃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容