每個IT人都應(yīng)該熟悉TCP/IP協(xié)議

每個IT人都應(yīng)該熟悉TCP/IP協(xié)議

從字面意義上講恕沫,有人可能會認(rèn)為 TCP/IP 是指 TCP 和 IP 兩種協(xié)議列另。實(shí)際生活當(dāng)中有時也確實(shí)就是指這兩種協(xié)議栏账。然而在很多情況下,它只是利用 IP 進(jìn)行通信時所必須用到的協(xié)議群的統(tǒng)稱庸毫。具體來說,IP 或 ICMP合是、TCP 或 UDP了罪、TELNET 或 FTP、以及 HTTP 等都屬于 TCP/IP 協(xié)議聪全。

一圖看完本文

本人圖片無法上傳泊藕,pdf文檔可以如下地址下載:

https://download.csdn.net/download/jb7789/18860322

一、 計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)分層

計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)分層

計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)分層

不難看出难礼,TCP/IP 與 OSI 在分層模塊上稍有區(qū)別娃圆。OSI 參考模型注重“通信協(xié)議必要的功能是什么”,而 TCP/IP 則更強(qiáng)調(diào)“在計(jì)算機(jī)上實(shí)現(xiàn)協(xié)議應(yīng)該開發(fā)哪種程序”蛾茉。

二讼呢、 TCP/IP 基礎(chǔ)

1. TCP/IP 的具體含義

從字面意義上講,有人可能會認(rèn)為 TCP/IP 是指 TCP 和 IP 兩種協(xié)議谦炬。實(shí)際生活當(dāng)中有時也確實(shí)就是指這兩種協(xié)議吝岭。然而在很多情況下,它只是利用 IP 進(jìn)行通信時所必須用到的協(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)進(jìn)行通信時裸卫,需要相應(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ī)范詳細(xì)定義。在數(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)用程序會進(jìn)行編碼處理盐类,這些編碼相當(dāng)于 OSI 的表示層功能寞奸;

編碼轉(zhuǎn)化后,郵件不一定馬上被發(fā)送出去在跳,這種何時建立通信連接何時發(fā)送數(shù)據(jù)的管理功能枪萄,相當(dāng)于 OSI 的會話層功能。

② TCP 模塊的處理

TCP 根據(jù)應(yīng)用的指示猫妙,負(fù)責(zé)建立連接瓷翻、發(fā)送數(shù)據(jù)以及斷開連接。TCP 提供將應(yīng)用層發(fā)來的數(shù)據(jù)順利發(fā)送至對端的可靠傳輸吐咳。為了實(shí)現(xiàn)這一功能逻悠,需要在應(yīng)用層數(shù)據(jù)的前端附加一個 TCP 首部。

③ IP 模塊的處理

IP 將 TCP 傳過來的 TCP 首部和 TCP 數(shù)據(jù)合起來當(dāng)做自己的數(shù)據(jù)韭脊,并在 TCP 首部的前端加上自己的 IP 首部童谒。IP 包生成后,參考路由控制表決定接受此 IP 包的路由或主機(jī)沪羔。

④ 網(wǎng)絡(luò)接口(以太網(wǎng)驅(qū)動)的處理

從 IP 傳過來的 IP 包對于以太網(wǎng)來說就是數(shù)據(jù)饥伊。給這些數(shù)據(jù)附加上以太網(wǎng)首部并進(jìn)行發(fā)送處理象浑,生成的以太網(wǎng)數(shù)據(jù)包將通過物理層傳輸給接收端。

⑤ 網(wǎng)絡(luò)接口(以太網(wǎng)驅(qū)動)的處理

主機(jī)收到以太網(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)該送往的主機(jī)或路由器之后再進(jìn)行轉(zhuǎn)發(fā)數(shù)據(jù)。

⑦ TCP 模塊的處理

在 TCP 模塊中蘸嘶,首先會計(jì)算一下校驗(yàn)和,判斷數(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 為提供可靠性傳輸,實(shí)行“順序控制”或“重發(fā)控制”機(jī)制重斑。此外還具備“流控制(流量控制)”兵睛、“擁塞控制”、提高網(wǎng)絡(luò)利用率等眾多功能窥浪。

UDP 是不具有可靠性的數(shù)據(jù)報協(xié)議祖很。細(xì)微的處理它會交給上層的應(yīng)用去完成。在 UDP 的情況下寒矿,雖然可以確保發(fā)送消息的大小突琳,卻不能保證消息一定會到達(dá)。因此符相,應(yīng)用有時會根據(jù)自己的需要進(jìn)行重發(fā)處理拆融。

TCP 和 UDP 的優(yōu)缺點(diǎn)無法簡單地、絕對地去做比較:TCP 用于在傳輸層有必要實(shí)現(xiàn)可靠傳輸?shù)那闆r啊终;而在一方面镜豹,UDP 主要用于那些對高速傳輸和實(shí)時性有較高要求的通信或廣播通信。TCP 和 UDP 應(yīng)該根據(jù)應(yīng)用的目的按需使用蓝牲。

1. 端口號

數(shù)據(jù)鏈路和 IP 中的地址趟脂,分別指的是 MAC 地址和 IP 地址。前者用來識別同一鏈路中不同的計(jì)算機(jī)例衍,后者用來識別 TCP/IP 網(wǎng)絡(luò)中互連的主機(jī)和路由器昔期。在傳輸層也有這種類似于地址的概念,那就是端口號佛玄。端口號用來識別同一臺計(jì)算機(jī)中進(jìn)行通信的不同應(yīng)用程序硼一。因此,它也被稱為程序地址梦抢。

1.1 根據(jù)端口號識別應(yīng)用

一臺計(jì)算機(jī)上同時可以運(yùn)行多個程序般贼。傳輸層協(xié)議正是利用這些端口號識別本機(jī)中正在進(jìn)行通信的應(yīng)用程序,并準(zhǔn)確地將數(shù)據(jù)傳輸奥吩。

通過端口號識別應(yīng)用

1.2 通過 IP 地址哼蛆、端口號、協(xié)議號進(jìn)行通信識別

僅憑目標(biāo)端口號識別某一個通信是遠(yuǎn)遠(yuǎn)不夠的霞赫。

通過端口號腮介、IP地址、協(xié)議號進(jìn)行通信識別

① 和② 的通信是在兩臺計(jì)算機(jī)上進(jìn)行的端衰。它們的目標(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)進(jìn)行分配靶衍。動態(tài)分配的端口號范圍在 49152~65535 之間灾炭。

1.4 端口號與協(xié)議

端口號由其使用的傳輸層協(xié)議決定。因此颅眶,不同的傳輸層協(xié)議可以使用相同的端口號咆贬。

此外,那些知名端口號與傳輸層協(xié)議并無關(guān)系帚呼。只要端口一致都將分配同一種應(yīng)用程序進(jìn)行處理。

2. UDP

UDP 不提供復(fù)雜的控制機(jī)制皱蹦,利用 IP 提供面向無連接的通信服務(wù)煤杀。

并且它是將應(yīng)用程序發(fā)來的數(shù)據(jù)在收到的那一刻,立即按照原樣發(fā)送到網(wǎng)絡(luò)上的一種機(jī)制沪哺。即使是出現(xiàn)網(wǎng)絡(luò)擁堵的情況沈自,UDP 也無法進(jìn)行流量控制等避免網(wǎng)絡(luò)擁塞行為。

此外辜妓,傳輸途中出現(xiàn)丟包枯途,UDP 也不負(fù)責(zé)重發(fā)忌怎。

甚至當(dāng)包的到達(dá)順序出現(xiàn)亂序時也沒有糾正的功能。

如果需要以上的細(xì)節(jié)控制酪夷,不得不交由采用 UDP 的應(yīng)用程序去處理榴啸。

UDP 常用于一下幾個方面:1.包總量較少的通信(DNS、SNMP等)晚岭;2.視頻鸥印、音頻等多媒體通信(即時通信);3.限定于 LAN 等特定網(wǎng)絡(luò)中的應(yīng)用通信坦报;4.廣播通信(廣播库说、多播)。

3. TCP

TCP 與 UDP 的區(qū)別相當(dāng)大片择。它充分地實(shí)現(xiàn)了數(shù)據(jù)傳輸時各種控制功能潜的,可以進(jìn)行丟包時的重發(fā)控制,還可以對次序亂掉的分包進(jìn)行順序控制字管。而這些在 UDP 中都沒有啰挪。

此外,TCP 作為一種面向有連接的協(xié)議纤掸,只有在確認(rèn)通信對端存在時才會發(fā)送數(shù)據(jù)脐供,從而可以控制通信流量的浪費(fèi)。

根據(jù) TCP 的這些機(jī)制借跪,在 IP 這種無連接的網(wǎng)絡(luò)上也能夠?qū)崿F(xiàn)高可靠性的通信( 主要通過檢驗(yàn)和政己、序列號、確認(rèn)應(yīng)答掏愁、重發(fā)控制歇由、連接管理以及窗口控制等機(jī)制實(shí)現(xiàn))。

3.1 三次握手(重點(diǎn))

TCP 提供面向有連接的通信傳輸果港。面向有連接是指在數(shù)據(jù)通信開始之前先做好兩端之間的準(zhǔn)備工作沦泌。

所謂三次握手是指建立一個 TCP 連接時需要客戶端和服務(wù)器端總共發(fā)送三個包以確認(rèn)連接的建立。在socket編程中辛掠,這一過程由客戶端執(zhí)行connect來觸發(fā)谢谦。

下面來看看三次握手的流程圖:

三次握手

***次握手:客戶端將標(biāo)志位SYN置為1,隨機(jī)產(chǎn)生一個值seq=J萝衩,并將該數(shù)據(jù)包發(fā)送給服務(wù)器端回挽,客戶端進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器端確認(rèn)猩谊。

第二次握手:服務(wù)器端收到數(shù)據(jù)包后由標(biāo)志位SYN=1知道客戶端請求建立連接千劈,服務(wù)器端將標(biāo)志位SYN和ACK都置為1,ack=J+1牌捷,隨機(jī)產(chǎn)生一個值seq=K墙牌,并將該數(shù)據(jù)包發(fā)送給客戶端以確認(rèn)連接請求涡驮,服務(wù)器端進(jìn)入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ù)器端進(jìn)入ESTABLISHED狀態(tài)内舟,完成三次握手合敦,隨后客戶端與服務(wù)器端之間可以開始傳輸數(shù)據(jù)了。

3.2 四次揮手(重點(diǎn))

四次揮手即終止TCP連接验游,就是指斷開一個TCP連接時充岛,需要客戶端和服務(wù)端總共發(fā)送4個包以確認(rèn)連接的斷開。在socket編程中耕蝉,這一過程由客戶端或服務(wù)端任一方執(zhí)行close來觸發(fā)崔梗。

由于TCP連接是全雙工的,因此垒在,每個方向都必須要單獨(dú)進(jìn)行關(guān)閉蒜魄,這一原則是當(dāng)一方完成數(shù)據(jù)發(fā)送任務(wù)后,發(fā)送一個FIN來終止這一方向的連接场躯,收到一個FIN只是意味著這一方向上沒有數(shù)據(jù)流動了谈为,即不會再收到數(shù)據(jù)了,但是在這個TCP連接上仍然能夠發(fā)送數(shù)據(jù)踢关,直到這一方向也發(fā)送了FIN伞鲫。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動關(guān)閉,而另一方則執(zhí)行被動關(guān)閉签舞。

下面來看看四次揮手的流程圖:

四次揮手

中斷連接端可以是客戶端秕脓,也可以是服務(wù)器端。

***次揮手:客戶端發(fā)送一個FIN=M儒搭,用來關(guān)閉客戶端到服務(wù)器端的數(shù)據(jù)傳送吠架,客戶端進(jìn)入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ù)你等我的消息仑氛。這個時候客戶端就進(jìn)入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ù)器端進(jìn)入LAST_ACK狀態(tài)捶牢。

第四次揮手:客戶端收到FIN=N報文后鸠珠,就知道可以關(guān)閉連接了,但是他還是不相信網(wǎng)絡(luò)秋麸,怕服務(wù)器端不知道要關(guān)閉渐排,所以發(fā)送ack=N+1后進(jìn)入TIME_WAIT狀態(tài),如果Server端沒有收到ACK則可以重傳灸蟆。服務(wù)器端收到ACK后驯耻,就知道可以斷開連接了〈闻遥客戶端等待了2MSL后依然沒有收到回復(fù)吓歇,則證明服務(wù)器端已正常關(guān)閉,那好票腰,我客戶端也可以關(guān)閉連接了城看。最終完成了四次握手。

上面是一方主動關(guān)閉杏慰,另一方被動關(guān)閉的情況测柠,實(shí)際中還會出現(xiàn)同時發(fā)起主動關(guān)閉的情況。

具體流程如下圖:

同時揮手

3.3 通過序列號與確認(rèn)應(yīng)答提高可靠性

在 TCP 中缘滥,當(dāng)發(fā)送端的數(shù)據(jù)到達(dá)接收主機(jī)時轰胁,接收端主機(jī)會返回一個已收到消息的通知。這個消息叫做確認(rèn)應(yīng)答(ACK)朝扼。當(dāng)發(fā)送端將數(shù)據(jù)發(fā)出之后會等待對端的確認(rèn)應(yīng)答赃阀。如果有確認(rèn)應(yīng)答,說明數(shù)據(jù)已經(jīng)成功到達(dá)對端擎颖。

反之榛斯,則數(shù)據(jù)丟失的可能性很大

观游。

在一定時間內(nèi)沒有等待到確認(rèn)應(yīng)答,發(fā)送端就可以認(rèn)為數(shù)據(jù)已經(jīng)丟失驮俗,并進(jìn)行重發(fā)懂缕。由此,即使產(chǎn)生了丟包王凑,仍然能夠保證數(shù)據(jù)能夠到達(dá)對端搪柑,實(shí)現(xiàn)可靠傳輸。

未收到確認(rèn)應(yīng)答并不意味著數(shù)據(jù)一定丟失索烹。也有可能是數(shù)據(jù)對方已經(jīng)收到工碾,只是返回的確認(rèn)應(yīng)答在途中丟失。這種情況也會導(dǎo)致發(fā)送端誤以為數(shù)據(jù)沒有到達(dá)目的地而重發(fā)數(shù)據(jù)术荤。

此外倚喂,也有可能因?yàn)橐恍┢渌驅(qū)е麓_認(rèn)應(yīng)答延遲到達(dá),在源主機(jī)重發(fā)數(shù)據(jù)以后才到達(dá)的情況也屢見不鮮瓣戚。此時端圈,源主機(jī)只要按照機(jī)制重發(fā)數(shù)據(jù)即可。

對于目標(biāo)主機(jī)來說子库,反復(fù)收到相同的數(shù)據(jù)是不可取的舱权。為了對上層應(yīng)用提供可靠的傳輸,目標(biāo)主機(jī)必須放棄重復(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ù)脖捻,又能夠判斷是否需要接收阔逼,從而實(shí)現(xiàn)可靠傳輸。

序列號和確認(rèn)應(yīng)答

3.4 重發(fā)超時的確定

重發(fā)超時是指在重發(fā)數(shù)據(jù)之前地沮,等待確認(rèn)應(yīng)答到來的那個特定時間間隔嗜浮。

如果超過這個時間仍未收到確認(rèn)應(yīng)答,發(fā)送端將進(jìn)行數(shù)據(jù)重發(fā)摩疑。最理想的是危融,找到一個最小時間,它能保證“確認(rèn)應(yīng)答一定能在這個時間內(nèi)返回”雷袋。

TCP 要求不論處在何種網(wǎng)絡(luò)環(huán)境下都要提供高性能通信吉殃,并且無論網(wǎng)絡(luò)擁堵情況發(fā)生何種變化,都必須保持這一特性。為此蛋勺,它在每次發(fā)包時都會計(jì)算往返時間及其偏差速侈。將這個往返時間和偏差時間相加,重發(fā)超時的時間就是比這個總和要稍大一點(diǎn)的值迫卢。

在 BSD 的 Unix 以及 Windows 系統(tǒng)中,超時都以0.5秒為單位進(jìn)行控制冶共,因此重發(fā)超時都是0.5秒的整數(shù)倍乾蛤。不過,最初其重發(fā)超時的默認(rèn)值一般設(shè)置為6秒左右捅僵。

數(shù)據(jù)被重發(fā)之后若還是收不到確認(rèn)應(yīng)答家卖,則進(jìn)行再次發(fā)送。此時庙楚,等待確認(rèn)應(yīng)答的時間將會以2倍上荡、4倍的指數(shù)函數(shù)延長。

此外馒闷,

數(shù)據(jù)也不會被***酪捡、反復(fù)地重發(fā)。達(dá)到一定重發(fā)次數(shù)之后纳账,如果仍沒有任何確認(rèn)應(yīng)答返回逛薇,就會判斷為網(wǎng)絡(luò)或?qū)Χ酥鳈C(jī)發(fā)生了異常,強(qiáng)制關(guān)閉連接疏虫。并且通知應(yīng)用通信異常強(qiáng)行終止永罚。

3.5 以段為單位發(fā)送數(shù)據(jù)

在建立 TCP 連接的同時,也可以確定發(fā)送數(shù)據(jù)包的單位卧秘,我們也可以稱其為“***消息長度”(MSS)呢袱。最理想的情況是,***消息長度正好是 IP 中不會被分片處理的***數(shù)據(jù)長度翅敌。

TCP 在傳送大量數(shù)據(jù)時羞福,是以 MSS 的大小將數(shù)據(jù)進(jìn)行分割發(fā)送。進(jìn)行重發(fā)時也是以 MSS 為單位哼御。

MSS 在三次握手的時候坯临,在兩端主機(jī)之間被計(jì)算得出。兩端的主機(jī)在發(fā)出建立連接的請求時恋昼,會在 TCP 首部中寫入 MSS 選項(xiàng)看靠,告訴對方自己的接口能夠適應(yīng)的 MSS 的大小。然后會在兩者之間選擇一個較小的值投入使用液肌。

3.6 利用窗口控制提高速度

TCP 以1個段為單位挟炬,每發(fā)送一個段進(jìn)行一次確認(rèn)應(yīng)答的處理。這樣的傳輸方式有一個缺點(diǎn),就是包的往返時間越長通信性能就越低谤祖。

為解決這個問題婿滓,TCP 引入了窗口這個概念。確認(rèn)應(yīng)答不再是以每個分段粥喜,而是以更大的單位進(jìn)行確認(rèn)凸主,轉(zhuǎn)發(fā)時間將會被大幅地縮短。也就是說额湘,發(fā)送端主機(jī)卿吐,在發(fā)送了一個段以后不必要一直等待確認(rèn)應(yīng)答,而是繼續(xù)發(fā)送锋华。如下圖所示:

窗口控制

窗口大小就是指無需等待確認(rèn)應(yīng)答而可以繼續(xù)發(fā)送數(shù)據(jù)的***值嗡官。上圖中窗口大小為4個段。這個機(jī)制實(shí)現(xiàn)了使用大量的緩沖區(qū)毯焕,通過對多個段同時進(jìn)行確認(rèn)應(yīng)答的功能衍腥。

3.7 滑動窗口控制

滑動窗口

上圖中的窗口內(nèi)的數(shù)據(jù)即便沒有收到確認(rèn)應(yīng)答也可以被發(fā)送出去。不過纳猫,在整個窗口的確認(rèn)應(yīng)答沒有到達(dá)之前婆咸,如果其中部分?jǐn)?shù)據(jù)出現(xiàn)丟包,那么發(fā)送端仍然要負(fù)責(zé)重傳芜辕。為此擅耽,發(fā)送端主機(jī)需要設(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)答就可以不用再進(jìn)行重發(fā),此時數(shù)據(jù)就可以從緩存區(qū)清除询兴。

收到確認(rèn)應(yīng)答的情況下乃沙,將窗口滑動到確認(rèn)應(yīng)答中的序列號的位置。這樣可以順序地將多個段同時發(fā)送提高通信性能诗舰。這種機(jī)制也別稱為滑動窗口控制警儒。

3.8 窗口控制中的重發(fā)控制

在使用窗口控制中, 出現(xiàn)丟包一般分為兩種情況:

① 確認(rèn)應(yīng)答未能返回的情況眶根。在這種情況下蜀铲,數(shù)據(jù)已經(jīng)到達(dá)對端,是不需要再進(jìn)行重發(fā)的属百,如下圖:

部分確認(rèn)應(yīng)答丟失

② 某個報文段丟失的情況记劝。接收主機(jī)如果收到一個自己應(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ā)送端主機(jī)如果連續(xù)3次收到同一個確認(rèn)應(yīng)答爷辱,就會將其對應(yīng)的數(shù)據(jù)進(jìn)行重發(fā)。這種機(jī)制比之前提到的超時管理更加高效朦肘,因此也被稱為高速重發(fā)控制托嚣。

高速重發(fā)控制

四、網(wǎng)絡(luò)層中的 IP 協(xié)議

IP(IPv4厚骗、IPv6)相當(dāng)于 OSI 參考模型中的第3層——網(wǎng)絡(luò)層。網(wǎng)絡(luò)層的主要作用是“實(shí)現(xiàn)終端節(jié)點(diǎn)之間的通信”兢哭。這種終端節(jié)點(diǎn)之間的通信也叫“點(diǎn)對點(diǎn)通信”领舰。

網(wǎng)絡(luò)的下一層——數(shù)據(jù)鏈路層的主要作用是在互連同一種數(shù)據(jù)鏈路的節(jié)點(diǎn)之間進(jìn)行包傳遞。而一旦跨越多種數(shù)據(jù)鏈路迟螺,就需要借助網(wǎng)絡(luò)層冲秽。網(wǎng)絡(luò)層可以跨越不同的數(shù)據(jù)鏈路,即使是在不同的數(shù)據(jù)鏈路上也能實(shí)現(xiàn)兩端節(jié)點(diǎn)之間的數(shù)據(jù)包傳輸矩父。

IP 大致分為三大作用模塊锉桑,它們是 IP 尋址、路由(最終節(jié)點(diǎn)為止的轉(zhuǎn)發(fā))以及 IP 分包與組包窍株。

1. IP 地址

1.1 IP 地址概述

在計(jì)算機(jī)通信中民轴,為了識別通信對端,必須要有一個類似于地址的識別碼進(jìn)行標(biāo)識球订。在數(shù)據(jù)鏈路中的 MAC 地址正是用來標(biāo)識同一個鏈路中不同計(jì)算機(jī)的一種識別碼后裸。

作為網(wǎng)絡(luò)層的 IP ,也有這種地址信息,一般叫做 IP 地址冒滩。IP 地址用于在“連接到網(wǎng)絡(luò)中的所有主機(jī)中識別出進(jìn)行通信的目標(biāo)地址”微驶。因此,在 TCP/IP 通信中所有主機(jī)或路由器必須設(shè)定自己的 IP 地址开睡。

不論一臺主機(jī)與哪種數(shù)據(jù)鏈路連接因苹,其 IP 地址的形式都保持不變。

IP 地址(IPv4 地址)由32位正整數(shù)來表示篇恒。IP 地址在計(jì)算機(jī)內(nèi)部以二進(jìn)制方式被處理扶檐。然而,由于我們并不習(xí)慣于采用二進(jìn)制方式胁艰,我們將32位的 IP 地址以每8位為一組蘸秘,分成4組官卡,每組以 “.” 隔開,再將每組數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)醋虏。如下:

1.2 IP 地址由網(wǎng)絡(luò)和主機(jī)兩部分標(biāo)識組成

如下圖寻咒,網(wǎng)絡(luò)標(biāo)識在數(shù)據(jù)鏈路的每個段配置不同的值。網(wǎng)絡(luò)標(biāo)識必須保證相互連接的每個段的地址不相重復(fù)颈嚼。而相同段內(nèi)相連的主機(jī)必須有相同的網(wǎng)絡(luò)地址毛秘。IP 地址的“主機(jī)標(biāo)識”則不允許在同一個網(wǎng)段內(nèi)重復(fù)出現(xiàn)。由此阻课,可以通過設(shè)置網(wǎng)絡(luò)地址和主機(jī)地址叫挟,在相互連接的整個網(wǎng)絡(luò)中保證每臺主機(jī)的 IP 地址都不會相互重疊。即 IP 地址具有了唯一性限煞。

IP地址的主機(jī)標(biāo)識

如下圖抹恳,IP 包被轉(zhuǎn)發(fā)到途中某個路由器時,正是利用目標(biāo) IP 地址的網(wǎng)絡(luò)標(biāo)識進(jìn)行路由署驻。因?yàn)榧词共豢粗鳈C(jī)標(biāo)識奋献,只要一見到網(wǎng)絡(luò)標(biāo)識就能判斷出是否為該網(wǎng)段內(nèi)的主機(jī)。

IP地址的網(wǎng)絡(luò)標(biāo)識

1.3 IP 地址的分類

IP 地址分為四個級別旺上,分別為A類瓶蚂、B類、C類宣吱、D類窃这。它根據(jù) IP 地址中從第 1 位到第 4 位的比特列對其網(wǎng)絡(luò)標(biāo)識和主機(jī)標(biāo)識進(jìn)行區(qū)分。

A 類 IP 地址是首位以 “0” 開頭的地址征候。

從第 1 位到第 8 位是它的網(wǎng)絡(luò)標(biāo)識杭攻。用十進(jìn)制表示的話,0.0.0.0~127.0.0.0 是 A 類的網(wǎng)絡(luò)地址疤坝。A 類地址的后 24 位相當(dāng)于主機(jī)標(biāo)識朴上。因此,一個網(wǎng)段內(nèi)可容納的主機(jī)地址上限為16,777,214個卒煞。

B 類 IP 地址是前兩位 “10” 的地址痪宰。

從第 1 位到第 16 位是它的網(wǎng)絡(luò)標(biāo)識。用十進(jìn)制表示的話畔裕,128.0.0.0~191.255.0.0 是 B 類的網(wǎng)絡(luò)地址衣撬。B 類地址的后 16 位相當(dāng)于主機(jī)標(biāo)識。因此扮饶,一個網(wǎng)段內(nèi)可容納的主機(jī)地址上限為65,534個具练。

C 類 IP 地址是前三位為 “110” 的地址。

從第 1 位到第 24 位是它的網(wǎng)絡(luò)標(biāo)識甜无。用十進(jìn)制表示的話扛点,192.0.0.0~223.255.255.0 是 C 類的網(wǎng)絡(luò)地址哥遮。C 類地址的后 8 位相當(dāng)于主機(jī)標(biāo)識。因此陵究,一個網(wǎng)段內(nèi)可容納的主機(jī)地址上限為254個眠饮。

D 類 IP 地址是前四位為 “1110” 的地址。

從第 1 位到第 32 位是它的網(wǎng)絡(luò)標(biāo)識铜邮。用十進(jìn)制表示的話仪召,224.0.0.0~239.255.255.255 是 D 類的網(wǎng)絡(luò)地址。D 類地址沒有主機(jī)標(biāo)識松蒜,常用于多播扔茅。

在分配 IP 地址時關(guān)于主機(jī)標(biāo)識有一點(diǎn)需要注意。即要用比特位表示主機(jī)地址時秸苗,不可以全部為 0 或全部為 1召娜。因?yàn)槿繛?0 只有在表示對應(yīng)的網(wǎng)絡(luò)地址或 IP 地址不可以獲知的情況下才使用。而全部為 1 的主機(jī)通常作為廣播地址惊楼。因此玖瘸,在分配過程中,應(yīng)該去掉這兩種情況胁后。這也是為什么 C 類地址每個網(wǎng)段最多只能有 254( 2

8


- 2 = 254)個主機(jī)地址的原因。

1.4 廣播地址

廣播地址用于在同一個鏈路中相互連接的主機(jī)之間發(fā)送數(shù)據(jù)包嗦枢。將 IP 地址中的主機(jī)地址部分全部設(shè)置為 1攀芯,就成了廣播地址。

廣播分為本地廣播和直接廣播兩種文虏。在本網(wǎng)絡(luò)內(nèi)的廣播叫做本地廣播侣诺;在不同網(wǎng)絡(luò)之間的廣播叫做直接廣播。

1.5 IP 多播

多播用于將包發(fā)送給特定組內(nèi)的所有主機(jī)氧秘。由于其直接使用 IP 地址年鸳,因此也不存在可靠傳輸。

相比于廣播丸相,多播既可以穿透路由器搔确,又可以實(shí)現(xiàn)只給那些必要的組發(fā)送數(shù)據(jù)包。請看下圖:

IP 多播

多播使用 D 類地址灭忠。因此膳算,如果從首位開始到第 4 位是 “1110”,就可以認(rèn)為是多播地址弛作。而剩下的 28 位可以成為多播的組編號涕蜂。

此外, 對于多播映琳,所有的主機(jī)(路由器以外的主機(jī)和終端主機(jī))必須屬于 224.0.0.1 的組机隙,所有的路由器必須屬于 224.0.0.2 的組蜘拉。

1.6 子網(wǎng)掩碼

現(xiàn)在一個 IP 地址的網(wǎng)絡(luò)標(biāo)識和主機(jī)標(biāo)識已不再受限于該地址的類別,而是由一個叫做“子網(wǎng)掩碼”的識別碼通過子網(wǎng)網(wǎng)絡(luò)地址細(xì)分出比 A 類有鹿、B 類旭旭、C 類更小粒度的網(wǎng)絡(luò)。這種方式實(shí)際上就是將原來 A 類印颤、B 類您机、C 類等分類中的主機(jī)地址部分用作子網(wǎng)地址,可以將原網(wǎng)絡(luò)分為多個物理網(wǎng)絡(luò)的一種機(jī)制年局。

子網(wǎng)掩碼用二進(jìn)制方式表示的話际看,也是一個 32 位的數(shù)字。它對應(yīng) IP 地址網(wǎng)絡(luò)標(biāo)識部分的位全部為 “1”矢否,對應(yīng) IP 地址主機(jī)標(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 地址后面追加網(wǎng)絡(luò)地址的位數(shù)用 “/ ” 隔開湃交,如下:

2. 路由

發(fā)送數(shù)據(jù)包時所使用的地址是網(wǎng)絡(luò)層的地址,即 IP 地址藤巢。然而僅僅有 IP 地址還不足以實(shí)現(xiàn)將數(shù)據(jù)包發(fā)送到對端目標(biāo)地址搞莺,在數(shù)據(jù)發(fā)送過程中還需要類似于“指明路由器或主機(jī)”的信息,以便真正發(fā)往目標(biāo)地址掂咒。保存這種信息的就是路由控制表才沧。

該路由控制表的形成方式有兩種:一種是管理員手動設(shè)置,另一種是路由器與其他路由器相互交換信息時自動刷新绍刮。前者也叫做靜態(tài)路由控制糜工,而后者叫做動態(tài)路由控制。

IP 協(xié)議始終認(rèn)為路由表是正確的录淡。然后捌木,IP 本身并沒有定義制作路由控制表的協(xié)議。即 IP 沒有制作路由控制表的機(jī)制嫉戚。該表示由一個叫做“路由協(xié)議”的協(xié)議制作而成刨裆。

2.1 IP 地址與路由控制

IP 地址的網(wǎng)絡(luò)地址部分用于進(jìn)行路由控制澈圈。

路由控制表中記錄著網(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)都不盡相同疯坤,因?yàn)槊總€不同類型的數(shù)據(jù)鏈路的使用目的不同报慕。使用目的不同,可承載的 MTU 也就不同压怠。

任何一臺主機(jī)都有必要對 IP 分片進(jìn)行相應(yīng)的處理眠冈。分片往往在網(wǎng)絡(luò)上遇到比較大的報文無法一下子發(fā)送出去時才會進(jìn)行處理。

經(jīng)過分片之后的 IP 數(shù)據(jù)報在被重組的時候菌瘫,只能由目標(biāo)主機(jī)進(jìn)行蜗顽。路由器雖然做分片但不會進(jìn)行重組。

3.1 路徑 MTU 發(fā)現(xiàn)

分片機(jī)制也有它的不足雨让。如路由器的處理負(fù)荷加重之類雇盖。因此,只要允許栖忠,是不希望由路由器進(jìn)行 IP 數(shù)據(jù)包的分片處理的崔挖。

為了應(yīng)對分片機(jī)制的不足,“路徑 MTU 發(fā)現(xiàn)” 技術(shù)應(yīng)運(yùn)而生娃闲。路徑 MTU 指的是虚汛,從發(fā)送端主機(jī)到接收端主機(jī)之間不需要分片是*** MTU 的大小匾浪。即路徑中存在的所有數(shù)據(jù)鏈路中最小的 MTU 皇帮。

進(jìn)行路徑 MTU 發(fā)現(xiàn),就可以避免在中途的路由器上進(jì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 的特點(diǎn)

IP 得知的擴(kuò)大與路由控制表的聚合。

性能提升苗胀。包首部長度采用固定的值(40字節(jié))襟诸,不再采用首部檢驗(yàn)碼瓦堵。簡化首部結(jié)構(gòu),減輕路由器負(fù)擔(dān)歌亲。路由器不再做分片處理菇用。

支持即插即用功能。即使沒有DHCP服務(wù)器也可以實(shí)現(xiàn)自動分配 IP 地址陷揪。

采用認(rèn)證與加密功能惋鸥。應(yīng)對偽造 IP 地址的網(wǎng)絡(luò)安全功能以及防止線路竊聽的功能。

多播悍缠、Mobile IP 成為擴(kuò)展功能卦绣。

4.2 IPv6 中 IP 地址的標(biāo)記方法

一般人們將 128 比特 IP 地址以每 16 比特為一組,每組用冒號(“:”)隔開進(jìn)行標(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 地址缝龄。

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 比特為主機(jī)標(biāo)識妄田。

全局單播地址

4.5 鏈路本地單播地址

鏈路本地單播地址是指在同一個數(shù)據(jù)鏈路內(nèi)唯一的地址俺亮。它用于不經(jīng)過路由器,在同一個鏈路中的通信疟呐。通常接口 ID 保存 64 比特版的 MAC 地址脚曾。

鏈路本地單播地址

4.6 唯一本地地址

唯一本地地址是不進(jìn)行互聯(lián)網(wǎng)通信時所用的地址。

唯一本地地址雖然不會與互聯(lián)網(wǎng)連接启具,但是也會盡可能地隨機(jī)生成一個唯一的全局 ID本讥。

L 通常被置為 1

全局 ID 的值隨機(jī)決定

子網(wǎng) ID 是指該域子網(wǎng)地址

接口 ID 即為接口的 ID

唯一本地地址

4.7 IPv6 分段處理

IPv6 的分片處理只在作為起點(diǎn)的發(fā)送端主機(jī)上進(jìn)行,路由器不參與分片。

IPv6 中最小 MTU 為 1280 字節(jié)拷沸,因此旨椒,在嵌入式系統(tǒng)中對于那些有一定系統(tǒng)資源限制的設(shè)備來說,不需要進(jìn)行“路徑 MTU 發(fā)現(xiàn)”堵漱,而是在發(fā)送 IP 包時直接以 1280 字節(jié)為單位分片送出综慎。

4.8 IP 首部(暫略)

5. IP 協(xié)議相關(guān)技術(shù)

IP 旨在讓最終目標(biāo)主機(jī)收到數(shù)據(jù)包,但是在這一過程中僅僅有 IP 是無法實(shí)現(xiàn)通信的勤庐。必須還有能夠解析主機(jī)名稱和 MAC 地址的功能示惊,以及數(shù)據(jù)包在發(fā)送過程中異常情況處理的功能。

5.1 DNS

我們平常在訪問某個網(wǎng)站時不適用 IP 地址愉镰,而是用一串由羅馬字和點(diǎn)號組成的字符串米罚。而一般用戶在使用 TCP/IP 進(jìn)行通信時也不使用 IP 地址。能夠這樣做是因?yàn)橛辛?DNS (Domain Name System)功能的支持丈探。DNS 可以將那串字符串自動轉(zhuǎn)換為具體的 IP 地址录择。

這種 DNS 不僅適用于 IPv4,還適用于 IPv6碗降。

5.2 ARP

只要確定了 IP 地址隘竭,就可以向這個目標(biāo)地址發(fā)送 IP 數(shù)據(jù)報滩报。然而捞高,在底層數(shù)據(jù)鏈路層叠纷,進(jìn)行實(shí)際通信時卻有必要了解每個 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 包是否成功送達(dá)目標(biāo)地址,通知在發(fā)送過程當(dāng)中 IP 包被廢棄的具體原因甩十,改善網(wǎng)絡(luò)設(shè)置等船庇。

IPv4 中 ICMP 僅作為一個輔助作用支持 IPv4吭产。也就是說侣监,在 IPv4 時期,即使沒有 ICMP臣淤,仍然可以實(shí)現(xiàn) IP 通信橄霉。然而,在 IPv6 中邑蒋,ICMP 的作用被擴(kuò)大姓蜂,如果沒有 ICMPv6按厘,IPv6 就無法進(jìn)行正常通信。

5.4 DHCP

如果逐一為每一臺主機(jī)設(shè)置 IP 地址會是非常繁瑣的事情钱慢。特別是在移動使用筆記本電腦逮京、只能終端以及平板電腦等設(shè)備時,每移動到一個新的地方束莫,都要重新設(shè)置 IP 地址懒棉。

于是,為了實(shí)現(xiàn)自動設(shè)置 IP 地址览绿、統(tǒng)一管理 IP 地址分配策严,就產(chǎn)生了 DHCP(Dynamic Host Configuration Protocol)協(xié)議。有了 DHCP饿敲,計(jì)算機(jī)只要連接到網(wǎng)絡(luò)妻导,就可以進(jìn)行 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ù),由此可以實(shí)現(xiàn)用一個全局 IP 地址與多個主機(jī)的通信妓美。

NAT(NAPT)實(shí)際上是為正在面臨地址枯竭的 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 之間無法直接進(jìn)行通信贵试,為了讓它們之間正常通信琉兜,這時必須得采用 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 隧道”。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幌氮,一起剝皮案震驚了整個濱河市缭受,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌该互,老刑警劉巖米者,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宇智,居然都是意外死亡塘雳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門普筹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來败明,“玉大人,你說我怎么就攤上這事太防∑薅ィ” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵蜒车,是天一觀的道長讳嘱。 經(jīng)常有香客問我,道長酿愧,這世上最難降的妖魔是什么沥潭? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮嬉挡,結(jié)果婚禮上钝鸽,老公的妹妹穿的比我還像新娘。我一直安慰自己庞钢,他們只是感情好拔恰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著基括,像睡著了一般颜懊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上风皿,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天河爹,我揣著相機(jī)與錄音,去河邊找鬼桐款。 笑死咸这,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鲁僚。 我是一名探鬼主播炊苫,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼冰沙!你這毒婦竟也來了侨艾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拓挥,失蹤者是張志新(化名)和其女友劉穎唠梨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侥啤,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡当叭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了盖灸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚁鳖。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赁炎,靈堂內(nèi)的尸體忽然破棺而出醉箕,到底是詐尸還是另有隱情,我是刑警寧澤徙垫,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布讥裤,位于F島的核電站,受9級特大地震影響姻报,放射性物質(zhì)發(fā)生泄漏己英。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一吴旋、第九天 我趴在偏房一處隱蔽的房頂上張望损肛。 院中可真熱鬧,春花似錦荣瑟、人聲如沸荧关。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忍啤。三九已至,卻和暖如春仙辟,著一層夾襖步出監(jiān)牢的瞬間同波,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工叠国, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留未檩,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓粟焊,卻偏偏與公主長得像冤狡,于是被迫代替她去往敵國和親孙蒙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

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