前言
TCP/IP不是一個協定,而是一個協定族的統稱。裡面包括了IP協定,IMCP協定,TCP協定,以及我們更加熟悉的http、ftp、pop3協定等等。
文末有彩蛋哦
一圖看完本文
一、 計算機網絡體系結構分層
計算機網絡體系結構分層
計算機網絡體系結構分層
不難看出,TCP/IP 與 OSI 在分層子產品上稍有差別。OSI 參考模型注重“通信協定必要的功能是什麼”,而 TCP/IP 則更強調“在計算機上實作協定應該開發哪種程式”。
二、 TCP/IP 基礎
1. TCP/IP 的具體含義
從字面意義上講,有人可能會認為 TCP/IP 是指 TCP 和 IP 兩種協定。實際生活當中有時也确實就是指這兩種協定。然而在很多情況下,它隻是利用 IP 進行通信時所必須用到的協定群的統稱。具體來說,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都屬于 TCP/IP 協定。他們與 TCP 或 IP 的關系緊密,是網際網路必不可少的組成部分。TCP/IP 一詞泛指這些協定,是以,有時也稱 TCP/IP 為網際協定群。
網際網路進行通信時,需要相應的網絡協定,TCP/IP 原本就是為使用網際網路而開發制定的協定族。是以,網際網路的協定就是 TCP/IP,TCP/IP 就是網際網路的協定。
網際協定群
2. 資料包
包、幀、資料包、段、消息
以上五個術語都用來表述資料的機關,大緻區分如下:
- 包可以說是全能性術語;
- 幀用于表示資料鍊路層中包的機關;
- 資料表示 IP 和 UDP 等網絡層以上的分層中包的機關;
- 段則表示 TCP 資料流中的資訊;
- 消息是指應用協定中資料的機關。
每個分層中,都會對所發送的資料附加一個首部,在這個首部中包含了該層必要的資訊,如發送的目标位址以及協定相關資訊。通常,為協定提供的資訊為包首部,所要發送的内容為資料。在下一層的角度看,從上一層收到的包全部都被認為是本層的資料。
資料包首部
網絡中傳輸的資料包由兩部分組成:一部分是協定所要用到的首部,另一部分是上一層傳過來的資料。首部的結構由協定的具體規範詳細定義。在資料包的首部,明确标明了協定應該如何讀取資料。反過來說,看到首部,也就能夠了解該協定必要的資訊以及所要處理的資料。包首部就像協定的臉。
3. 資料處理流程
下圖以使用者 a 向使用者 b 發送郵件為例子:
資料處理流程
- ① 應用程式處理
- 首先應用程式會進行編碼處理,這些編碼相當于 OSI 的表示層功能;
- 編碼轉化後,郵件不一定馬上被發送出去,這種何時建立通信連接配接何時發送資料的管理功能,相當于 OSI 的會話層功能。
- ② TCP 子產品的處理
- TCP 根據應用的訓示,負責建立連接配接、發送資料以及斷開連接配接。TCP 提供将應用層發來的資料順利發送至對端的可靠傳輸。為了實作這一功能,需要在應用層資料的前端附加一個 TCP 首部。
- ③ IP 子產品的處理
- IP 将 TCP 傳過來的 TCP 首部和 TCP 資料合起來當做自己的資料,并在 TCP 首部的前端加上自己的 IP 首部。IP 包生成後,參考路由控制表決定接受此 IP 包的路由或主機。
- ④ 網絡接口(以太網驅動)的處理
- 從 IP 傳過來的 IP 包對于以太網來說就是資料。給這些資料附加上以太網首部并進行發送處理,生成的以太網資料包将通過實體層傳輸給接收端。
- ⑤ 網絡接口(以太網驅動)的處理
- 主機收到以太網包後,首先從以太網包首部找到 MAC 位址判斷是否為發送給自己的包,若不是則丢棄資料。
- 如果是發送給自己的包,則從以太網包首部中的類型确定資料類型,再傳給相應的子產品,如 IP、ARP 等。這裡的例子則是 IP 。
- ⑥ IP 子產品的處理
- IP 子產品接收到 資料後也做類似的處理。從包首部中判斷此 IP 位址是否與自己的 IP 位址比對,如果比對則根據首部的協定類型将資料發送給對應的子產品,如 TCP、UDP。這裡的例子則是 TCP。
- 另外嗎,對于有路由器的情況,接收端位址往往不是自己的位址,此時,需要借助路由控制表,在調查應該送往的主機或路由器之後再進行轉發資料。
- ⑦ TCP 子產品的處理
- 在 TCP 子產品中,首先會計算一下校驗和,判斷資料是否被破壞。然後檢查是否在按照序号接收資料。最後檢查端口号,确定具體的應用程式。資料被完整地接收以後,會傳給由端口号識别的應用程式。
- ⑧ 應用程式的處理
- 接收端應用程式會直接接收發送端發送的資料。通過解析資料,展示相應的内容。
三、傳輸層中的 TCP 和 UDP
TCP/IP 中有兩個具有代表性的傳輸層協定,分别是 TCP 和 UDP。
- TCP 是面向連接配接的、可靠的流協定。流就是指不間斷的資料結構,當應用程式采用 TCP 發送消息時,雖然可以保證發送的順序,但還是猶如沒有任何間隔的資料流發送給接收端。TCP 為提供可靠性傳輸,實行“順序控制”或“重發控制”機制。此外還具備“流控制(流量控制)”、“擁塞控制”、提高網絡使用率等衆多功能。
- UDP 是不具有可靠性的資料報協定。細微的處理它會交給上層的應用去完成。在 UDP 的情況下,雖然可以確定發送消息的大小,卻不能保證消息一定會到達。是以,應用有時會根據自己的需要進行重發處理。
- TCP 和 UDP 的優缺點無法簡單地、絕對地去做比較:TCP 用于在傳輸層有必要實作可靠傳輸的情況;而在一方面,UDP 主要用于那些對高速傳輸和實時性有較高要求的通信或廣播通信。TCP 和 UDP 應該根據應用的目的按需使用。
1. 端口号
資料鍊路和 IP 中的位址,分别指的是 MAC 位址和 IP 位址。前者用來識别同一鍊路中不同的計算機,後者用來識别 TCP/IP 網絡中互連的主機和路由器。在傳輸層也有這種類似于位址的概念,那就是端口号。端口号用來識别同一台計算機中進行通信的不同應用程式。是以,它也被稱為程式位址。
1.1 根據端口号識别應用
一台計算機上同時可以運作多個程式。傳輸層協定正是利用這些端口号識别本機中正在進行通信的應用程式,并準确地将資料傳輸。
通過端口号識别應用
1.2 通過 IP 位址、端口号、協定号進行通信識别
- 僅憑目标端口号識别某一個通信是遠遠不夠的。
通過端口号、IP位址、協定号進行通信識别
- ① 和② 的通信是在兩台計算機上進行的。它們的目标端口号相同,都是80。這裡可以根據源端口号加以區分。
- ③ 和 ① 的目标端口号和源端口号完全相同,但它們各自的源 IP 位址不同。
- 此外,當 IP 位址和端口号全都一樣時,我們還可以通過協定号來區分(TCP 和 UDP)。
1.3 端口号的确定
- 标準既定的端口号:這種方法也叫靜态方法。它是指每個應用程式都有其指定的端口号。但并不是說可以随意使用任何一個端口号。例如 HTTP、FTP、TELNET 等廣為使用的應用協定中所使用的端口号就是固定的。這些端口号被稱為知名端口号,分布在 0~1023 之間;除知名端口号之外,還有一些端口号被正式注冊,它們分布在 1024~49151 之間,不過這些端口号可用于任何通信用途。
- 時序配置設定法:伺服器有必要确定監聽端口号,但是接受服務的用戶端沒必要确定端口号。在這種方法下,用戶端應用程式完全可以不用自己設指端口号,而全權交給作業系統進行配置設定。動态配置設定的端口号範圍在 49152~65535 之間。
1.4 端口号與協定
- 端口号由其使用的傳輸層協定決定。是以,不同的傳輸層協定可以使用相同的端口号。
- 此外,那些知名端口号與傳輸層協定并無關系。隻要端口一緻都将配置設定同一種應用程式進行處理。
2. UDP
- UDP 不提供複雜的控制機制,利用 IP 提供面向無連接配接的通信服務。
- 并且它是将應用程式發來的資料在收到的那一刻,立即按照原樣發送到網絡上的一種機制。即使是出現網絡擁堵的情況,UDP 也無法進行流量控制等避免網絡擁塞行為。
- 此外,傳輸途中出現丢包,UDP 也不負責重罰。
- 甚至當包的到達順序出現亂序時也沒有糾正的功能。
- 如果需要以上的細節控制,不得不交由采用 UDP 的應用程式去處理。
- UDP 常用于一下幾個方面:1.包總量較少的通信(DNS、SNMP等);2.視訊、音頻等多媒體通信(即時通信);3.限定于 LAN 等特定網絡中的應用通信;4.廣播通信(廣播、多點傳播)。
3. TCP
- TCP 與 UDP 的差別相當大。它充分地實作了資料傳輸時各種控制功能,可以進行丢包時的重發控制,還可以對次序亂掉的分包進行順序控制。而這些在 UDP 中都沒有。
- 此外,TCP 作為一種面向有連接配接的協定,隻有在确認通信對端存在時才會發送資料,進而可以控制通信流量的浪費。
- 根據 TCP 的這些機制,在 IP 這種無連接配接的網絡上也能夠實作高可靠性的通信( 主要通過檢驗和、序列号、确認應答、重發控制、連接配接管理以及視窗控制等機制實作)。
3.1 三次握手(重點)
- TCP 提供面向有連接配接的通信傳輸。面向有連接配接是指在資料通信開始之前先做好兩端之間的準備工作。
- 所謂三次握手是指建立一個 TCP 連接配接時需要用戶端和伺服器端總共發送三個包以确認連接配接的建立。在socket程式設計中,這一過程由用戶端執行connect來觸發。
下面來看看三次握手的流程圖:
三次握手
- 第一次握手:用戶端将标志位SYN置為1,随機産生一個值seq=J,并将該資料包發送給伺服器端,用戶端進入SYN_SENT狀态,等待伺服器端确認。
- 第二次握手:伺服器端收到資料包後由标志位SYN=1知道用戶端請求建立連接配接,伺服器端将标志位SYN和ACK都置為1,ack=J+1,随機産生一個值seq=K,并将該資料包發送給用戶端以确認連接配接請求,伺服器端進入SYN_RCVD狀态。
- 第三次握手:用戶端收到确認後,檢查ack是否為J+1,ACK是否為1,如果正确則将标志位ACK置為1,ack=K+1,并将該資料包發送給伺服器端,伺服器端檢查ack是否為K+1,ACK是否為1,如果正确則連接配接建立成功,用戶端和伺服器端進入ESTABLISHED狀态,完成三次握手,随後用戶端與伺服器端之間可以開始傳輸資料了。
3.2 四次揮手(重點)
- 四次揮手即終止TCP連接配接,就是指斷開一個TCP連接配接時,需要用戶端和服務端總共發送4個包以确認連接配接的斷開。在socket程式設計中,這一過程由用戶端或服務端任一方執行close來觸發。
- 由于TCP連接配接是全雙工的,是以,每個方向都必須要單獨進行關閉,這一原則是當一方完成資料發送任務後,發送一個FIN來終止這一方向的連接配接,收到一個FIN隻是意味着這一方向上沒有資料流動了,即不會再收到資料了,但是在這個TCP連接配接上仍然能夠發送資料,直到這一方向也發送了FIN。首先進行關閉的一方将執行主動關閉,而另一方則執行被動關閉。
下面來看看四次揮手的流程圖:
四次揮手
- 中斷連接配接端可以是用戶端,也可以是伺服器端。
- 第一次揮手:用戶端發送一個FIN=M,用來關閉用戶端到伺服器端的資料傳送,用戶端進入FIN_WAIT_1狀态。意思是說"我用戶端沒有資料要發給你了",但是如果你伺服器端還有資料沒有發送完成,則不必急着關閉連接配接,可以繼續發送資料。
- 第二次揮手:伺服器端收到FIN後,先發送ack=M+1,告訴用戶端,你的請求我收到了,但是我還沒準備好,請繼續你等我的消息。這個時候用戶端就進入FIN_WAIT_2 狀态,繼續等待伺服器端的FIN封包。
- 第三次揮手:當伺服器端确定資料已發送完成,則向用戶端發送FIN=N封包,告訴用戶端,好了,我這邊資料發完了,準備好關閉連接配接了。伺服器端進入LAST_ACK狀态。
- 第四次揮手:用戶端收到FIN=N封包後,就知道可以關閉連接配接了,但是他還是不相信網絡,怕伺服器端不知道要關閉,是以發送ack=N+1後進入TIME_WAIT狀态,如果Server端沒有收到ACK則可以重傳。伺服器端收到ACK後,就知道可以斷開連接配接了。用戶端等待了2MSL後依然沒有收到回複,則證明伺服器端已正常關閉,那好,我用戶端也可以關閉連接配接了。最終完成了四次握手。
上面是一方主動關閉,另一方被動關閉的情況,實際中還會出現同時發起主動關閉的情況,
具體流程如下圖:
同時揮手
3.3 通過序列号與确認應答提高可靠性
- 在 TCP 中,當發送端的資料到達接收主機時,接收端主機會傳回一個已收到消息的通知。這個消息叫做确認應答(ACK)。當發送端将資料發出之後會等待對端的确認應答。如果有确認應答,說明資料已經成功到達對端。反之,則資料丢失的可能性很大。
- 在一定時間内沒有等待到确認應答,發送端就可以認為資料已經丢失,并進行重發。由此,即使産生了丢包,仍然能夠保證資料能夠到達對端,實作可靠傳輸。
- 未收到确認應答并不意味着資料一定丢失。也有可能是資料對方已經收到,隻是傳回的确認應答在途中丢失。這種情況也會導緻發送端誤以為資料沒有到達目的地而重發資料。
- 此外,也有可能因為一些其他原因導緻确認應答延遲到達,在源主機重發資料以後才到達的情況也屢見不鮮。此時,源主機隻要按照機制重發資料即可。
- 對于目标主機來說,反複收到相同的資料是不可取的。為了對上層應用提供可靠的傳輸,目标主機必須放棄重複的資料包。為此我們引入了序列号。
- 序列号是按照順序給發送資料的每一個位元組(8位位元組)都标上号碼的編号。接收端查詢接收資料 TCP 首部中的序列号和資料的長度,将自己下一步應該接收的序列号作為确認應答返送回去。通過序列号和确認應答号,TCP 能夠識别是否已經接收資料,又能夠判斷是否需要接收,進而實作可靠傳輸。
序列号和确認應答
3.4 重發逾時的确定
- 重發逾時是指在重發資料之前,等待确認應答到來的那個特定時間間隔。如果超過這個時間仍未收到确認應答,發送端将進行資料重發。最理想的是,找到一個最小時間,它能保證“确認應答一定能在這個時間内傳回”。
- TCP 要求不論處在何種網絡環境下都要提供高性能通信,并且無論網絡擁堵情況發生何種變化,都必須保持這一特性。為此,它在每次發包時都會計算往返時間及其偏差。将這個往返時間和偏差時間相加,重發逾時的時間就是比這個總和要稍大一點的值。
- 在 BSD 的 Unix 以及 Windows 系統中,逾時都以0.5秒為機關進行控制,是以重發逾時都是0.5秒的整數倍。不過,最初其重發逾時的預設值一般設定為6秒左右。
- 資料被重發之後若還是收不到确認應答,則進行再次發送。此時,等待确認應答的時間将會以2倍、4倍的指數函數延長。
- 此外,資料也不會被無限、反複地重發。達到一定重發次數之後,如果仍沒有任何确認應答傳回,就會判斷為網絡或對端主機發生了異常,強制關閉連接配接。并且通知應用通信異常強行終止。
3.5 以段為機關發送資料
- 在建立 TCP 連接配接的同時,也可以确定發送資料包的機關,我們也可以稱其為“最大消息長度”(MSS)。最理想的情況是,最大消息長度正好是 IP 中不會被分片處理的最大資料長度。
- TCP 在傳送大量資料時,是以 MSS 的大小将資料進行分割發送。進行重發時也是以 MSS 為機關。
- MSS 在三次握手的時候,在兩端主機之間被計算得出。兩端的主機在發出建立連接配接的請求時,會在 TCP 首部中寫入 MSS 選項,告訴對方自己的接口能夠适應的 MSS 的大小。然後會在兩者之間選擇一個較小的值投入使用。
3.6 利用視窗控制提高速度
- TCP 以1個段為機關,每發送一個段進行一次确認應答的處理。這樣的傳輸方式有一個缺點,就是包的往返時間越長通信性能就越低。
- 為解決這個問題,TCP 引入了視窗這個概念。确認應答不再是以每個分段,而是以更大的機關進行确認,轉發時間将會被大幅地縮短。也就是說,發送端主機,在發送了一個段以後不必要一直等待确認應答,而是繼續發送。如下圖所示:
- 視窗控制
- 視窗大小就是指無需等待确認應答而可以繼續發送資料的最大值。上圖中視窗大小為4個段。這個機制實作了使用大量的緩沖區,通過對多個段同時進行确認應答的功能。
3.7 滑動視窗控制
滑動視窗
- 上圖中的視窗内的資料即便沒有收到确認應答也可以被發送出去。不過,在整個視窗的确認應答沒有到達之前,如果其中部分資料出現丢包,那麼發送端仍然要負責重傳。為此,發送端主機需要設定緩存保留這些待被重傳的資料,直到收到他們的确認應答。
- 在滑動視窗以外的部分包括未發送的資料以及已經确認對端已收到的資料。當資料發出後若如期收到确認應答就可以不用再進行重發,此時資料就可以從緩存區清除。
- 收到确認應答的情況下,将視窗滑動到确認應答中的序列号的位置。這樣可以順序地将多個段同時發送提高通信性能。這種機制也别稱為滑動視窗控制。
3.8 視窗控制中的重複控制
在使用視窗控制中, 出現丢包一般分為兩種情況:
- ① 确認應答未能傳回的情況。在這種情況下,資料已經到達對端,是不需要再進行重發的,如下圖:
部分确認應答丢失
- ② 某個封包段丢失的情況。接收主機如果收到一個自己應該接收的序列号以外的資料時,會針對目前為止收到資料傳回确認應答。如下圖所示,當某一封包段丢失後,發送端會一直收到序号為1001的确認應答,是以,在視窗比較大,又出現封包段丢失的情況下,同一個序列号的确認應答将會被重複不斷地傳回。而發送端主機如果連續3次收到同一個确認應答,就會将其對應的資料進行重發。這種機制比之前提到的逾時管理更加高效,是以也被稱為高速重發控制。
高速重發控制
四、網絡層中的 IP 協定
- IP(IPv4、IPv6)相當于 OSI 參考模型中的第3層——網絡層。網絡層的主要作用是“實作終端節點之間的通信”。這種終端節點之間的通信也叫“點對點通信”。
- 網絡的下一層——資料鍊路層的主要作用是在互連同一種資料鍊路的節點之間進行包傳遞。而一旦跨越多種資料鍊路,就需要借助網絡層。網絡層可以跨越不同的資料鍊路,即使是在不同的資料鍊路上也能實作兩端節點之間的資料包傳輸。
- IP 大緻分為三大作用子產品,它們是 IP 尋址、路由(最終節點為止的轉發)以及 IP 分包與組包。
1. IP 位址
1.1 IP 位址概述
- 在計算機通信中,為了識别通信對端,必須要有一個類似于位址的識别碼進行辨別。在資料鍊路中的 MAC 位址正是用來辨別同一個鍊路中不同計算機的一種識别碼。
- 作為網絡層的 IP ,也有這種位址資訊,一般叫做 IP 位址。IP 位址用于在“連接配接到網絡中的所有主機中識别出進行通信的目标位址”。是以,在 TCP/IP 通信中所有主機或路由器必須設定自己的 IP 位址。
- 不論一台主機與哪種資料鍊路連接配接,其 IP 位址的形式都保持不變。
- IP 位址(IPv4 位址)由32位正整數來表示。IP 位址在計算機内部以二進制方式被處理。然而,由于我們并不習慣于采用二進制方式,我們将32位的 IP 位址以每8位為一組,分成4組,每組以 “.” 隔開,再将每組數轉換成十進制數。如下:
1.2 IP 位址由網絡和主機兩部分辨別組成
- 如下圖,網絡辨別在資料鍊路的每個段配置不同的值。網絡辨別必須保證互相連接配接的每個段的位址不相重複。而相同段内相連的主機必須有相同的網絡位址。IP 位址的“主機辨別”則不允許在同一個網段内重複出現。由此,可以通過設定網絡位址和主機位址,在互相連接配接的整個網絡中保證每台主機的 IP 位址都不會互相重疊。即 IP 位址具有了唯一性。
IP位址的主機辨別
- 如下圖,IP 包被轉發到途中某個路由器時,正是利用目标 IP 位址的網絡辨別進行路由。因為即使不看主機辨別,隻要一見到網絡辨別就能判斷出是否為該網段内的主機。
IP位址的網絡辨別
1.3 IP 位址的分類
- IP 位址分為四個級别,分别為A類、B類、C類、D類。它根據 IP 位址中從第 1 位到第 4 位的比特列對其網絡辨別和主機辨別進行區分。
- A 類 IP 位址是首位以 “0” 開頭的位址。從第 1 位到第 8 位是它的網絡辨別。用十進制表示的話,0.0.0.0~127.0.0.0 是 A 類的網絡位址。A 類位址的後 24 位相當于主機辨別。是以,一個網段内可容納的主機位址上限為16,777,214個。
- B 類 IP 位址是前兩位 “10” 的位址。從第 1 位到第 16 位是它的網絡辨別。用十進制表示的話,128.0.0.0~191.255.0.0 是 B 類的網絡位址。B 類位址的後 16 位相當于主機辨別。是以,一個網段内可容納的主機位址上限為65,534個。
- C 類 IP 位址是前三位為 “110” 的位址。從第 1 位到第 24 位是它的網絡辨別。用十進制表示的話,192.0.0.0~223.255.255.0 是 C 類的網絡位址。C 類位址的後 8 位相當于主機辨別。是以,一個網段内可容納的主機位址上限為254個。
- D 類 IP 位址是前四位為 “1110” 的位址。從第 1 位到第 32 位是它的網絡辨別。用十進制表示的話,224.0.0.0~239.255.255.255 是 D 類的網絡位址。D 類位址沒有主機辨別,常用于多點傳播。
- 在配置設定 IP 位址時關于主機辨別有一點需要注意。即要用比特位表示主機位址時,不可以全部為 0 或全部為 1。因為全部為 0 隻有在表示對應的網絡位址或 IP 位址不可以獲知的情況下才使用。而全部為 1 的主機通常作為廣播位址。是以,在配置設定過程中,應該去掉這兩種情況。這也是為什麼 C 類位址每個網段最多隻能有 254( 28 - 2 = 254)個主機位址的原因。
1.4 廣播位址
- 廣播位址用于在同一個鍊路中互相連接配接的主機之間發送資料包。将 IP 位址中的主機位址部分全部設定為 1,就成了廣播位址。
- 廣播分為本地廣播和直接廣播兩種。在本網絡内的廣播叫做本地廣播;在不同網絡之間的廣播叫做直接廣播。
1.5 IP 多點傳播
- 多點傳播用于将包發送給特定組内的所有主機。由于其直接使用 IP 位址,是以也不存在可靠傳輸。
- 相比于廣播,多點傳播既可以穿透路由器,又可以實作隻給那些必要的組發送資料包。請看下圖:
- IP 多點傳播
- 多點傳播使用 D 類位址。是以,如果從首位開始到第 4 位是 “1110”,就可以認為是多點傳播位址。而剩下的 28 位可以成為多點傳播的組編号。
- 此外, 對于多點傳播,所有的主機(路由器以外的主機和終端主機)必須屬于 224.0.0.1 的組,所有的路由器必須屬于 224.0.0.2 的組。
1.6 子網路遮罩
- 現在一個 IP 位址的網絡辨別和主機辨別已不再受限于該位址的類别,而是由一個叫做“子網路遮罩”的識别碼通過子網網絡位址細分出比 A 類、B 類、C 類更小粒度的網絡。這種方式實際上就是将原來 A 類、B 類、C 類等分類中的主機位址部分用作子網位址,可以将原網絡分為多個實體網絡的一種機制。
- 子網路遮罩用二進制方式表示的話,也是一個 32 位的數字。它對應 IP 位址網絡辨別部分的位全部為 “1”,對應 IP 位址主機辨別的部分則全部為 “0”。由此,一個 IP 位址可以不再受限于自己的類别,而是可以用這樣的子網路遮罩自由地定位自己的網絡辨別長度。當然,子網路遮罩必須是 IP 位址的首位開始連續的 “1”。
- 對于子網路遮罩,目前有兩種表示方式。第一種是,将 IP 位址與子網路遮罩的位址分别用兩行來表示。以 172.20.100.52 的前 26 位是網絡位址的情況為例,如下:
- 第二種表示方式是,在每個 IP 位址後面追加網絡位址的位數用 “/ ” 隔開,如下:
2. 路由
- 發送資料包時所使用的位址是網絡層的位址,即 IP 位址。然而僅僅有 IP 位址還不足以實作将資料包發送到對端目标位址,在資料發送過程中還需要類似于“指明路由器或主機”的資訊,以便真正發往目标位址。儲存這種資訊的就是路由控制表。
- 該路由控制表的形成方式有兩種:一種是管理者手動設定,另一種是路由器與其他路由器互相交換資訊時自動重新整理。前者也叫做靜态路由控制,而後者叫做動态路由控制。
- IP 協定始終認為路由表是正确的。然後,IP 本身并沒有定義制作路由控制表的協定。即 IP 沒有制作路由控制表的機制。該表示由一個叫做“路由協定”的協定制作而成。
2.1 IP 位址與路由控制
- IP 位址的網絡位址部分用于進行路由控制。
- 路由控制表中記錄着網絡位址與下一步應該發送至路由器的位址。
- 在發送 IP 包時,首先要确定 IP 包首部中的目标位址,再從路由控制表中找到與該位址具有相同網絡位址的記錄,根據該記錄将 IP 包轉發給相應的下一個路由器。如果路由控制表中存在多條相同網絡位址的記錄,就選擇一個最為吻合的網絡位址。
路由控制表與 IP 包發送
3. IP 分包與組包
- 每種資料鍊路的最大傳輸單元(MTU)都不盡相同,因為每個不同類型的資料鍊路的使用目的不同。使用目的不同,可承載的 MTU 也就不同。
- 任何一台主機都有必要對 IP 分片進行相應的處理。分片往往在網絡上遇到比較大的封包無法一下子發送出去時才會進行處理。
- 經過分片之後的 IP 資料報在被重組的時候,隻能由目标主機進行。路由器雖然做分片但不會進行重組。
3.1 路徑 MTU 發現
- 分片機制也有它的不足。如路由器的處理負荷加重之類。是以,隻要允許,是不希望由路由器進行 IP 資料包的分片處理的。
- 為了應對分片機制的不足,“路徑 MTU 發現” 技術應運而生。路徑 MTU 指的是,從發送端主機到接收端主機之間不需要分片是最大 MTU 的大小。即路徑中存在的所有資料鍊路中最小的 MTU 。
- 進行路徑 MTU 發現,就可以避免在中途的路由器上進行分片處理,也可以在 TCP 中發送更大的包。
4. IPv6
- IPv6(IP version 6)是為了根本解決 IPv4 位址耗盡的問題而被标準化的網際協定。IPv4 的位址長度為 4 個 8 位位元組,即 32 比特。而 IPv6 的位址長度則是原來的 4 倍,即 128 比特,一般寫成 8 個 16 位位元組。
4.1 IPv6 的特點
- IP 得知的擴大與路由控制表的聚合。
- 性能提升。包首部長度采用固定的值(40位元組),不再采用首部檢驗碼。簡化首部結構,減輕路由器負擔。路由器不再做分片處理。
- 支援即插即用功能。即使沒有DHCP伺服器也可以實作自動配置設定 IP 位址。
- 采用認證與加密功能。應對僞造 IP 位址的網絡安全功能以及防止線路竊聽的功能。
- 多點傳播、Mobile IP 成為擴充功能。
4.2 IPv6 中 IP 位址的标記方法
- 一般人們将 128 比特 IP 位址以每 16 比特為一組,每組用冒号(“:”)隔開進行标記。
- 而且如果出現連續的 0 時還可以将這些 0 省略,并用兩個冒号(“::”)隔開。但是,一個 IP 位址中隻允許出現一次兩個連續的冒号。
4.3 IPv6 位址的結構
- IPv6 類似 IPv4,也是通過 IP 位址的前幾位辨別 IP 位址的種類。
- 在網際網路通信中,使用一種全局的單點傳播位址。它是網際網路中唯一的一個位址,不需要正式配置設定 IP 位址。
4.4 全局單點傳播位址
- 全局單點傳播位址是指世界上唯一的一個位址。它是網際網路通信以及各個域内部通信中最為常用的一個 IPv6 位址。
- 格式如下圖所示,現在 IPv6 的網絡中所使用的格式為,n = 48,m = 16 以及 128 - n - m = 64。即前 64 比特為網絡辨別,後 64 比特為主機辨別。
全局單點傳播位址
4.5 鍊路本地單點傳播位址
- 鍊路本地單點傳播位址是指在同一個資料鍊路内唯一的位址。它用于不經過路由器,在同一個鍊路中的通信。通常接口 ID 儲存 64 比特版的 MAC 位址。
鍊路本地單點傳播位址
4.6 唯一本地位址
- 唯一本地位址是不進行網際網路通信時所用的位址。
- 唯一本地位址雖然不會與網際網路連接配接,但是也會盡可能地随機生成一個唯一的全局 ID。
- L 通常被指為 1
- 全局 ID 的值随機決定
- 子網 ID 是指該域子網位址
- 接口 ID 即為接口的 ID
唯一本地位址
4.7 IPv6 分段處理
- IPv6 的分片處理隻在作為起點的發送端主機上進行,路由器不參與分片。
- IPv6 中最小 MTU 為 1280 位元組,是以,在嵌入式系統中對于那些有一定系統資源限制的裝置來說,不需要進行“路徑 MTU 發現”,而是在發送 IP 包時直接以 1280 位元組為機關分片送出。
4.8 IP 首部(暫略)
5. IP 協定相關技術
- IP 旨在讓最終目标主機收到資料包,但是在這一過程中僅僅有 IP 是無法實作通信的。必須還有能夠解析主機名稱和 MAC 位址的功能,以及資料包在發送過程中異常情況處理的功能。
5.1 DNS
- 我們平常在通路某個網站時不适用 IP 位址,而是用一串由羅馬字和點号組成的字元串。而一般使用者在使用 TCP/IP 進行通信時也不使用 IP 位址。能夠這樣做是因為有了 DNS (Domain Name System)功能的支援。DNS 可以将那串字元串自動轉換為具體的 IP 位址。
- 這種 DNS 不僅适用于 IPv4,還适用于 IPv6。
5.2 ARP
- 隻要确定了 IP 位址,就可以向這個目标位址發送 IP 資料報。然而,在底層資料鍊路層,進行實際通信時卻有必要了解每個 IP 位址所對應的 MAC 位址。
- ARP 是一種解決位址問題的協定。以目标 IP 位址為線索,用來定位下一個應該接收資料分包的網絡裝置對應的 MAC 位址。不過 ARP 隻适用于 IPv4,不能用于 IPv6。IPv6 中可以用 ICMPv6 替代 ARP 發送鄰居探索消息。
- RARP 是将 ARP 反過來,從 MAC 位址定位 IP 位址的一種協定。
5.3 ICMP
- ICMP 的主要功能包括,确認 IP 包是否成功送達目标位址,通知在發送過程當中 IP 包被廢棄的具體原因,改善網絡設定等。
- IPv4 中 ICMP 僅作為一個輔助作用支援 IPv4。也就是說,在 IPv4 時期,即使沒有 ICMP,仍然可以實作 IP 通信。然而,在 IPv6 中,ICMP 的作用被擴大,如果沒有 ICMPv6,IPv6 就無法進行正常通信。
5.4 DHCP
- 如果逐一為每一台主機設定 IP 位址會是非常繁瑣的事情。特别是在移動使用筆記本電腦、隻能終端以及平闆電腦等裝置時,每移動到一個新的地方,都要重新設定 IP 位址。
- 于是,為了實作自動設定 IP 位址、統一管理 IP 位址配置設定,就産生了 DHCP(Dynamic Host Configuration Protocol)協定。有了 DHCP,計算機隻要連接配接到網絡,就可以進行 TCP/IP 通信。也就是說,DHCP 讓即插即用變得可能。
- DHCP 不僅在 IPv4 中,在 IPv6 中也可以使用。
5.5 NAT
- NAT(Network Address Translator)是用于在本地網絡中使用私有位址,在連接配接網際網路時轉而使用全局 IP 位址的技術。
- 除轉換 IP 位址外,還出現了可以轉換 TCP、UDP 端口号的 NAPT(Network Address Ports Translator)技術,由此可以實作用一個全局 IP 位址與多個主機的通信。
- NAT(NAPT)實際上是為正在面臨位址枯竭的 IPv4 而開發的技術。不過,在 IPv6 中為了提高網絡安全也在使用 NAT,在 IPv4 和 IPv6 之間的互相通信當中常常使用 NAT-PT。
5.6 IP 隧道
夾着 IPv4 網絡的兩個 IPv6 網絡
- 如上圖的網絡環境中,網絡 A 與網絡 B 之間無法直接進行通信,為了讓它們之間正常通信,這時必須得采用 IP 隧道的功能。
- IP 隧道可以将那些從網絡 A 發過來的 IPv6 的包統合為一個資料,再為之追加一個 IPv4 的首部以後轉發給網絡 C。
- 一般情況下,緊接着 IP 首要的是 TCP 或 UDP 的首部。然而,現在的應用當中“ IP 首部的後面還是 IP 首部”或者“ IP 首部的後面是 IPv6 的首部”等情況與日俱增。這種在網絡層的首部後面追加網絡層首部的通信方法就叫做“ IP 隧道”。
彩蛋《世界著名計算機精選PDF,TCP/IP協定族終于更新了(第4版)》
《世界著名計算機教材精選·TCP/IP協定組(第4版)》最新版進行了擴充,以展現計算機網絡技術的最新發展,全書含有七大部分共30章和7個附錄:第一部分介紹一些基本概念和基礎底層技術;第二部分介紹網絡層協定;第三部分介紹運輸層協定;第四部分介紹應用層協定;第五部分介紹下一代協定,即IPv6協定;第六部分介紹網絡安全問題;第七部分給出了7個附錄。每章的最後都有實踐安排,其中的第一部分是習題,第二部分是研究活動,要求學生或讀者再查找以下課外的閱讀資料。
這這本書已經給大家準備好了,是免費的分享給大家的,由于文章篇幅限制,在這裡隻能給大家展示一小部分的内容了