網(wǎng)絡(luò)編程(二)TCP/IP

一梨撞、概念

TCP/IP:利用IP進(jìn)行通信時(shí)所必須用到的協(xié)議群的統(tǒng)稱飘庄。有時(shí)也稱TCP/IP為網(wǎng)際協(xié)議族(網(wǎng)際協(xié)議族(Internet Protocol Suite):組成網(wǎng)際協(xié)議的一組協(xié)議)篡撵。

TCP/IP協(xié)議群

互聯(lián)網(wǎng):“互聯(lián)網(wǎng)”是指由ARPANET發(fā)展而來害晦、互連全世界的計(jì)算機(jī)網(wǎng)絡(luò)∩枘猓現(xiàn)在蛮瞄,“互聯(lián)網(wǎng)”已經(jīng)是一個(gè)專有名詞了置济,其對(duì)應(yīng)的英文單詞“The Internet”也早已成為固有名詞解恰。

互聯(lián)網(wǎng)進(jìn)行通信時(shí),需要相應(yīng)的網(wǎng)絡(luò)協(xié)議浙于,TCP/IP原本就是為使用互聯(lián)網(wǎng)而開發(fā)制定的協(xié)議族护盈。因此,互聯(lián)網(wǎng)的協(xié)議就是TCP/IP羞酗,TCP/IP就是互聯(lián)網(wǎng)的協(xié)議腐宋。

二、TCP/IP協(xié)議分層模型

OSI模型與TCP/IP模型對(duì)應(yīng)關(guān)系

1)硬件(物理層)

TCP/IP的最底層是負(fù)責(zé)數(shù)據(jù)傳輸?shù)挠布鳌CP/IP是在網(wǎng)絡(luò)互連的設(shè)備之間能夠通信的前提下才被提出的協(xié)議脏款。

2)網(wǎng)絡(luò)接口層(數(shù)據(jù)鏈路層)

網(wǎng)絡(luò)接口層(有時(shí)人們也將網(wǎng)絡(luò)接口層與硬件層合并起來稱作網(wǎng)絡(luò)通信層。)
利用以太網(wǎng)中的數(shù)據(jù)鏈路層進(jìn)行通信裤园,因此屬于接口層撤师。也就是說,把它當(dāng)做讓NIC起作用的“驅(qū)動(dòng)程序”也無妨拧揽。

3)互聯(lián)網(wǎng)層(網(wǎng)絡(luò)層)

互聯(lián)網(wǎng)層使用IP協(xié)議剃盾,它相當(dāng)于OSI模型中的第3層網(wǎng)絡(luò)層。IP協(xié)議基于IP地址轉(zhuǎn)發(fā)分包數(shù)據(jù)淤袜。

TCP/IP分層中的互聯(lián)網(wǎng)層與傳輸層的功能通常由操作系統(tǒng)提供痒谴。

IP

IP是跨越網(wǎng)絡(luò)傳送數(shù)據(jù)包,使整個(gè)互聯(lián)網(wǎng)都能收到數(shù)據(jù)的協(xié)議铡羡。

IP還隱含著數(shù)據(jù)鏈路層的功能积蔚。通過IP,相互通信的主機(jī)之間不論經(jīng)過怎樣的底層數(shù)據(jù)鏈路都能夠?qū)崿F(xiàn)通信烦周。

雖然IP也是分組交換的一種協(xié)議尽爆,但是它不具有重發(fā)機(jī)制。即使分組數(shù)據(jù)包未能到達(dá)對(duì)端主機(jī)也不會(huì)重發(fā)读慎。因此漱贱,屬于非可靠性傳輸協(xié)議。

ICMP

IP數(shù)據(jù)包在發(fā)送途中一旦發(fā)生異常導(dǎo)致無法到達(dá)對(duì)端目標(biāo)地址時(shí)夭委,需要給發(fā)送端發(fā)送一個(gè)發(fā)生異常的通知幅狮。ICMP就是為這一功能而制定的。它有時(shí)也被用來診斷網(wǎng)絡(luò)的健康狀況。

ARP

從分組數(shù)據(jù)包的IP地址中解析出物理地址(MAC地址)的一種協(xié)議崇摄。

4)傳輸層

傳輸層最主要的功能就是能夠讓應(yīng)用程序之間實(shí)現(xiàn)通信擎值。

TCP

TCP是一種面向有連接的傳輸層協(xié)議。它可以保證兩端通信主機(jī)之間的通信可達(dá)逐抑。TCP能夠正確處理在傳輸過程中丟包幅恋、傳輸順序亂掉等異常情況。

此外泵肄,TCP還能夠有效利用帶寬,緩解網(wǎng)絡(luò)擁堵淑翼。

然而腐巢,為了建立與斷開連接,有時(shí)它需要至少7次的發(fā)包收包玄括,導(dǎo)致網(wǎng)絡(luò)流量的浪費(fèi)冯丙。

此外,為了提高網(wǎng)絡(luò)的利用率遭京,TCP協(xié)議中定義了各種各樣復(fù)雜的規(guī)范胃惜,因此不利于視頻會(huì)議(音頻、視頻的數(shù)據(jù)量既定)等場(chǎng)合使用哪雕。

UDP

UDP有別于TCP船殉,它是一種面向無連接的傳輸層協(xié)議。

UDP不會(huì)關(guān)注對(duì)端是否真的收到了傳送過去的數(shù)據(jù)斯嚎,如果需要檢查對(duì)端是否收到分組數(shù)據(jù)包利虫,或者對(duì)端是否連接到網(wǎng)絡(luò),則需要在應(yīng)用程序中實(shí)現(xiàn)堡僻。

UDP常用于分組數(shù)據(jù)較少或多播糠惫、廣播通信以及視頻通信等多媒體領(lǐng)域。

5)應(yīng)用層(會(huì)話層以上的分層)

TCP/IP的分層中钉疫,將OSI參考模型中的會(huì)話層硼讽、表示層和應(yīng)用層的功能都集中到了應(yīng)用程序中實(shí)現(xiàn)。這些功能有時(shí)由一個(gè)單一的程序?qū)崿F(xiàn)牲阁,有時(shí)也可能會(huì)由多個(gè)程序?qū)崿F(xiàn)固阁。

因此,細(xì)看TCP/IP的應(yīng)用程序功能會(huì)發(fā)現(xiàn)咨油,它不僅實(shí)現(xiàn)OSI模型中應(yīng)用層的內(nèi)容您炉,還要實(shí)現(xiàn)會(huì)話層與表示
層的功能

WWW

WWW(中文叫萬維網(wǎng)役电,是一種互聯(lián)網(wǎng)上數(shù)據(jù)讀取的規(guī)范赚爵。有時(shí)也叫做Web、WWW或W3。) 可以說是互聯(lián)網(wǎng)能夠如此普及的一個(gè)重要原動(dòng)力冀膝。

瀏覽器與服務(wù)端之間通信所用的協(xié)議是HTTP(HyperText Transfer Protocol)唁奢。所傳輸數(shù)據(jù)的主要格式是HTML(HyperText Markup Language)。WWW中的HTTP屬于OSI應(yīng)用層的協(xié)議窝剖,而HTML屬于表示層的協(xié)議麻掸。

電子郵件(E-mali)

發(fā)送電子郵件時(shí)用到的協(xié)議叫做SMTP(Simple Mail Tranfer Protocol)

電子郵件使用MIME(在互聯(lián)網(wǎng)上廣泛使用的赐纱、用來定義郵件數(shù)據(jù)格式一種規(guī)范脊奋。)協(xié)議,是郵件內(nèi)容更豐富疙描。這里提到的MIME屬于OSI參考模型的第6層--表示層诚隙。

電子郵件與TCP/IP的發(fā)展相輔相成。電子郵件協(xié)助改善協(xié)議起胰,更加完善的協(xié)議又可以令電子郵件的形式多樣化久又。

文件傳輸(FTP)

該過程使用的協(xié)議叫做FTP(File Transfer Prototol)。

傳輸過程中可以選擇用二進(jìn)制方式還是文本方式效五,使用文本方式時(shí)會(huì)自動(dòng)修改換行符地消。這也屬于表示層的功能。

在FTP中進(jìn)行文件傳輸時(shí)會(huì)建立兩個(gè)TCP連接畏妖,分別是發(fā)出傳輸請(qǐng)求時(shí)所要用到的控制連接與實(shí)際傳輸數(shù)據(jù)時(shí)所要用到的數(shù)據(jù)連接(這兩種連接的控制管理屬于會(huì)話層的功能脉执。)

遠(yuǎn)程登錄(TELNET與SSH)

TCP/IP網(wǎng)絡(luò)中遠(yuǎn)程登錄常用TELNET(TELetypewriter NETwork的縮寫。有時(shí)也稱作默認(rèn)協(xié)議戒劫。)和SSH(SSH是Secure SHell的縮寫适瓦。) 兩種協(xié)議。

三谱仪、TCP/IP通信過程

數(shù)據(jù)包首部

每個(gè)分層中玻熙,都會(huì)對(duì)所發(fā)送的數(shù)據(jù)附加一個(gè)首部,在這個(gè)首部中包含了該層必要的信息疯攒,如發(fā)送的目標(biāo)地址以及協(xié)議相關(guān)信息嗦随。通常,為協(xié)議提供的信息為包首部敬尺,所要發(fā)送的內(nèi)容為數(shù)據(jù)枚尼。


數(shù)據(jù)包首部的層次化

發(fā)送數(shù)據(jù)包

以發(fā)郵件為例,主要會(huì)經(jīng)歷以下幾個(gè)過程
發(fā)送郵件.png
應(yīng)用程序處理

會(huì)對(duì)郵件進(jìn)行編碼處理砂吞,相當(dāng)于OSI的表示層功能署恍。

不同的郵件軟件有不同的發(fā)送郵件的機(jī)制,立即發(fā)送或者是由接收方發(fā)起接收才開始發(fā)送蜻直。這種從何時(shí)建立連接的機(jī)制類似于OSI的會(huì)話層的功能盯质。

TCP模塊處理

TCP負(fù)責(zé)建立連接袁串、發(fā)送數(shù)據(jù)和斷開連接等功能。

如何將應(yīng)用端的數(shù)據(jù)準(zhǔn)確傳輸呢呼巷?
需要在應(yīng)用發(fā)過來的數(shù)據(jù)上增加一個(gè)TCP首部包囱修,其中包括源端口號(hào),目標(biāo)端口號(hào)王悍,序號(hào)(判斷發(fā)送的數(shù)據(jù)包中那部分是數(shù)據(jù))和校驗(yàn)(判斷數(shù)據(jù)是否能正常讀绕屏)。隨后將附加TCP首部的數(shù)據(jù)發(fā)送給IP模塊压储。

IP模塊處理

IP將TCP傳過來的TCP首部和TCP數(shù)據(jù)合起來當(dāng)做自己的數(shù)據(jù)鲜漩,并在TCP首部的前端在加上自己的IP首部。因此集惋,IP數(shù)據(jù)包中IP首部后面緊跟著TCP首部宇整,然后才是應(yīng)用的數(shù)據(jù)首部和數(shù)據(jù)本身。

IP首部中包含接收端IP地址以及發(fā)送端IP地址芋膘。緊隨IP首部的還有用來判斷其后面數(shù)據(jù)是TCP還是UDP的信息。

IP包生成后霸饲,參考路由控制表決定接受此IP包的路由或主機(jī)为朋。隨后,IP包將被發(fā)送給連接這些路由器或主機(jī)網(wǎng)絡(luò)接口的驅(qū)動(dòng)程序厚脉,以實(shí)現(xiàn)真正發(fā)送數(shù)據(jù)习寸。

如果尚不知道接收端的MAC地址,可以利用ARP(Address Resolution Protocol)查找傻工。只要知道了對(duì)端的MAC地址霞溪,就可以將MAC地址和IP地址交給以太網(wǎng)的驅(qū)動(dòng)程序,實(shí)現(xiàn)數(shù)據(jù)傳輸中捆。

網(wǎng)絡(luò)接口(以太網(wǎng))處理

從IP傳過來的IP包鸯匹,對(duì)于以太網(wǎng)驅(qū)動(dòng)來說不過就是數(shù)據(jù)。給這數(shù)據(jù)附加上以太網(wǎng)首部并進(jìn)行發(fā)送處理泄伪。

以太網(wǎng)首部中包含接收端MAC地址殴蓬、發(fā)送端MAC地址以及標(biāo)志以太網(wǎng)類型的以太網(wǎng)數(shù)據(jù)的協(xié)議。
根據(jù)上述信息產(chǎn)生的以太網(wǎng)數(shù)據(jù)包將通過物理層傳輸給接收端蟋滴。

發(fā)送處理中的FCS(Frame Check Sequence) 由硬件計(jì)算染厅,添加到包的最后。設(shè)置FCS的目的是為了判斷數(shù)據(jù)包是否由于噪聲而被破壞津函。

發(fā)接收數(shù)據(jù)包

接收程序的處理過程剛好與發(fā)送時(shí)相反的肖粮。不做多余解釋了。

整個(gè)發(fā)送郵件的過程

TCP/IP各層在發(fā)送郵件中的處理

文章內(nèi)容摘自:圖解TCP/IP(第五版)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尔苦,一起剝皮案震驚了整個(gè)濱河市涩馆,隨后出現(xiàn)的幾起案子行施,更是在濱河造成了極大的恐慌,老刑警劉巖凌净,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悲龟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡冰寻,警方通過查閱死者的電腦和手機(jī)须教,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斩芭,“玉大人轻腺,你說我怎么就攤上這事』裕” “怎么了贬养?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長琴庵。 經(jīng)常有香客問我误算,道長,這世上最難降的妖魔是什么迷殿? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任儿礼,我火速辦了婚禮,結(jié)果婚禮上庆寺,老公的妹妹穿的比我還像新娘蚊夫。我一直安慰自己,他們只是感情好懦尝,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布知纷。 她就那樣靜靜地躺著,像睡著了一般陵霉。 火紅的嫁衣襯著肌膚如雪琅轧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天踊挠,我揣著相機(jī)與錄音鹰晨,去河邊找鬼。 笑死止毕,一個(gè)胖子當(dāng)著我的面吹牛模蜡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扁凛,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼忍疾,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了谨朝?” 一聲冷哼從身側(cè)響起卤妒,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤甥绿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后则披,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體共缕,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年士复,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了图谷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阱洪,死狀恐怖便贵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冗荸,我是刑警寧澤承璃,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站蚌本,受9級(jí)特大地震影響盔粹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜程癌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一舷嗡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧席楚,春花似錦、人聲如沸税稼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽郎仆。三九已至只祠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扰肌,已是汗流浹背抛寝。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留曙旭,地道東北人盗舰。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像桂躏,于是被迫代替她去往敵國和親钻趋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

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