來源:?酷 殼 – CoolShell.cn?
作者: 陳皓
TCP是一個(gè)巨復(fù)雜的協(xié)議,因?yàn)樗鉀Q很多問題,而這些問題又帶出了很多子問題和陰暗面。所以學(xué)習(xí)TCP本身是個(gè)比較痛苦的過程,但對于學(xué)習(xí)的過程卻能讓人有很多收獲。關(guān)于TCP這個(gè)協(xié)議的細(xì)節(jié),我還是推薦你去看W.Richard Stevens的《TCP/IP 詳解 卷1:協(xié)議》(當(dāng)然,你也可以去讀一下RFC793以及后面N多的RFC)。另外,本文我會使用英文術(shù)語,這樣方便你通過這些英文關(guān)鍵詞來查找相關(guān)的技術(shù)文檔。
之所以想寫這篇文章,目的有三個(gè),
所以,本文不會面面俱到,只是對TCP協(xié)議、算法和原理的科普。
我本來只想寫一個(gè)篇幅的文章的,但是TCP真TMD的復(fù)雜,比C++復(fù)雜多了,這30多年來,各種優(yōu)化變種爭論和修改。所以,寫著寫著就發(fā)現(xiàn)只有砍成兩篇。
廢話少說,首先,我們需要知道TCP在網(wǎng)絡(luò)OSI的七層模型中的第四層——Transport層,IP在第三層——Network層,ARP在第二層——Data Link層,在第二層上的數(shù)據(jù),我們叫Frame,在第三層上的數(shù)據(jù)叫Packet,第四層的數(shù)據(jù)叫Segment。
首先,我們需要知道,我們程序的數(shù)據(jù)首先會打到TCP的Segment中,然后TCP的Segment會打到IP的Packet中,然后再打到以太網(wǎng)Ethernet的Frame中,傳到對端后,各個(gè)層解析自己的協(xié)議,然后把數(shù)據(jù)交給更高層的協(xié)議處理。
更多建議: