TCP/IP協(xié)議
以太網(wǎng)的出現(xiàn),給系統(tǒng)的互聯(lián)帶來(lái)方便的方式懈涛,每個(gè)節(jié)點(diǎn)安裝一塊以太網(wǎng)適配器逛万,上層程序只要將發(fā)送的數(shù)據(jù)以及目的MAC地址告訴以太網(wǎng)卡,就可以完成通信過(guò)程批钠。
但是實(shí)際上宇植,以太網(wǎng)不能直接被應(yīng)用程序用來(lái)收發(fā)數(shù)據(jù)的,因?yàn)橐蕴W(wǎng)是一個(gè)沒(méi)有傳輸保障的網(wǎng)絡(luò)埋心。
表現(xiàn)在:
- 不會(huì)對(duì)數(shù)據(jù)幀進(jìn)行校驗(yàn)糾錯(cuò)指郁。
- 如果交換量大,可能會(huì)出現(xiàn)緩沖區(qū)隊(duì)列滿了的情況拷呆,所以以太網(wǎng)會(huì)主動(dòng)丟棄闲坎,并且不會(huì)通知發(fā)送者。
正因?yàn)槿绱?茬斧,需要上層程序來(lái)獲得可靠數(shù)據(jù)腰懂。
比如NetBEUI,NetBIOS,IPX,TCP/IP,這些協(xié)議其下層調(diào)用以太網(wǎng)提供的服務(wù)项秉,上層對(duì)外提供新的調(diào)用接口绣溜。
而TCP/IP因?yàn)檫m用廣,性能好娄蔼,可以在超大規(guī)模的網(wǎng)絡(luò)上運(yùn)行怖喻,迅速得到普及底哗。
IP協(xié)議
作用一:屏蔽鏈路層地址
以太網(wǎng)主要實(shí)現(xiàn)了OSI的下三層,即物理層锚沸、鏈路層艘虎、網(wǎng)絡(luò)層,現(xiàn)在普遍認(rèn)為以太網(wǎng)只作用到了鏈路層咒吐,這種誤解的原因是以太網(wǎng)與TCP/IP結(jié)合就淪落為T(mén)CP/IP的鏈路層,其第三層地址被以太網(wǎng)IP所映射掉了属划。
而且以太網(wǎng)定義了MAC地址恬叹,也有自己的物理層,完全可以用來(lái)進(jìn)行尋址同眯。但是為什么沒(méi)有完全靠MAC來(lái)尋址呢绽昼?因?yàn)?/p>
首先MAC 太長(zhǎng),48bit须蜗,用于路由尋址的時(shí)效低硅确。
最關(guān)鍵的是,世界上不是每個(gè)環(huán)境都用以太網(wǎng)來(lái)建立網(wǎng)絡(luò)明肮,還可以有其他的網(wǎng)絡(luò)系統(tǒng)菱农,有其他的尋址方式。
比如以太網(wǎng)適合局域網(wǎng)通信柿估,但是不適合廣域網(wǎng)循未,一般來(lái)說(shuō)廣域網(wǎng)有專(zhuān)門(mén)的的聯(lián)網(wǎng)協(xié)議,比如PPP , HDLC , FrameRelay 秫舌, X25 , ATM等的妖,它們也如以太網(wǎng)一樣各有各的尋址體系。
在一個(gè)Internet上有如此多的不同類(lèi)型的網(wǎng)絡(luò)足陨,如果要聯(lián)通嫂粟,需要各種轉(zhuǎn)換,映射墨缘。所以最好才解決方案是給他們通通分配一個(gè)IP地址給每個(gè)節(jié)點(diǎn)星虹,對(duì)外以IP地址作為尋址地址,再將IP地址映射到所在網(wǎng)絡(luò)的地址上镊讼,比如IP映射到Frame Relay 的DLCI 搁凸,映射到ATM的地址等。
以太網(wǎng)天生的弱點(diǎn)導(dǎo)致它必須向TCP/IP合作狠毯,而且只能將MAC地址隱藏护糖,對(duì)外通通使用IP地址。
總結(jié)一下嚼松,因?yàn)槌艘蕴W(wǎng)以外嫡良,還有很多其他類(lèi)型的聯(lián)網(wǎng)方式锰扶,而幾乎所有的聯(lián)網(wǎng)方式都有自己的編址和尋址方式,為了兼容寝受,只能將地址全都映射到IP地址上
既然有映射坷牛,當(dāng)然需要一種協(xié)議來(lái)完成這個(gè)過(guò)程。那就是ARP協(xié)議很澄,這個(gè)協(xié)議就是用來(lái)處理一種地址和另一種地址的映射京闰。運(yùn)行在每個(gè)網(wǎng)絡(luò)設(shè)備上,將一種地址映射成底層網(wǎng)絡(luò)設(shè)備所使用的另一種地址甩苛。
每種網(wǎng)絡(luò)要想用IP來(lái)統(tǒng)一就必須運(yùn)行各自的ARP協(xié)議蹂楣,比如以太網(wǎng)的ARP , 幀中繼的ARP讯蒲。
ARP協(xié)議:主要用來(lái)將IP地址映射到底層設(shè)備的地址(MAC地址)
我們以瀏覽器中輸入網(wǎng)絡(luò)域名之后發(fā)生的事情來(lái)舉例痊土。
首先DNS兌換程序自動(dòng)向DNS服務(wù)器查詢(xún),獲得域名對(duì)應(yīng)的地址墨林,然后用IP地址與服務(wù)器通信赁酝。
數(shù)據(jù)包帶著IP地址到了服務(wù)器所在的局域網(wǎng),會(huì)通過(guò)局域網(wǎng)的路由器發(fā)出的ARP請(qǐng)求旭等,將IP地址兌換為服務(wù)器所在局域網(wǎng)的地址酌呆,
如果服務(wù)器所在的局域網(wǎng)是以太網(wǎng),則對(duì)應(yīng)成MAC地址搔耕,然后通過(guò)以太網(wǎng)交換設(shè)備肪笋,找到此MAC地址所在的交換機(jī)端口,將數(shù)據(jù)包發(fā)向這個(gè)端口度迂。
上述過(guò)程發(fā)生了兩種不同的兌換:
IP轉(zhuǎn)換為域名藤乙,這是因?yàn)镮P不方便記憶,所以我們平時(shí)使用類(lèi)似"www.baid.com"這樣的字符來(lái)表示網(wǎng)站惭墓,當(dāng)然需要在后臺(tái)將域名和IP進(jìn)行相互轉(zhuǎn)換坛梁。
MAC轉(zhuǎn)換IP:為了統(tǒng)一。
作用二:適配上下層
IP層另外的作用是適配上下層:給鏈路層和傳輸層提供適配腊凶。
鏈路層有MTU的概念:鏈路的最大傳輸單元划咐,即每幀所允許的最大字節(jié)數(shù)。
鏈路層就類(lèi)似司機(jī)和交通規(guī)則钧萍,對(duì)貨車(chē)的載重褐缠、大小有要求,如果貨物太大风瘦,就必須分割队魏。這個(gè)動(dòng)作是由IP層程序來(lái)做,也就是IP根據(jù)鏈路的MTU來(lái)分割貨物,然后貼上源目的IP地址胡桨、順序號(hào)官帘。
路由器每次選擇的路徑不一樣,所以到達(dá)目的地以后可能亂序了昧谊,此時(shí)可以使用順序號(hào)刽虹。這個(gè)順序號(hào)是根據(jù)分割處相對(duì)起點(diǎn)的距離,根據(jù)這個(gè)號(hào)呢诬,等所有貨物到達(dá)了以后涌哲,對(duì)方的IP程序可以將這個(gè)號(hào)碼組裝起來(lái)。
每個(gè)貨物塊都攜帶IP頭尚镰,但是只有第一塊攜帶TCP頭部 阀圾。因?yàn)閭鬏攲宇^部是在應(yīng)用數(shù)據(jù)之前的,所以IP在分割的時(shí)候钓猬,一定會(huì)把頭部分到第一塊中。
缺點(diǎn)
IP最大的作用是尋址和路由撩独,以及適配鏈路層的MTU敞曹。但是以太網(wǎng)是個(gè)面向無(wú)連接的網(wǎng)絡(luò), 不保障數(shù)據(jù)一定會(huì)傳送到對(duì)方综膀。
Frame Relay協(xié)議澳迫,其前身X.25協(xié)議,有很好的傳輸保障功能剧劝,因?yàn)槠湓O(shè)計(jì)初衷是為了運(yùn)行在不穩(wěn)定的鏈路橄登,當(dāng)鏈路的質(zhì)量不斷提升,x25的做法有些多余讥此,所以在FR替代了X25拢锹,只留下流控機(jī)制。
但是以太網(wǎng)和FR都沒(méi)有實(shí)現(xiàn)端到端的傳輸保障萄喳。端到端是相對(duì)于“過(guò)路”而言的卒稳。過(guò)路是指在兩個(gè)終端之間通信路徑上的網(wǎng)絡(luò)設(shè)備之間的路徑。鏈路層只保障兩個(gè)設(shè)備之間傳送的數(shù)據(jù)無(wú)誤他巨,但是不能保證最終終端傳輸?shù)臒o(wú)誤充坑。
TCP和UDP
TCP/IP協(xié)議包含兩個(gè)亞層:
- IP:統(tǒng)一底層網(wǎng)絡(luò)地址和尋址
- TCP或者UDP:邏輯上位于IP上。
TCP和UDP的功能
TCP功能:維護(hù)復(fù)雜的狀態(tài)機(jī)染突,保障發(fā)送方發(fā)出的數(shù)據(jù)包都會(huì)傳送到接收方捻爷。出錯(cuò)的話,則反饋信息份企。
UDP功能:TCP/IP對(duì)以太網(wǎng)的透?jìng)饕查](méi)有傳輸保障功能的亞層。除了UDP可以提供比以太網(wǎng)更方便的調(diào)用方式司志,其他沒(méi)有本質(zhì)區(qū)別手蝎。
TCP/IP協(xié)議向應(yīng)用程序呈現(xiàn)的接口就是Socket接口榕莺,即插座接口。TCP/IP想讓?xiě)?yīng)用程序更方便的使用網(wǎng)絡(luò)棵介,就像插頭插入插座一樣钉鸯。
基于TCP/IP的應(yīng)用程序,必須依賴(lài)于TCP/IP協(xié)議邮辽,如Ping , Trace , SNMP,Telnet , SMTP,FTP,HTTP
這些協(xié)議加上IP唠雕、TCP等,然后加上物理層鏈路層(以太網(wǎng)等)吨述,形成了TCP/IP協(xié)議簇岩睁。
所以說(shuō)TCP運(yùn)行在終端上,監(jiān)控終端最終發(fā)送的接收的數(shù)據(jù)包的順序揣云、緩存區(qū)捕儒、校驗(yàn)。
TCP協(xié)議
TCP就是個(gè)押運(yùn)員邓夕,是由它把貨物交給IP做調(diào)度的刘莹。
貨物最初是由應(yīng)用程序生成,調(diào)用Socket接口向接收方發(fā)送貨物焚刚。通告TCP/IP去特定的內(nèi)存區(qū)將數(shù)據(jù)復(fù)制到Socket緩沖區(qū)点弯,然后TCP再?gòu)木彌_區(qū)將數(shù)據(jù)通過(guò)IP層分片之后,從底層網(wǎng)絡(luò)適配器發(fā)送到對(duì)端矿咕。
TCP通過(guò)MSS(max Segment Size)來(lái)調(diào)整每次轉(zhuǎn)給IP層的數(shù)據(jù)大小抢肛。而MSS值完全取決底層鏈路的MTU。
為了避免IP分片碳柱,MSS總等于MTU值減掉IP頭捡絮,再減掉TCP頭的值,TCP發(fā)送給IP的數(shù)據(jù)莲镣,IP加上IP頭之后锦援,恰好等于底層鏈路的MTU值,使得IP不需要分片剥悟。
TCP將上層應(yīng)用的數(shù)據(jù)完全當(dāng)成字節(jié)流灵寺,不進(jìn)行定界處理,認(rèn)為上層應(yīng)用數(shù)據(jù)就是一連串的字節(jié),不認(rèn)識(shí)字節(jié)的具體含義区岗,卻可以分割這些字節(jié)略板,封裝成貨物進(jìn)行傳送,但是必須保證數(shù)據(jù)排列順序慈缔。
TCP將上層數(shù)據(jù)“分段” 叮称, IP將TCP分段再“分片”(若此段大于MTU)
IP到達(dá)目的地以后艇挨,會(huì)將分片合并為分端笼痹,然后放到貨倉(cāng)蹭沛,順序排放排截,不管上層消息的分界。
UDP協(xié)議
UDP只是被動(dòng)的起到了一個(gè)IP和上三層的接口的作用挠蛉。
沒(méi)有出錯(cuò)重傳祭示,沒(méi)有緩沖、定時(shí)器谴古、狀態(tài)機(jī)质涛,而且也不會(huì)像TCP將數(shù)據(jù)流分段,適配MTU的工作完全由IP來(lái)做掰担。
沒(méi)有握手機(jī)制汇陆,所以UDP頭部只有8個(gè)字節(jié)長(zhǎng),包括目的和源端口號(hào)带饱,UDP數(shù)據(jù)包長(zhǎng)度毡代、UDP校驗(yàn)和,效率高勺疼。所以UDP協(xié)議一般用于實(shí)時(shí)性高的地方教寂,比如視頻流
端口號(hào)
OS上運(yùn)行N個(gè)程序,如果需要通信恢口,可以使用號(hào)碼來(lái)標(biāo)識(shí)孝宗,所以只要知道了進(jìn)程號(hào)就可以區(qū)分程序穷躁。
同一PC上的程序通信耕肩,一般是在內(nèi)存中直接通信,但是如果兩臺(tái)計(jì)算機(jī)的兩個(gè)程序都需要通信问潭,若用內(nèi)存共享猿诸,成本太高,所以可以采用先發(fā)送到另一臺(tái)計(jì)算機(jī)狡忙,然后讓接收消息的計(jì)算機(jī)將這個(gè)消息發(fā)送給對(duì)應(yīng)的程序梳虽。
所以接收方的OS中的TCP/IP協(xié)議必須知道某個(gè)數(shù)據(jù)包應(yīng)該放到哪一個(gè)應(yīng)用程序的緩沖區(qū),因?yàn)橥粫r(shí)刻可能有多個(gè)應(yīng)用調(diào)用Socket 進(jìn)行數(shù)據(jù)收發(fā)灾茁。
為了區(qū)分正在調(diào)用Socket的不同應(yīng)用程序窜觉,規(guī)定了端口號(hào)。
所以在調(diào)用socket的時(shí)候北专,必須聲明連接目的計(jì)算機(jī)TCP/IP協(xié)議的那個(gè)端口號(hào)禀挫。
TCP/IP與以太網(wǎng)的關(guān)系
有人把TCP/IP與以太網(wǎng)等同起來(lái),是完全錯(cuò)誤的拓颓。
TCP/IP與以太網(wǎng)是互相利用语婴,而非相互依存。
TCP/IP協(xié)議不像以太網(wǎng)有底層專(zhuān)門(mén)的硬件,絕對(duì)是可以租用一切合適的硬件來(lái)作為物理和鏈路層砰左。
比如TCP/IP可以用無(wú)線匿醒、USB、COM串口缠导、ATM作為物理層和鏈路層廉羔。
以太網(wǎng)有自己的網(wǎng)絡(luò)層編址和尋址,有網(wǎng)絡(luò)層的元素
TCP/IP在網(wǎng)絡(luò)層和傳輸層的功能應(yīng)用太廣泛了酬核,所以O(shè)SI的第三和第4層幾乎是被TCP/IP統(tǒng)治了蜜另。