同樣的冕碟,本文篇幅也比較長滚粟,先來一張思維導(dǎo)圖癌幕,帶大家過一遍衙耕。
一圖看完本文
一、 計算機網(wǎng)絡(luò)體系結(jié)構(gòu)分層
計算機網(wǎng)絡(luò)體系結(jié)構(gòu)分層
計算機網(wǎng)絡(luò)體系結(jié)構(gòu)分層
不難看出勺远,TCP/IP 與 OSI 在分層模塊上稍有區(qū)別橙喘。OSI 參考模型注重“通信協(xié)議必要的功能是什么”,而 TCP/IP 則更強調(diào)“在計算機上實現(xiàn)協(xié)議應(yīng)該開發(fā)哪種程序”胶逢。
二厅瞎、 TCP/IP 基礎(chǔ)
1. TCP/IP 的具體含義
從字面意義上講饰潜,有人可能會認(rèn)為 TCP/IP 是指 TCP 和 IP 兩種協(xié)議。實際生活當(dāng)中有時也確實就是指這兩種協(xié)議磁奖。然而在很多情況下囊拜,它只是利用 IP 進行通信時所必須用到的協(xié)議群的統(tǒng)稱某筐。具體來說比搭,IP 或 ICMP、TCP 或 UDP南誊、TELNET 或 FTP身诺、以及 HTTP 等都屬于 TCP/IP 協(xié)議。他們與 TCP 或 IP 的關(guān)系緊密抄囚,是互聯(lián)網(wǎng)必不可少的組成部分霉赡。TCP/IP 一詞泛指這些協(xié)議,因此幔托,有時也稱 TCP/IP 為網(wǎng)際協(xié)議群穴亏。
互聯(lián)網(wǎng)進行通信時,需要相應(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é)議刺覆。
網(wǎng)際協(xié)議群
2. 數(shù)據(jù)包
包、幀史煎、數(shù)據(jù)包谦屑、段、消息
以上五個術(shù)語都用來表述數(shù)據(jù)的單位篇梭,大致區(qū)分如下:
包可以說是全能性術(shù)語氢橙;
幀用于表示數(shù)據(jù)鏈路層中包的單位;
數(shù)據(jù)包是 IP 和 UDP 等網(wǎng)絡(luò)層以上的分層中包的單位恬偷;
段則表示 TCP 數(shù)據(jù)流中的信息充蓝;
消息是指應(yīng)用協(xié)議中數(shù)據(jù)的單位。
每個分層中喉磁,都會對所發(fā)送的數(shù)據(jù)附加一個首部谓苟,在這個首部中包含了該層必要的信息,如發(fā)送的目標(biāo)地址以及協(xié)議相關(guān)信息协怒。通常涝焙,為協(xié)議提供的信息為包首部,所要發(fā)送的內(nèi)容為數(shù)據(jù)孕暇。在下一層的角度看仑撞,從上一層收到的包全部都被認(rèn)為是本層的數(shù)據(jù)赤兴。
數(shù)據(jù)包首部
網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包由兩部分組成:一部分是協(xié)議所要用到的首部,另一部分是上一層傳過來的數(shù)據(jù)隧哮。首部的結(jié)構(gòu)由協(xié)議的具體規(guī)范詳細定義桶良。在數(shù)據(jù)包的首部,明確標(biāo)明了協(xié)議應(yīng)該如何讀取數(shù)據(jù)沮翔。反過來說陨帆,看到首部,也就能夠了解該協(xié)議必要的信息以及所要處理的數(shù)據(jù)采蚀。包首部就像協(xié)議的臉疲牵。
3. 數(shù)據(jù)處理流程
下圖以用戶 a 向用戶 b 發(fā)送郵件為例子:
數(shù)據(jù)處理流程
① 應(yīng)用程序處理
首先應(yīng)用程序會進行編碼處理,這些編碼相當(dāng)于 OSI 的表示層功能榆鼠;
編碼轉(zhuǎn)化后纲爸,郵件不一定馬上被發(fā)送出去,這種何時建立通信連接何時發(fā)送數(shù)據(jù)的管理功能妆够,相當(dāng)于 OSI 的會話層功能识啦。
② TCP 模塊的處理
TCP 根據(jù)應(yīng)用的指示渴语,負責(zé)建立連接诬辈、發(fā)送數(shù)據(jù)以及斷開連接。TCP 提供將應(yīng)用層發(fā)來的數(shù)據(jù)順利發(fā)送至對端的可靠傳輸零抬。為了實現(xiàn)這一功能灾螃,需要在應(yīng)用層數(shù)據(jù)的前端附加一個 TCP 首部题翻。
③ IP 模塊的處理
IP 將 TCP 傳過來的 TCP 首部和 TCP 數(shù)據(jù)合起來當(dāng)做自己的數(shù)據(jù),并在 TCP 首部的前端加上自己的 IP 首部腰鬼。IP 包生成后嵌赠,參考路由控制表決定接受此 IP 包的路由或主機。
④ 網(wǎng)絡(luò)接口(以太網(wǎng)驅(qū)動)的處理
從 IP 傳過來的 IP 包對于以太網(wǎng)來說就是數(shù)據(jù)熄赡。給這些數(shù)據(jù)附加上以太網(wǎng)首部并進行發(fā)送處理姜挺,生成的以太網(wǎng)數(shù)據(jù)包將通過物理層傳輸給接收端。
⑤ 網(wǎng)絡(luò)接口(以太網(wǎng)驅(qū)動)的處理
主機收到以太網(wǎng)包后彼硫,首先從以太網(wǎng)包首部找到 MAC 地址判斷是否為發(fā)送給自己的包炊豪,若不是則丟棄數(shù)據(jù)。
如果是發(fā)送給自己的包拧篮,則從以太網(wǎng)包首部中的類型確定數(shù)據(jù)類型词渤,再傳給相應(yīng)的模塊,如 IP串绩、ARP 等缺虐。這里的例子則是 IP 。
⑥ IP 模塊的處理
IP 模塊接收到 數(shù)據(jù)后也做類似的處理礁凡。從包首部中判斷此 IP 地址是否與自己的 IP 地址匹配高氮,如果匹配則根據(jù)首部的協(xié)議類型將數(shù)據(jù)發(fā)送給對應(yīng)的模塊慧妄,如 TCP、UDP剪芍。這里的例子則是 TCP塞淹。
另外嗎,對于有路由器的情況罪裹,接收端地址往往不是自己的地址饱普,此時,需要借助路由控制表坊谁,在調(diào)查應(yīng)該送往的主機或路由器之后再進行轉(zhuǎn)發(fā)數(shù)據(jù)费彼。
⑦ TCP 模塊的處理
在 TCP 模塊中滑臊,首先會計算一下校驗和口芍,判斷數(shù)據(jù)是否被破壞。然后檢查是否在按照序號接收數(shù)據(jù)雇卷。最后檢查端口號鬓椭,確定具體的應(yīng)用程序。數(shù)據(jù)被完整地接收以后关划,會傳給由端口號識別的應(yīng)用程序小染。
⑧ 應(yīng)用程序的處理
接收端應(yīng)用程序會直接接收發(fā)送端發(fā)送的數(shù)據(jù)。通過解析數(shù)據(jù)贮折,展示相應(yīng)的內(nèi)容裤翩。
三、傳輸層中的 TCP 和 UDP
TCP/IP 中有兩個具有代表性的傳輸層協(xié)議调榄,分別是 TCP 和 UDP踊赠。
TCP 是面向連接的、可靠的流協(xié)議每庆。流就是指不間斷的數(shù)據(jù)結(jié)構(gòu)筐带,當(dāng)應(yīng)用程序采用 TCP 發(fā)送消息時,雖然可以保證發(fā)送的順序缤灵,但還是猶如沒有任何間隔的數(shù)據(jù)流發(fā)送給接收端伦籍。TCP 為提供可靠性傳輸,實行“順序控制”或“重發(fā)控制”機制腮出。此外還具備“流控制(流量控制)”帖鸦、“擁塞控制”、提高網(wǎng)絡(luò)利用率等眾多功能胚嘲。
UDP 是不具有可靠性的數(shù)據(jù)報協(xié)議作儿。細微的處理它會交給上層的應(yīng)用去完成。在 UDP 的情況下慢逾,雖然可以確保發(fā)送消息的大小立倍,卻不能保證消息一定會到達灭红。因此,應(yīng)用有時會根據(jù)自己的需要進行重發(fā)處理口注。
TCP 和 UDP 的優(yōu)缺點無法簡單地变擒、絕對地去做比較:TCP 用于在傳輸層有必要實現(xiàn)可靠傳輸?shù)那闆r;而在一方面寝志,UDP 主要用于那些對高速傳輸和實時性有較高要求的通信或廣播通信娇斑。TCP 和 UDP 應(yīng)該根據(jù)應(yīng)用的目的按需使用。
1. 端口號
數(shù)據(jù)鏈路和 IP 中的地址材部,分別指的是 MAC 地址和 IP 地址毫缆。前者用來識別同一鏈路中不同的計算機,后者用來識別 TCP/IP? 網(wǎng)絡(luò)中互連的主機和路由器乐导。在傳輸層也有這種類似于地址的概念苦丁,那就是端口號。端口號用來識別同一臺計算機中進行通信的不同應(yīng)用程序物臂。因此旺拉,它也被稱為程序地址。
1.1 根據(jù)端口號識別應(yīng)用
一臺計算機上同時可以運行多個程序棵磷。傳輸層協(xié)議正是利用這些端口號識別本機中正在進行通信的應(yīng)用程序蛾狗,并準(zhǔn)確地將數(shù)據(jù)傳輸。
通過端口號識別應(yīng)用
1.2 通過 IP 地址仪媒、端口號沉桌、協(xié)議號進行通信識別
僅憑目標(biāo)端口號識別某一個通信是遠遠不夠的。
通過端口號算吩、IP地址留凭、協(xié)議號進行通信識別
① 和② 的通信是在兩臺計算機上進行的。它們的目標(biāo)端口號相同赌莺,都是80冰抢。這里可以根據(jù)源端口號加以區(qū)分。
③ 和 ① 的目標(biāo)端口號和源端口號完全相同艘狭,但它們各自的源 IP 地址不同挎扰。
此外,當(dāng) IP 地址和端口號全都一樣時巢音,我們還可以通過協(xié)議號來區(qū)分(TCP 和 UDP)遵倦。
1.3 端口號的確定
標(biāo)準(zhǔn)既定的端口號:這種方法也叫靜態(tài)方法。它是指每個應(yīng)用程序都有其指定的端口號官撼。但并不是說可以隨意使用任何一個端口號梧躺。例如 HTTP、FTP、TELNET 等廣為使用的應(yīng)用協(xié)議中所使用的端口號就是固定的掠哥。這些端口號被稱為知名端口號巩踏,分布在 0~1023 之間;除知名端口號之外续搀,還有一些端口號被正式注冊塞琼,它們分布在 1024~49151 之間,不過這些端口號可用于任何通信用途禁舷。
時序分配法:服務(wù)器有必要確定監(jiān)聽端口號彪杉,但是接受服務(wù)的客戶端沒必要確定端口號。在這種方法下牵咙,客戶端應(yīng)用程序完全可以不用自己設(shè)置端口號派近,而全權(quán)交給操作系統(tǒng)進行分配。動態(tài)分配的端口號范圍在 49152~65535 之間洁桌。
1.4 端口號與協(xié)議
端口號由其使用的傳輸層協(xié)議決定渴丸。因此,不同的傳輸層協(xié)議可以使用相同的端口號战坤。
此外曙强,那些知名端口號與傳輸層協(xié)議并無關(guān)系残拐。只要端口一致都將分配同一種應(yīng)用程序進行處理途茫。
2. UDP
UDP 不提供復(fù)雜的控制機制,利用 IP 提供面向無連接的通信服務(wù)溪食。
并且它是將應(yīng)用程序發(fā)來的數(shù)據(jù)在收到的那一刻囊卜,立即按照原樣發(fā)送到網(wǎng)絡(luò)上的一種機制。即使是出現(xiàn)網(wǎng)絡(luò)擁堵的情況错沃,UDP 也無法進行流量控制等避免網(wǎng)絡(luò)擁塞行為栅组。
此外,傳輸途中出現(xiàn)丟包枢析,UDP 也不負責(zé)重發(fā)玉掸。
甚至當(dāng)包的到達順序出現(xiàn)亂序時也沒有糾正的功能。
如果需要以上的細節(jié)控制醒叁,不得不交由采用 UDP 的應(yīng)用程序去處理司浪。
UDP 常用于一下幾個方面:1.包總量較少的通信(DNS、SNMP等)把沼;2.視頻啊易、音頻等多媒體通信(即時通信);3.限定于 LAN 等特定網(wǎng)絡(luò)中的應(yīng)用通信饮睬;4.廣播通信(廣播租谈、多播)。
3. TCP
TCP 與 UDP 的區(qū)別相當(dāng)大捆愁。它充分地實現(xiàn)了數(shù)據(jù)傳輸時各種控制功能割去,可以進行丟包時的重發(fā)控制窟却,還可以對次序亂掉的分包進行順序控制。而這些在 UDP 中都沒有呻逆。
此外间校,TCP 作為一種面向有連接的協(xié)議,只有在確認(rèn)通信對端存在時才會發(fā)送數(shù)據(jù)页慷,從而可以控制通信流量的浪費憔足。
根據(jù) TCP 的這些機制,在 IP 這種無連接的網(wǎng)絡(luò)上也能夠?qū)崿F(xiàn)高可靠性的通信( 主要通過檢驗和酒繁、序列號滓彰、確認(rèn)應(yīng)答、重發(fā)控制州袒、連接管理以及窗口控制等機制實現(xiàn))揭绑。
3.1 三次握手(重點)
TCP 提供面向有連接的通信傳輸。面向有連接是指在數(shù)據(jù)通信開始之前先做好兩端之間的準(zhǔn)備工作郎哭。
所謂三次握手是指建立一個 TCP 連接時需要客戶端和服務(wù)器端總共發(fā)送三個包以確認(rèn)連接的建立他匪。在socket編程中,這一過程由客戶端執(zhí)行connect來觸發(fā)夸研。
下面來看看三次握手的流程圖:
三次握手
第一次握手:客戶端將標(biāo)志位SYN置為1邦蜜,隨機產(chǎn)生一個值seq=J,并將該數(shù)據(jù)包發(fā)送給服務(wù)器端亥至,客戶端進入SYN_SENT狀態(tài)悼沈,等待服務(wù)器端確認(rèn)。
第二次握手:服務(wù)器端收到數(shù)據(jù)包后由標(biāo)志位SYN=1知道客戶端請求建立連接姐扮,服務(wù)器端將標(biāo)志位SYN和ACK都置為1絮供,ack=J+1,隨機產(chǎn)生一個值seq=K茶敏,并將該數(shù)據(jù)包發(fā)送給客戶端以確認(rèn)連接請求壤靶,服務(wù)器端進入SYN_RCVD狀態(tài)。
第三次握手:客戶端收到確認(rèn)后惊搏,檢查ack是否為J+1贮乳,ACK是否為1,如果正確則將標(biāo)志位ACK置為1胀屿,ack=K+1塘揣,并將該數(shù)據(jù)包發(fā)送給服務(wù)器端,服務(wù)器端檢查ack是否為K+1宿崭,ACK是否為1亲铡,如果正確則連接建立成功,客戶端和服務(wù)器端進入ESTABLISHED狀態(tài),完成三次握手奖蔓,隨后客戶端與服務(wù)器端之間可以開始傳輸數(shù)據(jù)了赞草。
3.2 四次揮手(重點)
四次揮手即終止TCP連接,就是指斷開一個TCP連接時吆鹤,需要客戶端和服務(wù)端總共發(fā)送4個包以確認(rèn)連接的斷開厨疙。在socket編程中,這一過程由客戶端或服務(wù)端任一方執(zhí)行close來觸發(fā)疑务。
由于TCP連接是全雙工的沾凄,因此,每個方向都必須要單獨進行關(guān)閉知允,這一原則是當(dāng)一方完成數(shù)據(jù)發(fā)送任務(wù)后撒蟀,發(fā)送一個FIN來終止這一方向的連接,收到一個FIN只是意味著這一方向上沒有數(shù)據(jù)流動了温鸽,即不會再收到數(shù)據(jù)了保屯,但是在這個TCP連接上仍然能夠發(fā)送數(shù)據(jù),直到這一方向也發(fā)送了FIN涤垫。首先進行關(guān)閉的一方將執(zhí)行主動關(guān)閉姑尺,而另一方則執(zhí)行被動關(guān)閉。
下面來看看四次揮手的流程圖:
四次揮手
中斷連接端可以是客戶端蝠猬,也可以是服務(wù)器端切蟋。
第一次揮手:客戶端發(fā)送一個FIN=M,用來關(guān)閉客戶端到服務(wù)器端的數(shù)據(jù)傳送吱雏,客戶端進入FIN_WAIT_1狀態(tài)敦姻。意思是說"我客戶端沒有數(shù)據(jù)要發(fā)給你了",但是如果你服務(wù)器端還有數(shù)據(jù)沒有發(fā)送完成歧杏,則不必急著關(guān)閉連接,可以繼續(xù)發(fā)送數(shù)據(jù)迷守。
第二次揮手:服務(wù)器端收到FIN后犬绒,先發(fā)送ack=M+1,告訴客戶端兑凿,你的請求我收到了凯力,但是我還沒準(zhǔn)備好,請繼續(xù)你等我的消息礼华。這個時候客戶端就進入FIN_WAIT_2 狀態(tài)咐鹤,繼續(xù)等待服務(wù)器端的FIN報文。
第三次揮手:當(dāng)服務(wù)器端確定數(shù)據(jù)已發(fā)送完成圣絮,則向客戶端發(fā)送FIN=N報文祈惶,告訴客戶端,好了,我這邊數(shù)據(jù)發(fā)完了捧请,準(zhǔn)備好關(guān)閉連接了凡涩。服務(wù)器端進入LAST_ACK狀態(tài)。
第四次揮手:客戶端收到FIN=N報文后疹蛉,就知道可以關(guān)閉連接了活箕,但是他還是不相信網(wǎng)絡(luò),怕服務(wù)器端不知道要關(guān)閉可款,所以發(fā)送ack=N+1后進入TIME_WAIT狀態(tài)育韩,如果Server端沒有收到ACK則可以重傳。服務(wù)器端收到ACK后闺鲸,就知道可以斷開連接了座慰。客戶端等待了2MSL后依然沒有收到回復(fù)翠拣,則證明服務(wù)器端已正常關(guān)閉版仔,那好,我客戶端也可以關(guān)閉連接了误墓。最終完成了四次握手蛮粮。
上面是一方主動關(guān)閉,另一方被動關(guān)閉的情況谜慌,實際中還會出現(xiàn)同時發(fā)起主動關(guān)閉的情況然想,
具體流程如下圖:
同時揮手
3.3 通過序列號與確認(rèn)應(yīng)答提高可靠性
在 TCP 中,當(dāng)發(fā)送端的數(shù)據(jù)到達接收主機時欣范,接收端主機會返回一個已收到消息的通知变泄。這個消息叫做確認(rèn)應(yīng)答(ACK)。當(dāng)發(fā)送端將數(shù)據(jù)發(fā)出之后會等待對端的確認(rèn)應(yīng)答恼琼。如果有確認(rèn)應(yīng)答妨蛹,說明數(shù)據(jù)已經(jīng)成功到達對端。反之晴竞,則數(shù)據(jù)丟失的可能性很大蛙卤。
在一定時間內(nèi)沒有等待到確認(rèn)應(yīng)答,發(fā)送端就可以認(rèn)為數(shù)據(jù)已經(jīng)丟失噩死,并進行重發(fā)颤难。由此,即使產(chǎn)生了丟包已维,仍然能夠保證數(shù)據(jù)能夠到達對端行嗤,實現(xiàn)可靠傳輸。
未收到確認(rèn)應(yīng)答并不意味著數(shù)據(jù)一定丟失垛耳。也有可能是數(shù)據(jù)對方已經(jīng)收到栅屏,只是返回的確認(rèn)應(yīng)答在途中丟失飘千。這種情況也會導(dǎo)致發(fā)送端誤以為數(shù)據(jù)沒有到達目的地而重發(fā)數(shù)據(jù)。
此外既琴,也有可能因為一些其他原因?qū)е麓_認(rèn)應(yīng)答延遲到達占婉,在源主機重發(fā)數(shù)據(jù)以后才到達的情況也屢見不鮮。此時甫恩,源主機只要按照機制重發(fā)數(shù)據(jù)即可逆济。
對于目標(biāo)主機來說,反復(fù)收到相同的數(shù)據(jù)是不可取的磺箕。為了對上層應(yīng)用提供可靠的傳輸奖慌,目標(biāo)主機必須放棄重復(fù)的數(shù)據(jù)包。為此我們引入了序列號松靡。
序列號是按照順序給發(fā)送數(shù)據(jù)的每一個字節(jié)(8位字節(jié))都標(biāo)上號碼的編號简僧。接收端查詢接收數(shù)據(jù) TCP 首部中的序列號和數(shù)據(jù)的長度,將自己下一步應(yīng)該接收的序列號作為確認(rèn)應(yīng)答返送回去雕欺。通過序列號和確認(rèn)應(yīng)答號岛马,TCP 能夠識別是否已經(jīng)接收數(shù)據(jù),又能夠判斷是否需要接收屠列,從而實現(xiàn)可靠傳輸啦逆。
序列號和確認(rèn)應(yīng)答
3.4 重發(fā)超時的確定
重發(fā)超時是指在重發(fā)數(shù)據(jù)之前,等待確認(rèn)應(yīng)答到來的那個特定時間間隔笛洛。如果超過這個時間仍未收到確認(rèn)應(yīng)答夏志,發(fā)送端將進行數(shù)據(jù)重發(fā)。最理想的是苛让,找到一個最小時間沟蔑,它能保證“確認(rèn)應(yīng)答一定能在這個時間內(nèi)返回”。
TCP 要求不論處在何種網(wǎng)絡(luò)環(huán)境下都要提供高性能通信狱杰,并且無論網(wǎng)絡(luò)擁堵情況發(fā)生何種變化瘦材,都必須保持這一特性。為此浦旱,它在每次發(fā)包時都會計算往返時間及其偏差宇色。將這個往返時間和偏差時間相加,重發(fā)超時的時間就是比這個總和要稍大一點的值颁湖。
在 BSD 的 Unix 以及 Windows 系統(tǒng)中,超時都以0.5秒為單位進行控制例隆,因此重發(fā)超時都是0.5秒的整數(shù)倍甥捺。不過,最初其重發(fā)超時的默認(rèn)值一般設(shè)置為6秒左右镀层。
數(shù)據(jù)被重發(fā)之后若還是收不到確認(rèn)應(yīng)答镰禾,則進行再次發(fā)送皿曲。此時,等待確認(rèn)應(yīng)答的時間將會以2倍吴侦、4倍的指數(shù)函數(shù)延長屋休。
此外,數(shù)據(jù)也不會被無限备韧、反復(fù)地重發(fā)劫樟。達到一定重發(fā)次數(shù)之后,如果仍沒有任何確認(rèn)應(yīng)答返回织堂,就會判斷為網(wǎng)絡(luò)或?qū)Χ酥鳈C發(fā)生了異常叠艳,強制關(guān)閉連接。并且通知應(yīng)用通信異常強行終止易阳。
3.5 以段為單位發(fā)送數(shù)據(jù)
在建立 TCP 連接的同時附较,也可以確定發(fā)送數(shù)據(jù)包的單位,我們也可以稱其為“最大消息長度”(MSS)潦俺。最理想的情況是拒课,最大消息長度正好是 IP 中不會被分片處理的最大數(shù)據(jù)長度。
TCP 在傳送大量數(shù)據(jù)時事示,是以 MSS 的大小將數(shù)據(jù)進行分割發(fā)送早像。進行重發(fā)時也是以 MSS? 為單位。
MSS 在三次握手的時候很魂,在兩端主機之間被計算得出扎酷。兩端的主機在發(fā)出建立連接的請求時,會在 TCP 首部中寫入 MSS? 選項遏匆,告訴對方自己的接口能夠適應(yīng)的 MSS 的大小法挨。然后會在兩者之間選擇一個較小的值投入使用。
3.6 利用窗口控制提高速度
TCP 以1個段為單位幅聘,每發(fā)送一個段進行一次確認(rèn)應(yīng)答的處理凡纳。這樣的傳輸方式有一個缺點,就是包的往返時間越長通信性能就越低帝蒿。
為解決這個問題荐糜,TCP 引入了窗口這個概念。確認(rèn)應(yīng)答不再是以每個分段葛超,而是以更大的單位進行確認(rèn)暴氏,轉(zhuǎn)發(fā)時間將會被大幅地縮短。也就是說绣张,發(fā)送端主機答渔,在發(fā)送了一個段以后不必要一直等待確認(rèn)應(yīng)答,而是繼續(xù)發(fā)送侥涵。如下圖所示:
窗口控制
窗口大小就是指無需等待確認(rèn)應(yīng)答而可以繼續(xù)發(fā)送數(shù)據(jù)的最大值沼撕。上圖中窗口大小為4個段宋雏。這個機制實現(xiàn)了使用大量的緩沖區(qū),通過對多個段同時進行確認(rèn)應(yīng)答的功能务豺。
3.7 滑動窗口控制
滑動窗口
上圖中的窗口內(nèi)的數(shù)據(jù)即便沒有收到確認(rèn)應(yīng)答也可以被發(fā)送出去磨总。不過,在整個窗口的確認(rèn)應(yīng)答沒有到達之前笼沥,如果其中部分?jǐn)?shù)據(jù)出現(xiàn)丟包蚪燕,那么發(fā)送端仍然要負責(zé)重傳。為此敬拓,發(fā)送端主機需要設(shè)置緩存保留這些待被重傳的數(shù)據(jù)邻薯,直到收到他們的確認(rèn)應(yīng)答。
在滑動窗口以外的部分包括未發(fā)送的數(shù)據(jù)以及已經(jīng)確認(rèn)對端已收到的數(shù)據(jù)乘凸。當(dāng)數(shù)據(jù)發(fā)出后若如期收到確認(rèn)應(yīng)答就可以不用再進行重發(fā)厕诡,此時數(shù)據(jù)就可以從緩存區(qū)清除。
收到確認(rèn)應(yīng)答的情況下营勤,將窗口滑動到確認(rèn)應(yīng)答中的序列號的位置灵嫌。這樣可以順序地將多個段同時發(fā)送提高通信性能。這種機制也別稱為滑動窗口控制葛作。
3.8 窗口控制中的重發(fā)控制
在使用窗口控制中寿羞, 出現(xiàn)丟包一般分為兩種情況:
① 確認(rèn)應(yīng)答未能返回的情況。在這種情況下赂蠢,數(shù)據(jù)已經(jīng)到達對端绪穆,是不需要再進行重發(fā)的,如下圖:
部分確認(rèn)應(yīng)答丟失
② 某個報文段丟失的情況虱岂。接收主機如果收到一個自己應(yīng)該接收的序列號以外的數(shù)據(jù)時玖院,會針對當(dāng)前為止收到數(shù)據(jù)返回確認(rèn)應(yīng)答。如下圖所示第岖,當(dāng)某一報文段丟失后难菌,發(fā)送端會一直收到序號為1001的確認(rèn)應(yīng)答,因此蔑滓,在窗口比較大郊酒,又出現(xiàn)報文段丟失的情況下,同一個序列號的確認(rèn)應(yīng)答將會被重復(fù)不斷地返回键袱。而發(fā)送端主機如果連續(xù)3次收到同一個確認(rèn)應(yīng)答燎窘,就會將其對應(yīng)的數(shù)據(jù)進行重發(fā)。這種機制比之前提到的超時管理更加高效蹄咖,因此也被稱為高速重發(fā)控制荠耽。
高速重發(fā)控制
四、網(wǎng)絡(luò)層中的 IP 協(xié)議
IP(IPv4比藻、IPv6)相當(dāng)于 OSI 參考模型中的第3層——網(wǎng)絡(luò)層铝量。網(wǎng)絡(luò)層的主要作用是“實現(xiàn)終端節(jié)點之間的通信”。這種終端節(jié)點之間的通信也叫“點對點通信”银亲。
網(wǎng)絡(luò)的下一層——數(shù)據(jù)鏈路層的主要作用是在互連同一種數(shù)據(jù)鏈路的節(jié)點之間進行包傳遞慢叨。而一旦跨越多種數(shù)據(jù)鏈路寻定,就需要借助網(wǎng)絡(luò)層枝哄。網(wǎng)絡(luò)層可以跨越不同的數(shù)據(jù)鏈路轴咱,即使是在不同的數(shù)據(jù)鏈路上也能實現(xiàn)兩端節(jié)點之間的數(shù)據(jù)包傳輸褒侧。
IP 大致分為三大作用模塊谦铃,它們是 IP 尋址堰塌、路由(最終節(jié)點為止的轉(zhuǎn)發(fā))以及 IP 分包與組包扩氢。
1. IP 地址
1.1 IP 地址概述
在計算機通信中换衬,為了識別通信對端院喜,必須要有一個類似于地址的識別碼進行標(biāo)識亡蓉。在數(shù)據(jù)鏈路中的 MAC 地址正是用來標(biāo)識同一個鏈路中不同計算機的一種識別碼。
作為網(wǎng)絡(luò)層的 IP ,也有這種地址信息喷舀,一般叫做 IP 地址砍濒。IP 地址用于在“連接到網(wǎng)絡(luò)中的所有主機中識別出進行通信的目標(biāo)地址”。因此硫麻,在 TCP/IP 通信中所有主機或路由器必須設(shè)定自己的 IP 地址爸邢。
不論一臺主機與哪種數(shù)據(jù)鏈路連接,其 IP 地址的形式都保持不變拿愧。
IP 地址(IPv4 地址)由32位正整數(shù)來表示杠河。IP 地址在計算機內(nèi)部以二進制方式被處理。然而浇辜,由于我們并不習(xí)慣于采用二進制方式券敌,我們將32位的 IP 地址以每8位為一組,分成4組奢赂,每組以 “.” 隔開陪白,再將每組數(shù)轉(zhuǎn)換成十進制數(shù)。如下:
28282828
10101100000101000000000100000001(2進制)
10101100.00010100.00000001.00000001(2進制)
172.20.1.1(10進制)
1.2 IP 地址由網(wǎng)絡(luò)和主機兩部分標(biāo)識組成
如下圖膳灶,網(wǎng)絡(luò)標(biāo)識在數(shù)據(jù)鏈路的每個段配置不同的值咱士。網(wǎng)絡(luò)標(biāo)識必須保證相互連接的每個段的地址不相重復(fù)。而相同段內(nèi)相連的主機必須有相同的網(wǎng)絡(luò)地址轧钓。IP 地址的“主機標(biāo)識”則不允許在同一個網(wǎng)段內(nèi)重復(fù)出現(xiàn)序厉。由此,可以通過設(shè)置網(wǎng)絡(luò)地址和主機地址毕箍,在相互連接的整個網(wǎng)絡(luò)中保證每臺主機的 IP 地址都不會相互重疊弛房。即 IP 地址具有了唯一性。
IP地址的主機標(biāo)識
如下圖而柑,IP 包被轉(zhuǎn)發(fā)到途中某個路由器時文捶,正是利用目標(biāo) IP 地址的網(wǎng)絡(luò)標(biāo)識進行路由荷逞。因為即使不看主機標(biāo)識,只要一見到網(wǎng)絡(luò)標(biāo)識就能判斷出是否為該網(wǎng)段內(nèi)的主機粹排。
IP地址的網(wǎng)絡(luò)標(biāo)識
1.3 IP 地址的分類
IP 地址分為四個級別种远,分別為A類、B類顽耳、C類坠敷、D類。它根據(jù) IP 地址中從第 1 位到第 4 位的比特列對其網(wǎng)絡(luò)標(biāo)識和主機標(biāo)識進行區(qū)分射富。
A 類 IP 地址是首位以 “0” 開頭的地址膝迎。從第 1 位到第 8 位是它的網(wǎng)絡(luò)標(biāo)識。用十進制表示的話胰耗,0.0.0.0~127.0.0.0 是 A 類的網(wǎng)絡(luò)地址限次。A 類地址的后 24 位相當(dāng)于主機標(biāo)識。因此宪郊,一個網(wǎng)段內(nèi)可容納的主機地址上限為16,777,214個掂恕。
B 類 IP 地址是前兩位 “10” 的地址。從第 1 位到第 16 位是它的網(wǎng)絡(luò)標(biāo)識弛槐。用十進制表示的話懊亡,128.0.0.0~191.255.0.0 是 B 類的網(wǎng)絡(luò)地址。B 類地址的后 16 位相當(dāng)于主機標(biāo)識乎串。因此店枣,一個網(wǎng)段內(nèi)可容納的主機地址上限為65,534個。
C 類 IP 地址是前三位為 “110” 的地址叹誉。從第 1 位到第 24 位是它的網(wǎng)絡(luò)標(biāo)識鸯两。用十進制表示的話,192.0.0.0~223.255.255.0 是 C 類的網(wǎng)絡(luò)地址长豁。C 類地址的后 8 位相當(dāng)于主機標(biāo)識钧唐。因此,一個網(wǎng)段內(nèi)可容納的主機地址上限為254個匠襟。
D 類 IP 地址是前四位為 “1110” 的地址钝侠。從第 1 位到第 32 位是它的網(wǎng)絡(luò)標(biāo)識。用十進制表示的話酸舍,224.0.0.0~239.255.255.255 是 D 類的網(wǎng)絡(luò)地址帅韧。D 類地址沒有主機標(biāo)識,常用于多播啃勉。
在分配 IP 地址時關(guān)于主機標(biāo)識有一點需要注意忽舟。即要用比特位表示主機地址時,不可以全部為 0 或全部為 1。因為全部為 0 只有在表示對應(yīng)的網(wǎng)絡(luò)地址或 IP 地址不可以獲知的情況下才使用叮阅。而全部為 1 的主機通常作為廣播地址刁品。因此,在分配過程中帘饶,應(yīng)該去掉這兩種情況哑诊。這也是為什么 C 類地址每個網(wǎng)段最多只能有 254( 28- 2 = 254)個主機地址的原因。
1.4 廣播地址
廣播地址用于在同一個鏈路中相互連接的主機之間發(fā)送數(shù)據(jù)包及刻。將 IP 地址中的主機地址部分全部設(shè)置為 1,就成了廣播地址竞阐。
廣播分為本地廣播和直接廣播兩種缴饭。在本網(wǎng)絡(luò)內(nèi)的廣播叫做本地廣播;在不同網(wǎng)絡(luò)之間的廣播叫做直接廣播骆莹。
1.5 IP 多播
多播用于將包發(fā)送給特定組內(nèi)的所有主機颗搂。由于其直接使用 IP 地址,因此也不存在可靠傳輸幕垦。
相比于廣播丢氢,多播既可以穿透路由器,又可以實現(xiàn)只給那些必要的組發(fā)送數(shù)據(jù)包先改。請看下圖:
IP 多播
多播使用 D 類地址疚察。因此,如果從首位開始到第 4 位是 “1110”仇奶,就可以認(rèn)為是多播地址貌嫡。而剩下的 28 位可以成為多播的組編號。
此外该溯, 對于多播岛抄,所有的主機(路由器以外的主機和終端主機)必須屬于 224.0.0.1 的組,所有的路由器必須屬于 224.0.0.2 的組狈茉。
1.6 子網(wǎng)掩碼
現(xiàn)在一個 IP 地址的網(wǎng)絡(luò)標(biāo)識和主機標(biāo)識已不再受限于該地址的類別夫椭,而是由一個叫做“子網(wǎng)掩碼”的識別碼通過子網(wǎng)網(wǎng)絡(luò)地址細分出比 A 類、B 類氯庆、C 類更小粒度的網(wǎng)絡(luò)蹭秋。這種方式實際上就是將原來 A 類、B 類点晴、C 類等分類中的主機地址部分用作子網(wǎng)地址感凤,可以將原網(wǎng)絡(luò)分為多個物理網(wǎng)絡(luò)的一種機制。
子網(wǎng)掩碼用二進制方式表示的話粒督,也是一個 32 位的數(shù)字陪竿。它對應(yīng) IP 地址網(wǎng)絡(luò)標(biāo)識部分的位全部為 “1”,對應(yīng) IP 地址主機標(biāo)識的部分則全部為 “0”。由此族跛,一個 IP 地址可以不再受限于自己的類別闰挡,而是可以用這樣的子網(wǎng)掩碼自由地定位自己的網(wǎng)絡(luò)標(biāo)識長度。當(dāng)然礁哄,子網(wǎng)掩碼必須是 IP 地址的首位開始連續(xù)的 “1”长酗。
對于子網(wǎng)掩碼,目前有兩種表示方式桐绒。第一種是夺脾,將 IP 地址與子網(wǎng)掩碼的地址分別用兩行來表示。以 172.20.100.52 的前 26 位是網(wǎng)絡(luò)地址的情況為例茉继,如下:
IP 地址172.20.100.52
子網(wǎng)掩碼255.255.255.192
網(wǎng)絡(luò)地址172.20.100.0
子網(wǎng)掩碼255.255.255.192
廣播地址172.20.100.63
子網(wǎng)掩碼255.255.255.192
第二種表示方式是咧叭,在每個 IP 地址后面追加網(wǎng)絡(luò)地址的位數(shù)用 “/ ” 隔開,如下:
IP 地址172.20.100.52/ 26
網(wǎng)絡(luò)地址172.20.100.0/ 26
廣播地址172.20.100.63/ 26
另外烁竭,在第二種方式下記述網(wǎng)絡(luò)地址時可以省略后面的 “0” 菲茬。例如:172.20.0.0/26 跟 172.20/26 其實是一個意思。
2. 路由
發(fā)送數(shù)據(jù)包時所使用的地址是網(wǎng)絡(luò)層的地址派撕,即 IP 地址婉弹。然而僅僅有 IP 地址還不足以實現(xiàn)將數(shù)據(jù)包發(fā)送到對端目標(biāo)地址,在數(shù)據(jù)發(fā)送過程中還需要類似于“指明路由器或主機”的信息终吼,以便真正發(fā)往目標(biāo)地址镀赌。保存這種信息的就是路由控制表。
該路由控制表的形成方式有兩種:一種是管理員手動設(shè)置衔峰,另一種是路由器與其他路由器相互交換信息時自動刷新佩脊。前者也叫做靜態(tài)路由控制,而后者叫做動態(tài)路由控制垫卤。
IP 協(xié)議始終認(rèn)為路由表是正確的威彰。然后,IP 本身并沒有定義制作路由控制表的協(xié)議穴肘。即 IP 沒有制作路由控制表的機制歇盼。該表示由一個叫做“路由協(xié)議”的協(xié)議制作而成。
2.1 IP 地址與路由控制
IP 地址的網(wǎng)絡(luò)地址部分用于進行路由控制评抚。
路由控制表中記錄著網(wǎng)絡(luò)地址與下一步應(yīng)該發(fā)送至路由器的地址豹缀。
在發(fā)送 IP 包時,首先要確定 IP 包首部中的目標(biāo)地址慨代,再從路由控制表中找到與該地址具有相同網(wǎng)絡(luò)地址的記錄邢笙,根據(jù)該記錄將 IP 包轉(zhuǎn)發(fā)給相應(yīng)的下一個路由器。如果路由控制表中存在多條相同網(wǎng)絡(luò)地址的記錄侍匙,就選擇一個最為吻合的網(wǎng)絡(luò)地址氮惯。
路由控制表與 IP 包發(fā)送
3. IP 分包與組包
每種數(shù)據(jù)鏈路的最大傳輸單元(MTU)都不盡相同,因為每個不同類型的數(shù)據(jù)鏈路的使用目的不同。使用目的不同妇汗,可承載的 MTU 也就不同帘不。
任何一臺主機都有必要對 IP 分片進行相應(yīng)的處理。分片往往在網(wǎng)絡(luò)上遇到比較大的報文無法一下子發(fā)送出去時才會進行處理杨箭。
經(jīng)過分片之后的 IP 數(shù)據(jù)報在被重組的時候寞焙,只能由目標(biāo)主機進行。路由器雖然做分片但不會進行重組互婿。
3.1 路徑 MTU 發(fā)現(xiàn)
分片機制也有它的不足捣郊。如路由器的處理負荷加重之類。因此擒悬,只要允許模她,是不希望由路由器進行 IP 數(shù)據(jù)包的分片處理的。
為了應(yīng)對分片機制的不足懂牧,“路徑 MTU 發(fā)現(xiàn)” 技術(shù)應(yīng)運而生。路徑 MTU 指的是尊勿,從發(fā)送端主機到接收端主機之間不需要分片是最大 MTU 的大小僧凤。即路徑中存在的所有數(shù)據(jù)鏈路中最小的 MTU 。
進行路徑 MTU 發(fā)現(xiàn)元扔,就可以避免在中途的路由器上進行分片處理躯保,也可以在 TCP 中發(fā)送更大的包。
4. IPv6
IPv6(IP version 6)是為了根本解決 IPv4 地址耗盡的問題而被標(biāo)準(zhǔn)化的網(wǎng)際協(xié)議澎语。IPv4 的地址長度為 4 個 8 位字節(jié)途事,即 32 比特。而 IPv6 的地址長度則是原來的 4 倍擅羞,即 128 比特尸变,一般寫成 8 個 16 位字節(jié)。
4.1 IPv6 的特點
IP 得知的擴大與路由控制表的聚合减俏。
性能提升召烂。包首部長度采用固定的值(40字節(jié)),不再采用首部檢驗碼娃承。簡化首部結(jié)構(gòu)奏夫,減輕路由器負擔(dān)。路由器不再做分片處理历筝。
支持即插即用功能酗昼。即使沒有DHCP服務(wù)器也可以實現(xiàn)自動分配 IP 地址。
采用認(rèn)證與加密功能梳猪。應(yīng)對偽造 IP 地址的網(wǎng)絡(luò)安全功能以及防止線路竊聽的功能麻削。
多播、Mobile IP 成為擴展功能。
4.2 IPv6 中 IP 地址的標(biāo)記方法
一般人們將 128 比特 IP 地址以每 16 比特為一組碟婆,每組用冒號(“:”)隔開進行標(biāo)記电抚。
而且如果出現(xiàn)連續(xù)的 0 時還可以將這些 0 省略,并用兩個冒號(“::”)隔開竖共。但是蝙叛,一個 IP 地址中只允許出現(xiàn)一次兩個連續(xù)的冒號。
4.3 IPv6 地址的結(jié)構(gòu)
IPv6 類似 IPv4公给,也是通過 IP 地址的前幾位標(biāo)識 IP 地址的種類借帘。
在互聯(lián)網(wǎng)通信中,使用一種全局的單播地址淌铐。它是互聯(lián)網(wǎng)中唯一的一個地址肺然,不需要正式分配 IP 地址。
未定義0000 ... 0000(128比特)::/ 128
環(huán)回地址0000 ... 0001(128比特)::1 / 128
唯一本地地址1111 110FC00:/ 7
鏈路本地單播地址1111 1110 10FE80::/ 10
多播地址1111 1111FF00::/ 8
全局單播地址(其他)
4.4 全局單播地址
全局單播地址是指世界上唯一的一個地址腿准。它是互聯(lián)網(wǎng)通信以及各個域內(nèi)部通信中最為常用的一個 IPv6 地址际起。
格式如下圖所示,現(xiàn)在 IPv6 的網(wǎng)絡(luò)中所使用的格式為吐葱,n = 48街望,m = 16 以及 128 - n - m = 64。即前 64 比特為網(wǎng)絡(luò)標(biāo)識弟跑,后 64 比特為主機標(biāo)識灾前。
全局單播地址
4.5 鏈路本地單播地址
鏈路本地單播地址是指在同一個數(shù)據(jù)鏈路內(nèi)唯一的地址。它用于不經(jīng)過路由器孟辑,在同一個鏈路中的通信哎甲。通常接口 ID 保存 64 比特版的 MAC 地址。
鏈路本地單播地址
4.6 唯一本地地址
唯一本地地址是不進行互聯(lián)網(wǎng)通信時所用的地址饲嗽。
唯一本地地址雖然不會與互聯(lián)網(wǎng)連接炭玫,但是也會盡可能地隨機生成一個唯一的全局 ID。
L 通常被置為 1
全局 ID 的值隨機決定
子網(wǎng) ID 是指該域子網(wǎng)地址
接口 ID 即為接口的 ID
唯一本地地址
4.7 IPv6 分段處理
IPv6 的分片處理只在作為起點的發(fā)送端主機上進行喝噪,路由器不參與分片础嫡。
IPv6 中最小 MTU 為 1280 字節(jié),因此酝惧,在嵌入式系統(tǒng)中對于那些有一定系統(tǒng)資源限制的設(shè)備來說榴鼎,不需要進行“路徑 MTU 發(fā)現(xiàn)”,而是在發(fā)送 IP 包時直接以 1280 字節(jié)為單位分片送出晚唇。
4.8 IP 首部(暫略)
5. IP 協(xié)議相關(guān)技術(shù)
IP 旨在讓最終目標(biāo)主機收到數(shù)據(jù)包巫财,但是在這一過程中僅僅有 IP 是無法實現(xiàn)通信的。必須還有能夠解析主機名稱和 MAC 地址的功能哩陕,以及數(shù)據(jù)包在發(fā)送過程中異常情況處理的功能平项。
5.1 DNS
我們平常在訪問某個網(wǎng)站時不適用 IP 地址赫舒,而是用一串由羅馬字和點號組成的字符串。而一般用戶在使用 TCP/IP 進行通信時也不使用 IP 地址闽瓢。能夠這樣做是因為有了 DNS (Domain Name System)功能的支持接癌。DNS 可以將那串字符串自動轉(zhuǎn)換為具體的 IP 地址。
這種 DNS 不僅適用于 IPv4扣讼,還適用于 IPv6缺猛。
5.2 ARP
只要確定了 IP 地址,就可以向這個目標(biāo)地址發(fā)送 IP 數(shù)據(jù)報椭符。然而荔燎,在底層數(shù)據(jù)鏈路層,進行實際通信時卻有必要了解每個 IP 地址所對應(yīng)的 MAC 地址销钝。
ARP 是一種解決地址問題的協(xié)議有咨。以目標(biāo) IP 地址為線索,用來定位下一個應(yīng)該接收數(shù)據(jù)分包的網(wǎng)絡(luò)設(shè)備對應(yīng)的 MAC 地址蒸健。不過 ARP 只適用于 IPv4座享,不能用于 IPv6。IPv6 中可以用 ICMPv6 替代 ARP 發(fā)送鄰居探索消息似忧。
RARP 是將 ARP 反過來征讲,從 MAC 地址定位 IP 地址的一種協(xié)議。
5.3 ICMP
ICMP 的主要功能包括橡娄,確認(rèn) IP 包是否成功送達目標(biāo)地址,通知在發(fā)送過程當(dāng)中 IP 包被廢棄的具體原因癣籽,改善網(wǎng)絡(luò)設(shè)置等挽唉。
IPv4 中 ICMP 僅作為一個輔助作用支持 IPv4。也就是說筷狼,在 IPv4 時期瓶籽,即使沒有 ICMP,仍然可以實現(xiàn) IP 通信埂材。然而塑顺,在 IPv6 中,ICMP 的作用被擴大俏险,如果沒有 ICMPv6严拒,IPv6 就無法進行正常通信。
5.4 DHCP
如果逐一為每一臺主機設(shè)置 IP 地址會是非常繁瑣的事情竖独。特別是在移動使用筆記本電腦裤唠、只能終端以及平板電腦等設(shè)備時,每移動到一個新的地方莹痢,都要重新設(shè)置 IP 地址种蘸。
于是墓赴,為了實現(xiàn)自動設(shè)置 IP 地址、統(tǒng)一管理 IP 地址分配航瞭,就產(chǎn)生了 DHCP(Dynamic Host Configuration Protocol)協(xié)議诫硕。有了 DHCP,計算機只要連接到網(wǎng)絡(luò)刊侯,就可以進行 TCP/IP 通信章办。也就是說,DHCP 讓即插即用變得可能滔吠。
DHCP 不僅在 IPv4 中房交,在 IPv6 中也可以使用。
5.5 NAT
NAT(Network Address Translator)是用于在本地網(wǎng)絡(luò)中使用私有地址缘眶,在連接互聯(lián)網(wǎng)時轉(zhuǎn)而使用全局 IP 地址的技術(shù)盅安。
除轉(zhuǎn)換 IP 地址外,還出現(xiàn)了可以轉(zhuǎn)換 TCP冬骚、UDP 端口號的 NAPT(Network Address Ports Translator)技術(shù)椅贱,由此可以實現(xiàn)用一個全局 IP 地址與多個主機的通信。
NAT(NAPT)實際上是為正在面臨地址枯竭的 IPv4 而開發(fā)的技術(shù)只冻。不過庇麦,在 IPv6 中為了提高網(wǎng)絡(luò)安全也在使用 NAT,在 IPv4 和 IPv6 之間的相互通信當(dāng)中常常使用 NAT-PT喜德。
5.6 IP 隧道
夾著 IPv4 網(wǎng)絡(luò)的兩個 IPv6 網(wǎng)絡(luò)
如上圖的網(wǎng)絡(luò)環(huán)境中山橄,網(wǎng)絡(luò) A 與網(wǎng)絡(luò) B 之間無法直接進行通信,為了讓它們之間正常通信舍悯,這時必須得采用 IP 隧道的功能航棱。
IP 隧道可以將那些從網(wǎng)絡(luò) A 發(fā)過來的 IPv6 的包統(tǒng)合為一個數(shù)據(jù),再為之追加一個 IPv4 的首部以后轉(zhuǎn)發(fā)給網(wǎng)絡(luò) C萌衬。
一般情況下饮醇,緊接著 IP 首部的是 TCP 或 UDP 的首部。然而秕豫,現(xiàn)在的應(yīng)用當(dāng)中“ IP 首部的后面還是 IP 首部”或者“ IP 首部的后面是 IPv6 的首部”等情況與日俱增朴艰。這種在網(wǎng)絡(luò)層的首部后面追加網(wǎng)絡(luò)層首部的通信方法就叫做“ IP 隧道”。
作者:滌生_Woo
鏈接:http://www.reibang.com/p/9f3e879a4c9c
來源:簡書
著作權(quán)歸作者所有混移。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)祠墅,非商業(yè)轉(zhuǎn)載請注明出處。