精品福利视频一区二区三区,免费A级毛片无码无遮挡,偷窥目拍性综合图区,亚洲欧洲无码AV电影在线观看,超清无码熟妇人妻AV在线电影

認證培訓,h3c認證體系,網(wǎng)絡(luò )工程師
豐沃創(chuàng  )新

終于有人能把TCP/IP 協(xié)議講的明明白白了【豐沃創(chuàng )新】

  • 發(fā)布時(shí)間: 2019-8-7 10:29:02

一圖看完本文

一、 計算機網(wǎng)絡(luò )體系結構分層

計算機網(wǎng)絡(luò )體系結構分層

計算機網(wǎng)絡(luò )體系結構分層

不難看出,TCP/IP 與 OSI 在分層模塊上稍有區別。OSI 參考模型注重“通信協(xié)議必要的功能是什么”,而 TCP/IP 則更強調“在計算機上實(shí)現協(xié)議應該開(kāi)發(fā)哪種程序”。

二、 TCP/IP 基礎

1. TCP/IP 的具體含義

從字面意義上講,有人可能會(huì )認為 TCP/IP 是指 TCP 和 IP 兩種協(xié)議。實(shí)際生活當中有時(shí)也確實(shí)就是指這兩種協(xié)議。然而在很多情況下,它只是利用 IP 進(jìn)行通信時(shí)所必須用到的協(xié)議群的統稱(chēng)。具體來(lái)說(shuō),IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都屬于 TCP/IP 協(xié)議。他們與 TCP 或 IP 的關(guān)系緊密,是互聯(lián)網(wǎng)必不可少的組成部分。TCP/IP 一詞泛指這些協(xié)議,因此,有時(shí)也稱(chēng) TCP/IP 為網(wǎng)際協(xié)議群。

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

網(wǎng)際協(xié)議群

2. 數據包

包、幀、數據包、段、消息

以上五個(gè)術(shù)語(yǔ)都用來(lái)表述數據的單位,大致區分如下:

  • 包可以說(shuō)是全能性術(shù)語(yǔ);
  • 幀用于表示數據鏈路層中包的單位;
  • 數據包是 IP 和 UDP 等網(wǎng)絡(luò )層以上的分層中包的單位;
  • 段則表示 TCP 數據流中的信息;
  • 消息是指應用協(xié)議中數據的單位。

每個(gè)分層中,都會(huì )對所發(fā)送的數據附加一個(gè)首部,在這個(gè)首部中包含了該層必要的信息,如發(fā)送的目標地址以及協(xié)議相關(guān)信息。通常,為協(xié)議提供的信息為包首部,所要發(fā)送的內容為數據。在下一層的角度看,從上一層收到的包全部都被認為是本層的數據。

數據包首部

網(wǎng)絡(luò )中傳輸的數據包由兩部分組成:一部分是協(xié)議所要用到的首部,另一部分是上一層傳過(guò)來(lái)的數據。首部的結構由協(xié)議的具體規范詳細定義。在數據包的首部,明確標明了協(xié)議應該如何讀取數據。反過(guò)來(lái)說(shuō),看到首部,也就能夠了解該協(xié)議必要的信息以及所要處理的數據。包首部就像協(xié)議的臉。

3. 數據處理流程

下圖以用戶(hù) a 向用戶(hù) b 發(fā)送郵件為例子:

數據處理流程

  • ① 應用程序處理
  • 首先應用程序會(huì )進(jìn)行編碼處理,這些編碼相當于 OSI 的表示層功能;
  • 編碼轉化后,郵件不一定馬上被發(fā)送出去,這種何時(shí)建立通信連接何時(shí)發(fā)送數據的管理功能,相當于 OSI 的會(huì )話(huà)層功能。
  • ② TCP 模塊的處理
  • TCP 根據應用的指示,負責建立連接、發(fā)送數據以及斷開(kāi)連接。TCP 提供將應用層發(fā)來(lái)的數據順利發(fā)送至對端的可靠傳輸。為了實(shí)現這一功能,需要在應用層數據的前端附加一個(gè) TCP 首部。
  • ③ IP 模塊的處理
  • IP 將 TCP 傳過(guò)來(lái)的 TCP 首部和 TCP 數據合起來(lái)當做自己的數據,并在 TCP 首部的前端加上自己的 IP 首部。IP 包生成后,參考路由控制表決定接受此 IP 包的路由或主機。
  • ④ 網(wǎng)絡(luò )接口(以太網(wǎng)驅動(dòng))的處理
  • 從 IP 傳過(guò)來(lái)的 IP 包對于以太網(wǎng)來(lái)說(shuō)就是數據。給這些數據附加上以太網(wǎng)首部并進(jìn)行發(fā)送處理,生成的以太網(wǎng)數據包將通過(guò)物理層傳輸給接收端。
  • ⑤ 網(wǎng)絡(luò )接口(以太網(wǎng)驅動(dòng))的處理
  • 主機收到以太網(wǎng)包后,首先從以太網(wǎng)包首部找到 MAC 地址判斷是否為發(fā)送給自己的包,若不是則丟棄數據。
  • 如果是發(fā)送給自己的包,則從以太網(wǎng)包首部中的類(lèi)型確定數據類(lèi)型,再傳給相應的模塊,如 IP、ARP 等。這里的例子則是 IP 。
  • ⑥ IP 模塊的處理
  • IP 模塊接收到 數據后也做類(lèi)似的處理。從包首部中判斷此 IP 地址是否與自己的 IP 地址匹配,如果匹配則根據首部的協(xié)議類(lèi)型將數據發(fā)送給對應的模塊,如 TCP、UDP。這里的例子則是 TCP。
  • 另外嗎,對于有路由器的情況,接收端地址往往不是自己的地址,此時(shí),需要借助路由控制表,在調查應該送往的主機或路由器之后再進(jìn)行轉發(fā)數據。
  • ⑦ TCP 模塊的處理
  • 在 TCP 模塊中,首先會(huì )計算一下校驗和,判斷數據是否被破壞。然后檢查是否在按照序號接收數據。最后檢查端口號,確定具體的應用程序。數據被完整地接收以后,會(huì )傳給由端口號識別的應用程序。
  • ⑧ 應用程序的處理
  • 接收端應用程序會(huì )直接接收發(fā)送端發(fā)送的數據。通過(guò)解析數據,展示相應的內容。

三、傳輸層中的 TCP 和 UDP

TCP/IP 中有兩個(gè)具有代表性的傳輸層協(xié)議,分別是 TCP 和 UDP。

  • TCP 是面向連接的、可靠的流協(xié)議。流就是指不間斷的數據結構,當應用程序采用 TCP 發(fā)送消息時(shí),雖然可以保證發(fā)送的順序,但還是猶如沒(méi)有任何間隔的數據流發(fā)送給接收端。TCP 為提供可靠性傳輸,實(shí)行“順序控制”或“重發(fā)控制”機制。此外還具備“流控制(流量控制)”、“擁塞控制”、提高網(wǎng)絡(luò )利用率等眾多功能。
  • UDP 是不具有可靠性的數據報協(xié)議。細微的處理它會(huì )交給上層的應用去完成。在 UDP 的情況下,雖然可以確保發(fā)送消息的大小,卻不能保證消息一定會(huì )到達。因此,應用有時(shí)會(huì )根據自己的需要進(jìn)行重發(fā)處理。
  • TCP 和 UDP 的優(yōu)缺點(diǎn)無(wú)法簡(jiǎn)單地、絕對地去做比較:TCP 用于在傳輸層有必要實(shí)現可靠傳輸的情況;而在一方面,UDP 主要用于那些對高速傳輸和實(shí)時(shí)性有較高要求的通信或廣播通信。TCP 和 UDP 應該根據應用的目的按需使用。

1. 端口號

數據鏈路和 IP 中的地址,分別指的是 MAC 地址和 IP 地址。前者用來(lái)識別同一鏈路中不同的計算機,后者用來(lái)識別 TCP/IP 網(wǎng)絡(luò )中互連的主機和路由器。在傳輸層也有這種類(lèi)似于地址的概念,那就是端口號。端口號用來(lái)識別同一臺計算機中進(jìn)行通信的不同應用程序。因此,它也被稱(chēng)為程序地址。

1.1 根據端口號識別應用

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

通過(guò)端口號識別應用

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

  • 僅憑目標端口號識別某一個(gè)通信是遠遠不夠的。

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

  • ① 和② 的通信是在兩臺計算機上進(jìn)行的。它們的目標端口號相同,都是80。這里可以根據源端口號加以區分。
  • ③ 和 ① 的目標端口號和源端口號完全相同,但它們各自的源 IP 地址不同。
  • 此外,當 IP 地址和端口號全都一樣時(shí),我們還可以通過(guò)協(xié)議號來(lái)區分(TCP 和 UDP)。

1.3 端口號的確定

  • 標準既定的端口號:這種方法也叫靜態(tài)方法。它是指每個(gè)應用程序都有其指定的端口號。但并不是說(shuō)可以隨意使用任何一個(gè)端口號。例如 HTTP、FTP、TELNET 等廣為使用的應用協(xié)議中所使用的端口號就是固定的。這些端口號被稱(chēng)為知名端口號,分布在 0~1023 之間;除知名端口號之外,還有一些端口號被正式注冊,它們分布在 1024~49151 之間,不過(guò)這些端口號可用于任何通信用途。
  • 時(shí)序分配法:服務(wù)器有必要確定監聽(tīng)端口號,但是接受服務(wù)的客戶(hù)端沒(méi)必要確定端口號。在這種方法下,客戶(hù)端應用程序完全可以不用自己設置端口號,而全權交給操作系統進(jìn)行分配。動(dòng)態(tài)分配的端口號范圍在 49152~65535 之間。

1.4 端口號與協(xié)議

  • 端口號由其使用的傳輸層協(xié)議決定。因此,不同的傳輸層協(xié)議可以使用相同的端口號。
  • 此外,那些知名端口號與傳輸層協(xié)議并無(wú)關(guān)系。只要端口一致都將分配同一種應用程序進(jìn)行處理。

2. UDP

  • UDP 不提供復雜的控制機制,利用 IP 提供面向無(wú)連接的通信服務(wù)。
  • 并且它是將應用程序發(fā)來(lái)的數據在收到的那一刻,立即按照原樣發(fā)送到網(wǎng)絡(luò )上的一種機制。即使是出現網(wǎng)絡(luò )擁堵的情況,UDP 也無(wú)法進(jìn)行流量控制等避免網(wǎng)絡(luò )擁塞行為。
  • 此外,傳輸途中出現丟包,UDP 也不負責重發(fā)。
  • 甚至當包的到達順序出現亂序時(shí)也沒(méi)有糾正的功能。
  • 如果需要以上的細節控制,不得不交由采用 UDP 的應用程序去處理。
  • UDP 常用于一下幾個(gè)方面:1.包總量較少的通信(DNS、SNMP等);2.視頻、音頻等多媒體通信(即時(shí)通信);3.限定于 LAN 等特定網(wǎng)絡(luò )中的應用通信;4.廣播通信(廣播、多播)。

3. TCP

  • TCP 與 UDP 的區別相當大。它充分地實(shí)現了數據傳輸時(shí)各種控制功能,可以進(jìn)行丟包時(shí)的重發(fā)控制,還可以對次序亂掉的分包進(jìn)行順序控制。而這些在 UDP 中都沒(méi)有。
  • 此外,TCP 作為一種面向有連接的協(xié)議,只有在確認通信對端存在時(shí)才會(huì )發(fā)送數據,從而可以控制通信流量的浪費。
  • 根據 TCP 的這些機制,在 IP 這種無(wú)連接的網(wǎng)絡(luò )上也能夠實(shí)現高可靠性的通信( 主要通過(guò)檢驗和、序列號、確認應答、重發(fā)控制、連接管理以及窗口控制等機制實(shí)現)。

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

  • TCP 提供面向有連接的通信傳輸。面向有連接是指在數據通信開(kāi)始之前先做好兩端之間的準備工作。
  • 所謂三次握手是指建立一個(gè) TCP 連接時(shí)需要客戶(hù)端和服務(wù)器端總共發(fā)送三個(gè)包以確認連接的建立。在socket編程中,這一過(guò)程由客戶(hù)端執行connect來(lái)觸發(fā)。

下面來(lái)看看三次握手的流程圖:

三次握手

  • 第一次握手:客戶(hù)端將標志位SYN置為1,隨機產(chǎn)生一個(gè)值seq=J,并將該數據包發(fā)送給服務(wù)器端,客戶(hù)端進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器端確認。
  • 第二次握手:服務(wù)器端收到數據包后由標志位SYN=1知道客戶(hù)端請求建立連接,服務(wù)器端將標志位SYN和ACK都置為1,ack=J+1,隨機產(chǎn)生一個(gè)值seq=K,并將該數據包發(fā)送給客戶(hù)端以確認連接請求,服務(wù)器端進(jìn)入SYN_RCVD狀態(tài)。
  • 第三次握手:客戶(hù)端收到確認后,檢查ack是否為J+1,ACK是否為1,如果正確則將標志位ACK置為1,ack=K+1,并將該數據包發(fā)送給服務(wù)器端,服務(wù)器端檢查ack是否為K+1,ACK是否為1,如果正確則連接建立成功,客戶(hù)端和服務(wù)器端進(jìn)入ESTABLISHED狀態(tài),完成三次握手,隨后客戶(hù)端與服務(wù)器端之間可以開(kāi)始傳輸數據了。

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

  • 四次揮手即終止TCP連接,就是指斷開(kāi)一個(gè)TCP連接時(shí),需要客戶(hù)端和服務(wù)端總共發(fā)送4個(gè)包以確認連接的斷開(kāi)。在socket編程中,這一過(guò)程由客戶(hù)端或服務(wù)端任一方執行close來(lái)觸發(fā)。
  • 由于TCP連接是全雙工的,因此,每個(gè)方向都必須要單獨進(jìn)行關(guān)閉,這一原則是當一方完成數據發(fā)送任務(wù)后,發(fā)送一個(gè)FIN來(lái)終止這一方向的連接,收到一個(gè)FIN只是意味著(zhù)這一方向上沒(méi)有數據流動(dòng)了,即不會(huì )再收到數據了,但是在這個(gè)TCP連接上仍然能夠發(fā)送數據,直到這一方向也發(fā)送了FIN。首先進(jìn)行關(guān)閉的一方將執行主動(dòng)關(guān)閉,而另一方則執行被動(dòng)關(guān)閉。

下面來(lái)看看四次揮手的流程圖:

四次揮手

  • 中斷連接端可以是客戶(hù)端,也可以是服務(wù)器端。
  • 第一次揮手:客戶(hù)端發(fā)送一個(gè)FIN=M,用來(lái)關(guān)閉客戶(hù)端到服務(wù)器端的數據傳送,客戶(hù)端進(jìn)入FIN_WAIT_1狀態(tài)。意思是說(shuō)"我客戶(hù)端沒(méi)有數據要發(fā)給你了",但是如果你服務(wù)器端還有數據沒(méi)有發(fā)送完成,則不必急著(zhù)關(guān)閉連接,可以繼續發(fā)送數據。
  • 第二次揮手:服務(wù)器端收到FIN后,先發(fā)送ack=M+1,告訴客戶(hù)端,你的請求我收到了,但是我還沒(méi)準備好,請繼續你等我的消息。這個(gè)時(shí)候客戶(hù)端就進(jìn)入FIN_WAIT_2 狀態(tài),繼續等待服務(wù)器端的FIN報文。
  • 第三次揮手:當服務(wù)器端確定數據已發(fā)送完成,則向客戶(hù)端發(fā)送FIN=N報文,告訴客戶(hù)端,好了,我這邊數據發(fā)完了,準備好關(guān)閉連接了。服務(wù)器端進(jìn)入LAST_ACK狀態(tài)。
  • 第四次揮手:客戶(hù)端收到FIN=N報文后,就知道可以關(guān)閉連接了,但是他還是不相信網(wǎng)絡(luò ),怕服務(wù)器端不知道要關(guān)閉,所以發(fā)送ack=N+1后進(jìn)入TIME_WAIT狀態(tài),如果Server端沒(méi)有收到ACK則可以重傳。服務(wù)器端收到ACK后,就知道可以斷開(kāi)連接了?蛻(hù)端等待了2MSL后依然沒(méi)有收到回復,則證明服務(wù)器端已正常關(guān)閉,那好,我客戶(hù)端也可以關(guān)閉連接了。最終完成了四次握手。

上面是一方主動(dòng)關(guān)閉,另一方被動(dòng)關(guān)閉的情況,實(shí)際中還會(huì )出現同時(shí)發(fā)起主動(dòng)關(guān)閉的情況,

具體流程如下圖:

同時(shí)揮手

3.3 通過(guò)序列號與確認應答提高可靠性

  • 在 TCP 中,當發(fā)送端的數據到達接收主機時(shí),接收端主機會(huì )返回一個(gè)已收到消息的通知。這個(gè)消息叫做確認應答(ACK)。當發(fā)送端將數據發(fā)出之后會(huì )等待對端的確認應答。如果有確認應答,說(shuō)明數據已經(jīng)成功到達對端。反之,則數據丟失的可能性很大。
  • 在一定時(shí)間內沒(méi)有等待到確認應答,發(fā)送端就可以認為數據已經(jīng)丟失,并進(jìn)行重發(fā)。由此,即使產(chǎn)生了丟包,仍然能夠保證數據能夠到達對端,實(shí)現可靠傳輸。
  • 未收到確認應答并不意味著(zhù)數據一定丟失。也有可能是數據對方已經(jīng)收到,只是返回的確認應答在途中丟失。這種情況也會(huì )導致發(fā)送端誤以為數據沒(méi)有到達目的地而重發(fā)數據。
  • 此外,也有可能因為一些其他原因導致確認應答延遲到達,在源主機重發(fā)數據以后才到達的情況也屢見(jiàn)不鮮。此時(shí),源主機只要按照機制重發(fā)數據即可。
  • 對于目標主機來(lái)說(shuō),反復收到相同的數據是不可取的。為了對上層應用提供可靠的傳輸,目標主機必須放棄重復的數據包。為此我們引入了序列號。
  • 序列號是按照順序給發(fā)送數據的每一個(gè)字節(8位字節)都標上號碼的編號。接收端查詢(xún)接收數據 TCP 首部中的序列號和數據的長(cháng)度,將自己下一步應該接收的序列號作為確認應答返送回去。通過(guò)序列號和確認應答號,TCP 能夠識別是否已經(jīng)接收數據,又能夠判斷是否需要接收,從而實(shí)現可靠傳輸。

序列號和確認應答

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

  • 重發(fā)超時(shí)是指在重發(fā)數據之前,等待確認應答到來(lái)的那個(gè)特定時(shí)間間隔。如果超過(guò)這個(gè)時(shí)間仍未收到確認應答,發(fā)送端將進(jìn)行數據重發(fā)。最理想的是,找到一個(gè)最小時(shí)間,它能保證“確認應答一定能在這個(gè)時(shí)間內返回”。
  • TCP 要求不論處在何種網(wǎng)絡(luò )環(huán)境下都要提供高性能通信,并且無(wú)論網(wǎng)絡(luò )擁堵情況發(fā)生何種變化,都必須保持這一特性。為此,它在每次發(fā)包時(shí)都會(huì )計算往返時(shí)間及其偏差。將這個(gè)往返時(shí)間和偏差時(shí)間相加,重發(fā)超時(shí)的時(shí)間就是比這個(gè)總和要稍大一點(diǎn)的值。
  • 在 BSD 的 Unix 以及 Windows 系統中,超時(shí)都以0.5秒為單位進(jìn)行控制,因此重發(fā)超時(shí)都是0.5秒的整數倍。不過(guò),最初其重發(fā)超時(shí)的默認值一般設置為6秒左右。
  • 數據被重發(fā)之后若還是收不到確認應答,則進(jìn)行再次發(fā)送。此時(shí),等待確認應答的時(shí)間將會(huì )以2倍、4倍的指數函數延長(cháng)。
  • 此外,數據也不會(huì )被無(wú)限、反復地重發(fā)。達到一定重發(fā)次數之后,如果仍沒(méi)有任何確認應答返回,就會(huì )判斷為網(wǎng)絡(luò )或對端主機發(fā)生了異常,強制關(guān)閉連接。并且通知應用通信異常強行終止。

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

  • 在建立 TCP 連接的同時(shí),也可以確定發(fā)送數據包的單位,我們也可以稱(chēng)其為“最大消息長(cháng)度”(MSS)。最理想的情況是,最大消息長(cháng)度正好是 IP 中不會(huì )被分片處理的最大數據長(cháng)度。
  • TCP 在傳送大量數據時(shí),是以 MSS 的大小將數據進(jìn)行分割發(fā)送。進(jìn)行重發(fā)時(shí)也是以 MSS 為單位。
  • MSS 在三次握手的時(shí)候,在兩端主機之間被計算得出。兩端的主機在發(fā)出建立連接的請求時(shí),會(huì )在 TCP 首部中寫(xiě)入 MSS 選項,告訴對方自己的接口能夠適應的 MSS 的大小。然后會(huì )在兩者之間選擇一個(gè)較小的值投入使用。

3.6 利用窗口控制提高速度

  • TCP 以1個(gè)段為單位,每發(fā)送一個(gè)段進(jìn)行一次確認應答的處理。這樣的傳輸方式有一個(gè)缺點(diǎn),就是包的往返時(shí)間越長(cháng)通信性能就越低。
  • 為解決這個(gè)問(wèn)題,TCP 引入了窗口這個(gè)概念。確認應答不再是以每個(gè)分段,而是以更大的單位進(jìn)行確認,轉發(fā)時(shí)間將會(huì )被大幅地縮短。也就是說(shuō),發(fā)送端主機,在發(fā)送了一個(gè)段以后不必要一直等待確認應答,而是繼續發(fā)送。如下圖所示:

  • 窗口控制
  • 窗口大小就是指無(wú)需等待確認應答而可以繼續發(fā)送數據的最大值。上圖中窗口大小為4個(gè)段。這個(gè)機制實(shí)現了使用大量的緩沖區,通過(guò)對多個(gè)段同時(shí)進(jìn)行確認應答的功能。

3.7 滑動(dòng)窗口控制

滑動(dòng)窗口

  • 上圖中的窗口內的數據即便沒(méi)有收到確認應答也可以被發(fā)送出去。不過(guò),在整個(gè)窗口的確認應答沒(méi)有到達之前,如果其中部分數據出現丟包,那么發(fā)送端仍然要負責重傳。為此,發(fā)送端主機需要設置緩存保留這些待被重傳的數據,直到收到他們的確認應答。
  • 在滑動(dòng)窗口以外的部分包括未發(fā)送的數據以及已經(jīng)確認對端已收到的數據。當數據發(fā)出后若如期收到確認應答就可以不用再進(jìn)行重發(fā),此時(shí)數據就可以從緩存區清除。
  • 收到確認應答的情況下,將窗口滑動(dòng)到確認應答中的序列號的位置。這樣可以順序地將多個(gè)段同時(shí)發(fā)送提高通信性能。這種機制也別稱(chēng)為滑動(dòng)窗口控制。

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

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

  • ① 確認應答未能返回的情況。在這種情況下,數據已經(jīng)到達對端,是不需要再進(jìn)行重發(fā)的,如下圖:

部分確認應答丟失

  • ② 某個(gè)報文段丟失的情況。接收主機如果收到一個(gè)自己應該接收的序列號以外的數據時(shí),會(huì )針對當前為止收到數據返回確認應答。如下圖所示,當某一報文段丟失后,發(fā)送端會(huì )一直收到序號為1001的確認應答,因此,在窗口比較大,又出現報文段丟失的情況下,同一個(gè)序列號的確認應答將會(huì )被重復不斷地返回。而發(fā)送端主機如果連續3次收到同一個(gè)確認應答,就會(huì )將其對應的數據進(jìn)行重發(fā)。這種機制比之前提到的超時(shí)管理更加高效,因此也被稱(chēng)為高速重發(fā)控制。

高速重發(fā)控制

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

  • IP(IPv4、IPv6)相當于 OSI 參考模型中的第3層——網(wǎng)絡(luò )層。網(wǎng)絡(luò )層的主要作用是“實(shí)現終端節點(diǎn)之間的通信”。這種終端節點(diǎn)之間的通信也叫“點(diǎn)對點(diǎn)通信”。
  • 網(wǎng)絡(luò )的下一層——數據鏈路層的主要作用是在互連同一種數據鏈路的節點(diǎn)之間進(jìn)行包傳遞。而一旦跨越多種數據鏈路,就需要借助網(wǎng)絡(luò )層。網(wǎng)絡(luò )層可以跨越不同的數據鏈路,即使是在不同的數據鏈路上也能實(shí)現兩端節點(diǎn)之間的數據包傳輸。
  • IP 大致分為三大作用模塊,它們是 IP 尋址、路由(最終節點(diǎn)為止的轉發(fā))以及 IP 分包與組包。

1. IP 地址

1.1 IP 地址概述

  • 在計算機通信中,為了識別通信對端,必須要有一個(gè)類(lèi)似于地址的識別碼進(jìn)行標識。在數據鏈路中的 MAC 地址正是用來(lái)標識同一個(gè)鏈路中不同計算機的一種識別碼。
  • 作為網(wǎng)絡(luò )層的 IP ,也有這種地址信息,一般叫做 IP 地址。IP 地址用于在“連接到網(wǎng)絡(luò )中的所有主機中識別出進(jìn)行通信的目標地址”。因此,在 TCP/IP 通信中所有主機或路由器必須設定自己的 IP 地址。
  • 不論一臺主機與哪種數據鏈路連接,其 IP 地址的形式都保持不變。
  • IP 地址(IPv4 地址)由32位正整數來(lái)表示。IP 地址在計算機內部以二進(jìn)制方式被處理。然而,由于我們并不習慣于采用二進(jìn)制方式,我們將32位的 IP 地址以每8位為一組,分成4組,每組以 “.” 隔開(kāi),再將每組數轉換成十進(jìn)制數。如下:

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

  • 如下圖,網(wǎng)絡(luò )標識在數據鏈路的每個(gè)段配置不同的值。網(wǎng)絡(luò )標識必須保證相互連接的每個(gè)段的地址不相重復。而相同段內相連的主機必須有相同的網(wǎng)絡(luò )地址。IP 地址的“主機標識”則不允許在同一個(gè)網(wǎng)段內重復出現。由此,可以通過(guò)設置網(wǎng)絡(luò )地址和主機地址,在相互連接的整個(gè)網(wǎng)絡(luò )中保證每臺主機的 IP 地址都不會(huì )相互重疊。即 IP 地址具有了唯一性。

IP地址的主機標識

  • 如下圖,IP 包被轉發(fā)到途中某個(gè)路由器時(shí),正是利用目標 IP 地址的網(wǎng)絡(luò )標識進(jìn)行路由。因為即使不看主機標識,只要一見(jiàn)到網(wǎng)絡(luò )標識就能判斷出是否為該網(wǎng)段內的主機。

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

1.3 IP 地址的分類(lèi)

  • IP 地址分為四個(gè)級別,分別為A類(lèi)、B類(lèi)、C類(lèi)、D類(lèi)。它根據 IP 地址中從第 1 位到第 4 位的比特列對其網(wǎng)絡(luò )標識和主機標識進(jìn)行區分。
  • A 類(lèi) IP 地址是首位以 “0” 開(kāi)頭的地址。從第 1 位到第 8 位是它的網(wǎng)絡(luò )標識。用十進(jìn)制表示的話(huà),0.0.0.0~127.0.0.0 是 A 類(lèi)的網(wǎng)絡(luò )地址。A 類(lèi)地址的后 24 位相當于主機標識。因此,一個(gè)網(wǎng)段內可容納的主機地址上限為16,777,214個(gè)。
  • B 類(lèi) IP 地址是前兩位 “10” 的地址。從第 1 位到第 16 位是它的網(wǎng)絡(luò )標識。用十進(jìn)制表示的話(huà),128.0.0.0~191.255.0.0 是 B 類(lèi)的網(wǎng)絡(luò )地址。B 類(lèi)地址的后 16 位相當于主機標識。因此,一個(gè)網(wǎng)段內可容納的主機地址上限為65,534個(gè)。
  • C 類(lèi) IP 地址是前三位為 “110” 的地址。從第 1 位到第 24 位是它的網(wǎng)絡(luò )標識。用十進(jìn)制表示的話(huà),192.0.0.0~223.255.255.0 是 C 類(lèi)的網(wǎng)絡(luò )地址。C 類(lèi)地址的后 8 位相當于主機標識。因此,一個(gè)網(wǎng)段內可容納的主機地址上限為254個(gè)。
  • D 類(lèi) IP 地址是前四位為 “1110” 的地址。從第 1 位到第 32 位是它的網(wǎng)絡(luò )標識。用十進(jìn)制表示的話(huà),224.0.0.0~239.255.255.255 是 D 類(lèi)的網(wǎng)絡(luò )地址。D 類(lèi)地址沒(méi)有主機標識,常用于多播。
  • 在分配 IP 地址時(shí)關(guān)于主機標識有一點(diǎn)需要注意。即要用比特位表示主機地址時(shí),不可以全部為 0 或全部為 1。因為全部為 0 只有在表示對應的網(wǎng)絡(luò )地址或 IP 地址不可以獲知的情況下才使用。而全部為 1 的主機通常作為廣播地址。因此,在分配過(guò)程中,應該去掉這兩種情況。這也是為什么 C 類(lèi)地址每個(gè)網(wǎng)段最多只能有 254( 28 - 2 = 254)個(gè)主機地址的原因。

1.4 廣播地址

  • 廣播地址用于在同一個(gè)鏈路中相互連接的主機之間發(fā)送數據包。將 IP 地址中的主機地址部分全部設置為 1,就成了廣播地址。
  • 廣播分為本地廣播和直接廣播兩種。在本網(wǎng)絡(luò )內的廣播叫做本地廣播;在不同網(wǎng)絡(luò )之間的廣播叫做直接廣播。

1.5 IP 多播

  • 多播用于將包發(fā)送給特定組內的所有主機。由于其直接使用 IP 地址,因此也不存在可靠傳輸。
  • 相比于廣播,多播既可以穿透路由器,又可以實(shí)現只給那些必要的組發(fā)送數據包。請看下圖:

  • IP 多播
  • 多播使用 D 類(lèi)地址。因此,如果從首位開(kāi)始到第 4 位是 “1110”,就可以認為是多播地址。而剩下的 28 位可以成為多播的組編號。
  • 此外, 對于多播,所有的主機(路由器以外的主機和終端主機)必須屬于 224.0.0.1 的組,所有的路由器必須屬于 224.0.0.2 的組。

1.6 子網(wǎng)掩碼

  • 現在一個(gè) IP 地址的網(wǎng)絡(luò )標識和主機標識已不再受限于該地址的類(lèi)別,而是由一個(gè)叫做“子網(wǎng)掩碼”的識別碼通過(guò)子網(wǎng)網(wǎng)絡(luò )地址細分出比 A 類(lèi)、B 類(lèi)、C 類(lèi)更小粒度的網(wǎng)絡(luò )。這種方式實(shí)際上就是將原來(lái) A 類(lèi)、B 類(lèi)、C 類(lèi)等分類(lèi)中的主機地址部分用作子網(wǎng)地址,可以將原網(wǎng)絡(luò )分為多個(gè)物理網(wǎng)絡(luò )的一種機制。
  • 子網(wǎng)掩碼用二進(jìn)制方式表示的話(huà),也是一個(gè) 32 位的數字。它對應 IP 地址網(wǎng)絡(luò )標識部分的位全部為 “1”,對應 IP 地址主機標識的部分則全部為 “0”。由此,一個(gè) IP 地址可以不再受限于自己的類(lèi)別,而是可以用這樣的子網(wǎng)掩碼自由地定位自己的網(wǎng)絡(luò )標識長(cháng)度。當然,子網(wǎng)掩碼必須是 IP 地址的首位開(kāi)始連續的 “1”。
  • 對于子網(wǎng)掩碼,目前有兩種表示方式。第一種是,將 IP 地址與子網(wǎng)掩碼的地址分別用兩行來(lái)表示。以 172.20.100.52 的前 26 位是網(wǎng)絡(luò )地址的情況為例,如下:

  • 第二種表示方式是,在每個(gè) IP 地址后面追加網(wǎng)絡(luò )地址的位數用 “/ ” 隔開(kāi),如下:

2. 路由

  • 發(fā)送數據包時(shí)所使用的地址是網(wǎng)絡(luò )層的地址,即 IP 地址。然而僅僅有 IP 地址還不足以實(shí)現將數據包發(fā)送到對端目標地址,在數據發(fā)送過(guò)程中還需要類(lèi)似于“指明路由器或主機”的信息,以便真正發(fā)往目標地址。保存這種信息的就是路由控制表。
  • 該路由控制表的形成方式有兩種:一種是管理員手動(dòng)設置,另一種是路由器與其他路由器相互交換信息時(shí)自動(dòng)刷新。前者也叫做靜態(tài)路由控制,而后者叫做動(dòng)態(tài)路由控制。
  • IP 協(xié)議始終認為路由表是正確的。然后,IP 本身并沒(méi)有定義制作路由控制表的協(xié)議。即 IP 沒(méi)有制作路由控制表的機制。該表示由一個(gè)叫做“路由協(xié)議”的協(xié)議制作而成。

2.1 IP 地址與路由控制

  • IP 地址的網(wǎng)絡(luò )地址部分用于進(jìn)行路由控制。
  • 路由控制表中記錄著(zhù)網(wǎng)絡(luò )地址與下一步應該發(fā)送至路由器的地址。
  • 在發(fā)送 IP 包時(shí),首先要確定 IP 包首部中的目標地址,再從路由控制表中找到與該地址具有相同網(wǎng)絡(luò )地址的記錄,根據該記錄將 IP 包轉發(fā)給相應的下一個(gè)路由器。如果路由控制表中存在多條相同網(wǎng)絡(luò )地址的記錄,就選擇一個(gè)最為吻合的網(wǎng)絡(luò )地址。

路由控制表與 IP 包發(fā)送

3. IP 分包與組包

  • 每種數據鏈路的最大傳輸單元(MTU)都不盡相同,因為每個(gè)不同類(lèi)型的數據鏈路的使用目的不同。使用目的不同,可承載的 MTU 也就不同。
  • 任何一臺主機都有必要對 IP 分片進(jìn)行相應的處理。分片往往在網(wǎng)絡(luò )上遇到比較大的報文無(wú)法一下子發(fā)送出去時(shí)才會(huì )進(jìn)行處理。
  • 經(jīng)過(guò)分片之后的 IP 數據報在被重組的時(shí)候,只能由目標主機進(jìn)行。路由器雖然做分片但不會(huì )進(jìn)行重組。

3.1 路徑 MTU 發(fā)現

  • 分片機制也有它的不足。如路由器的處理負荷加重之類(lèi)。因此,只要允許,是不希望由路由器進(jìn)行 IP 數據包的分片處理的。
  • 為了應對分片機制的不足,“路徑 MTU 發(fā)現” 技術(shù)應運而生。路徑 MTU 指的是,從發(fā)送端主機到接收端主機之間不需要分片是最大 MTU 的大小。即路徑中存在的所有數據鏈路中最小的 MTU 。
  • 進(jìn)行路徑 MTU 發(fā)現,就可以避免在中途的路由器上進(jìn)行分片處理,也可以在 TCP 中發(fā)送更大的包。

4. IPv6

  • IPv6(IP version 6)是為了根本解決 IPv4 地址耗盡的問(wèn)題而被標準化的網(wǎng)際協(xié)議。IPv4 的地址長(cháng)度為 4 個(gè) 8 位字節,即 32 比特。而 IPv6 的地址長(cháng)度則是原來(lái)的 4 倍,即 128 比特,一般寫(xiě)成 8 個(gè) 16 位字節。

4.1 IPv6 的特點(diǎn)

  • IP 得知的擴大與路由控制表的聚合。
  • 性能提升。包首部長(cháng)度采用固定的值(40字節),不再采用首部檢驗碼。簡(jiǎn)化首部結構,減輕路由器負擔。路由器不再做分片處理。
  • 支持即插即用功能。即使沒(méi)有DHCP服務(wù)器也可以實(shí)現自動(dòng)分配 IP 地址。
  • 采用認證與加密功能。應對偽造 IP 地址的網(wǎng)絡(luò )安全功能以及防止線(xiàn)路竊聽(tīng)的功能。
  • 多播、Mobile IP 成為擴展功能。

4.2 IPv6 中 IP 地址的標記方法

  • 一般人們將 128 比特 IP 地址以每 16 比特為一組,每組用冒號(“:”)隔開(kāi)進(jìn)行標記。
  • 而且如果出現連續的 0 時(shí)還可以將這些 0 省略,并用兩個(gè)冒號(“::”)隔開(kāi)。但是,一個(gè) IP 地址中只允許出現一次兩個(gè)連續的冒號。

4.3 IPv6 地址的結構

  • IPv6 類(lèi)似 IPv4,也是通過(guò) IP 地址的前幾位標識 IP 地址的種類(lèi)。
  • 在互聯(lián)網(wǎng)通信中,使用一種全局的單播地址。它是互聯(lián)網(wǎng)中唯一的一個(gè)地址,不需要正式分配 IP 地址。

4.4 全局單播地址

  • 全局單播地址是指世界上唯一的一個(gè)地址。它是互聯(lián)網(wǎng)通信以及各個(gè)域內部通信中最為常用的一個(gè) IPv6 地址。
  • 格式如下圖所示,現在 IPv6 的網(wǎng)絡(luò )中所使用的格式為,n = 48,m = 16 以及 128 - n - m = 64。即前 64 比特為網(wǎng)絡(luò )標識,后 64 比特為主機標識。

全局單播地址

4.5 鏈路本地單播地址

  • 鏈路本地單播地址是指在同一個(gè)數據鏈路內唯一的地址。它用于不經(jīng)過(guò)路由器,在同一個(gè)鏈路中的通信。通常接口 ID 保存 64 比特版的 MAC 地址。

鏈路本地單播地址

4.6 唯一本地地址

  • 唯一本地地址是不進(jìn)行互聯(lián)網(wǎng)通信時(shí)所用的地址。
  • 唯一本地地址雖然不會(huì )與互聯(lián)網(wǎng)連接,但是也會(huì )盡可能地隨機生成一個(gè)唯一的全局 ID。
  • L 通常被置為 1
  • 全局 ID 的值隨機決定
  • 子網(wǎng) ID 是指該域子網(wǎng)地址
  • 接口 ID 即為接口的 ID

唯一本地地址

4.7 IPv6 分段處理

  • IPv6 的分片處理只在作為起點(diǎn)的發(fā)送端主機上進(jìn)行,路由器不參與分片。
  • IPv6 中最小 MTU 為 1280 字節,因此,在嵌入式系統中對于那些有一定系統資源限制的設備來(lái)說(shuō),不需要進(jìn)行“路徑 MTU 發(fā)現”,而是在發(fā)送 IP 包時(shí)直接以 1280 字節為單位分片送出。

4.8 IP 首部(暫略)

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

  • IP 旨在讓最終目標主機收到數據包,但是在這一過(guò)程中僅僅有 IP 是無(wú)法實(shí)現通信的。必須還有能夠解析主機名稱(chēng)和 MAC 地址的功能,以及數據包在發(fā)送過(guò)程中異常情況處理的功能。

5.1 DNS

  • 我們平常在訪(fǎng)問(wèn)某個(gè)網(wǎng)站時(shí)不適用 IP 地址,而是用一串由羅馬字和點(diǎn)號組成的字符串。而一般用戶(hù)在使用 TCP/IP 進(jìn)行通信時(shí)也不使用 IP 地址。能夠這樣做是因為有了 DNS (Domain Name System)功能的支持。DNS 可以將那串字符串自動(dòng)轉換為具體的 IP 地址。
  • 這種 DNS 不僅適用于 IPv4,還適用于 IPv6。

5.2 ARP

  • 只要確定了 IP 地址,就可以向這個(gè)目標地址發(fā)送 IP 數據報。然而,在底層數據鏈路層,進(jìn)行實(shí)際通信時(shí)卻有必要了解每個(gè) IP 地址所對應的 MAC 地址。
  • ARP 是一種解決地址問(wèn)題的協(xié)議。以目標 IP 地址為線(xiàn)索,用來(lái)定位下一個(gè)應該接收數據分包的網(wǎng)絡(luò )設備對應的 MAC 地址。不過(guò) ARP 只適用于 IPv4,不能用于 IPv6。IPv6 中可以用 ICMPv6 替代 ARP 發(fā)送鄰居探索消息。
  • RARP 是將 ARP 反過(guò)來(lái),從 MAC 地址定位 IP 地址的一種協(xié)議。

5.3 ICMP

  • ICMP 的主要功能包括,確認 IP 包是否成功送達目標地址,通知在發(fā)送過(guò)程當中 IP 包被廢棄的具體原因,改善網(wǎng)絡(luò )設置等。
  • IPv4 中 ICMP 僅作為一個(gè)輔助作用支持 IPv4。也就是說(shuō),在 IPv4 時(shí)期,即使沒(méi)有 ICMP,仍然可以實(shí)現 IP 通信。然而,在 IPv6 中,ICMP 的作用被擴大,如果沒(méi)有 ICMPv6,IPv6 就無(wú)法進(jìn)行正常通信。

5.4 DHCP

  • 如果逐一為每一臺主機設置 IP 地址會(huì )是非常繁瑣的事情。特別是在移動(dòng)使用筆記本電腦、只能終端以及平板電腦等設備時(shí),每移動(dòng)到一個(gè)新的地方,都要重新設置 IP 地址。
  • 于是,為了實(shí)現自動(dòng)設置 IP 地址、統一管理 IP 地址分配,就產(chǎn)生了 DHCP(Dynamic Host Configuration Protocol)協(xié)議。有了 DHCP,計算機只要連接到網(wǎng)絡(luò ),就可以進(jìn)行 TCP/IP 通信。也就是說(shuō),DHCP 讓即插即用變得可能。
  • DHCP 不僅在 IPv4 中,在 IPv6 中也可以使用。

5.5 NAT

  • NAT(Network Address Translator)是用于在本地網(wǎng)絡(luò )中使用私有地址,在連接互聯(lián)網(wǎng)時(shí)轉而使用全局 IP 地址的技術(shù)。
  • 除轉換 IP 地址外,還出現了可以轉換 TCP、UDP 端口號的 NAPT(Network Address Ports Translator)技術(shù),由此可以實(shí)現用一個(gè)全局 IP 地址與多個(gè)主機的通信。
  • NAT(NAPT)實(shí)際上是為正在面臨地址枯竭的 IPv4 而開(kāi)發(fā)的技術(shù)。不過(guò),在 IPv6 中為了提高網(wǎng)絡(luò )安全也在使用 NAT,在 IPv4 和 IPv6 之間的相互通信當中常常使用 NAT-PT。

5.6 IP 隧道

夾著(zhù) IPv4 網(wǎng)絡(luò )的兩個(gè) IPv6 網(wǎng)絡(luò )

  • 如上圖的網(wǎng)絡(luò )環(huán)境中,網(wǎng)絡(luò ) A 與網(wǎng)絡(luò ) B 之間無(wú)法直接進(jìn)行通信,為了讓它們之間正常通信,這時(shí)必須得采用 IP 隧道的功能。
  • IP 隧道可以將那些從網(wǎng)絡(luò ) A 發(fā)過(guò)來(lái)的 IPv6 的包統合為一個(gè)數據,再為之追加一個(gè) IPv4 的首部以后轉發(fā)給網(wǎng)絡(luò ) C。
  • 一般情況下,緊接著(zhù) IP 首部的是 TCP 或 UDP 的首部。然而,現在的應用當中“ IP 首部的后面還是 IP 首部”或者“ IP 首部的后面是 IPv6 的首部”等情況與日俱增。這種在網(wǎng)絡(luò )層的首部后面追加網(wǎng)絡(luò )層首部的通信方法就叫做“ IP 隧道”。


精品福利视频一区二区三区,免费A级毛片无码无遮挡,偷窥目拍性综合图区,亚洲欧洲无码AV电影在线观看,超清无码熟妇人妻AV在线电影