TCP IP原理淺析

zhf_Zachariah發表於2017-12-13

###TCP/IP概述

  • TCP/IP起源於1969年美國國防部(DOD:The United States Department Of Defense)高階研究專案管理局(APRA:AdvancedResearch Projects Agency)對有關分組交換的廣域網(Packet-Switched wide-area network)科研專案,因此起初的網路稱為ARPANET。 1973年TCP(傳輸控制協議)正式投入使用,1981年IP(網際協議)協議投入使用,1983年TCP/IP協議正式被整合到美國加州大學伯克利分校的UNIX版本中,該“網路版”作業系統適應了當時各大學、機關、企業旺盛的連網需求,因而隨著該免費分發的作業系統的廣泛使用,TCP/IP協議得到了流傳。 TCP/IP技術得到了眾多廠商的支援,不久就有了很多分散的網路。所有這些單個的TCP/IP網路都互聯起來稱為INTERNET。基於TCP/IP協議的Internet已逐步發展成為當今世界上規模最大、擁有使用者和資源最多的一個超大型計算機網路,TCP/IP協議也因此成為事實上的工業標準。IP網路正逐步成為當代乃至未來計算機網路的主流。

    TCP/IP概述.png

  • 早在TCP/IP協議出現之前,國際標準化組織(ISO)就提出了開放系統互連(OSI)網路模型,為網路的設計、開發、程式設計、維護提供了便利的分而治之的思想,其先進性、科學性、實用性是不言而喻的。 TCP/IP協議不是單純的兩個協議,是一組不同層次上的多個協議的組合,常稱為TCP/IP協議簇或者網際網路協議簇。TCP/IP也是網際網路的事實上的標準,為實現整個網路的互聯提供指導。TCP/IP層次組合很難用OSI的七層模型來套用,它是OSI模型的濃縮,將原來的七層模型合併為四層協議的體系結構,自頂向下分別是應用層、傳輸層、網路層和網路介面層,沒有OSI參考模型的會話層和表示層,一般認為TCP/IP的會話和表示功能是在傳輸層或應用層上完成的。

    TCP/IP與OSI模型比較.png

  • TCP/IP不是一個單獨的協議,而是一個協議簇,是一組不同層次上的多個協議的組合。上面給出了OSI與TCP/IP模型對比、TCP/IP不同層次的協議。 網路介面層:有時也稱作資料鏈路層或鏈路層,通常包括作業系統中的裝置驅動程式和計算機中對應的網路介面卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理介面細節。在TCP/IP協議簇中,鏈路層的協議比較多,它決定了網路形態,但很多都不是專門為TCP/IP設計的。常用的鏈路層協議包括:乙太網協議、PPP協議、幀中繼協議、ATM等網路層:IP層有時也稱作互連網層,處理分組在網路中的活動,在底層通訊網路的基礎上,完成路由、尋徑功能,提供主機到主機的連線。IP是盡力傳送的、不可靠的協議。在TCP/IP協議簇中,網路層協議包括IP協議(網際協議),ICMP協議(Internet互連網控制報文協議),ARP/RARP(地址解析/反向地址解析協議),以及IGMP協議(Internet組管理協議)傳輸層:主要為兩臺主機上的應用程式提供端到端的通訊。在TCP/IP協議簇中,有兩個不同的傳輸協議:TCP(傳輸控制協議)和UDP(使用者資料包協議),它們分別承載不同的應用。TCP協議提供可靠的服務,UDP協議提供不可靠但是高效的服務應用層:這一層負責具體的應用,比如HTTP訪問、FTP檔案傳輸、SMTP/POP3郵件處理等等。幾乎各種不同的TCP/IP實現都會提供下面這些通用的應用程式:遠端登入(Telnet)檔案傳輸協議(FTP)簡單郵件傳輸協議(SMTP)簡單網路管理協議(SNMP)。 嚴格來講,分層模型的動機就是將各層的功能儘量獨立,每層的功能對另一層來說是透明的,只對通訊的另一端負責,為程式設計和診斷提供良好的層次隔離,然而實際情況並非如此,首先軟體程式設計上完全按照分層模型來做程式設計效率會降低,與其分層,不如按功能實現來模組化。其次,對於許多功能實現來說,必須實現兩層子間的互動,這又違背了當初的出發點,比如鏈路層在成幀時需要接收端的實體地址,該地址必須由網路層處理ARP地址解析才行,簡單地將ARP放在那一層都有些牽強。所以說,分層模型對於理解網路的抽象性是有益處的,它有助於指導網路入門,但並不是網路的精髓,只有結合具體的系統分析才有實際意義。

    TCP/IP協議棧.png

  • 在傳送端,資料由應用產生,它被封裝在傳輸層的段中,該段再封裝到網路層報文包中,網路層報文包再封裝到資料鏈路幀,以便在所選的介質上傳送。當接收端系統接收到資料時,是解封裝過程。當資料沿著協議棧向上傳遞時,首先檢查幀的格式,決定網路型別,去掉幀的格式,檢查內含的報文包,決定傳輸協議。資料由某個傳輸層處理,最後資料遞交給正確的應用程式。

    資料封裝和解封裝過程.png
    ###應用層

  • 在應用層包含了不同型別的應用程式,如:telnet遠端登入、FTP檔案傳輸等。

    應用層.png
    ###傳輸層

  • 傳輸層主要為兩臺主機上的應用程式提供端到端的通訊服務。在TCP/IP協議族中,有兩個不同的傳輸協議:TCP(傳輸控制協議)和UDP(使用者資料包協議)。 TCP為兩臺主機提供高可靠性的資料通訊。它所做的工作包括把應用程式交給它的資料分成合適的小資料塊(資料段)交給下面的網路層,確認接收到的分組,設定傳送最後確認分組的超時時間等。由於傳輸層提供了高可靠性的端到端的通訊服務,因此應用層可以忽略掉所有這些細節。 而另一方面,UDP則為應用層提供一種非常簡單的服務。它只是把稱作資料包的分組從一臺主機傳送到另一臺主機,但並不保證該資料包能到達另一端。任何必需的可靠性必須由應用層來提供。 這兩種傳輸層協議分別在不同的網路環境與應用場合中有不同的用途。

    傳輸層的功能.png

  • TCP和UDP採用16 bit的埠號來識別不同的應用程式。 網路服務一般都是通過知名埠號來識別的。例如,對於每個TCP/IP實現來說,FTP服務的TCP埠號都是21,每個Telnet服務的TCP埠號都是23,每個TFTP(簡單檔案傳送協議)服務的UDP埠號都是69。任何TCP/IP實現所提供的服務都使用知名的1~1023之間的埠號。這些知名埠號由Internet號碼分配機構(Internet Assigned Numbers Authority, IANA)來管理。現在IANA管理1~1023之間所有的埠號。 大多數TCP/IP實現給臨時埠分配1024~5000之間的埠號。大於5000的埠號是為其他服務(Internet上並不常用的服務)預留的。 如果仔細檢查這些標準的簡單服務以及其他標準的TCP/IP服務(如Telnet、FTP、SMTP等)的埠號時,我們發現它們都是奇數。這是因為這些埠號都是從NCP埠號派生出來的(NCP,即網路控制協議,是ARPANET的傳輸層協議,是TCP的前身)。NCP是單工的,不是全雙工的,因此每個應用程式需要兩個連線,需預留一對奇數和偶數埠號。當TCP和UDP成為標準的傳輸層協議時,每個應用程式只需要一個埠號,因此就使用了NCP中的奇數。

    埠號.png

  • TCP首部的資料格式,如果不計任選欄位,它通常是20個位元組。 每個TCP段都包含源端和目的端的埠號,用於尋找發端和收端應用程式。這兩個值加上IP首部中的源端IP地址和目的端IP地址唯一確定一個TCP連線。 序號用來標識從TCP發端向TCP收端傳送的資料位元組流,它表示在這個報文段中的的第一個資料位元組。如果將位元組流看作在兩個應用程式間的單向流動,則TCP用序號對每個位元組進行計數。序號是32 bit的無符號數。 當建立一個新的連線時,SYN標誌變1。序號欄位包含由這個主機選擇的該連線的初始序號ISN(Initial Sequence Number)。因為SYN標誌消耗了一個序號,該主機要傳送資料的第一個位元組序號為這個ISN加1。 確認序號包含傳送確認的一端所期望收到的下一個序號。確認序號應當是上次已成功收到資料位元組序號加1。只有ACK標誌為1時確認序號欄位才有效。 傳送ACK無需任何額外代價,因為32 bit的確認序號欄位和ACK標誌一樣,總是TCP首部的一部分。因此,我們看到一旦一個連線建立起來,這個欄位總是被設定,ACK標誌也總是被設定為1。 TCP為應用層提供全雙工服務。這意味資料能在兩個方向上獨立地進行傳輸。因此,連線的每一端必須保持每個方向上的傳輸資料序號。 在TCP首部中有6個code bits 中的多個可同時被設定為1。含義如下:

ACK確認序號有效。
PSH接收方應該儘快將這個報文段交給應用層。
RST重建連線。
SYN同步序號用來發起一個連線。
FIN發端完成傳送任務。```
TCP的流量控制由連線的每一端通過宣告的視窗大小來提供。視窗大小為位元組數,視窗大小是一個16 bit欄位,因而視窗大小最大為65535位元組。
檢驗和覆蓋了整個的TCP報文段:包括了TCP首部和TCP資料。這是一個強制性的欄位,一定是由發端計算和儲存,並由收端進行驗證。
只有當URG標誌置1時緊急指標才有效。緊急指標是一個正的偏移量,和序號欄位中的值相加表示緊急資料最後一個位元組的序號。TCP的緊急方式是傳送端向另一端傳送緊急資料的一種方式。
最常見的可選欄位是最長報文大小,又稱為MSS (Maximum Segment Size)。每個連線方通常都在通訊的第一個報文段(為建立連線而設定SYN標誌的那個段)中指明這個選項。它指明本端所能接收的最大長度的報文段。
TCP報文段中的資料部分是可選的。在一個連線建立和一個連線終止時,雙方交換的報文段僅有TCP首部。如果一方沒有資料要傳送,也使用沒有任何資料的首部來確認收到的資料。在處理超時的許多情況中,也會傳送不帶任何資料的報文段。
![TCP傳輸控制協議.png](http://upload-images.jianshu.io/upload_images/1398091-8d40117dc3ac2143.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![TCP埠號.png](http://upload-images.jianshu.io/upload_images/1398091-95e5da0a2af2989e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- HOSTA對HOSTZ進行TELNET遠端連線,其中目的埠號為知名埠號23,源埠號為1028。源埠號沒有特別的要求,只需保證該埠號在本機上是唯一的就可以了。一般從1023以上找出空閒埠號進行分配。源端埠號又稱作臨時埠號,這是因為源埠號存在時間很短暫。
![多個連線時埠號的使用.png](http://upload-images.jianshu.io/upload_images/1398091-f9663fd434f005d4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 這是同一主機上多個應用程式同時訪問一個服務的示例。HOST A上具有兩個連線同時訪問HOST Z的TELNET服務,HOST A使用不同的源埠號來區分本機上的不同的應用程式程式。
IP地址和埠號用來唯一地確定資料通訊的連線。
- 序列號的作用:一方面用於標識資料順序,以便接收者在將其遞交給應用程式前按正確的順序進行裝配;另一方面是消除網路中的重複報文包,這種現象在網路擁塞時會出現。
確認號的作用:接收者告訴傳送者哪個資料段已經成功接收,並告訴傳送者接收者希望接收的下一個位元組。
![TCP 序號和確認號綜述.png](http://upload-images.jianshu.io/upload_images/1398091-94cefefd03643f0d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
####TCP三次握手/建立連線
- TCP是面向連線的傳輸層協議,所謂面向連線就是在真正的資料傳輸開始前要完成連線建立的過程,否則不會進入真正的資料傳輸階段。
TCP的連線建立過程通常被稱為三次握手(three-way handshake),過程如下:```請求端(通常稱為客戶)傳送一個SYN段指明客戶打算連線的伺服器的埠,以及初始序號(ISN)。這個SYN段為報文段1。
伺服器發回包含伺服器的初始序號的SYN報文段(報文段2)作為應答。同時,將確認序號設定為客戶的ISN加1以對客戶的SYN報文段進行確認。一個SYN將佔用一個序號。
客戶必須將確認序號設定為伺服器的ISN加1以對伺服器的SYN報文段進行確認(報文段3)。
這三個報文段完成連線的建立。```
傳送第一個SYN的一端將執行主動開啟(active open)。接收這個SYN併發回下一個SYN的另一端執行被動開啟(passive open)
當一端為建立連線而傳送它的SYN時,它為連線選擇一個初始序號。ISN隨時間而變化,因此每個連線都將具有不同的ISN。RFC 793 [Postel1981c]指出ISN可看作是一個32位元的計數器,每4 ms加1。這樣選擇序號的目的在於防止在網路中被延遲的分組在以後又被傳送,而導致某個連線的一方對它作錯誤的解釋。
如何進行序號選擇? 在4.4 BSD(和多數的伯克利的實現版)中,系統初始化時初始的傳送序號被初始化為1。這個變數每0.5秒增加64000,並每隔9.5小時又回到0。另外,每次建立一個連線後,這個變數將增加64000。
![TCP三次握手.png](http://upload-images.jianshu.io/upload_images/1398091-1b318a7d33bee73e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

####TCP四次握手/終止連線
- ```一個TCP連線是全雙工(即資料在兩個方向上能同時傳遞),因此每個方向必須單獨進行關閉。當一方完成它的資料傳送任務後就傳送一個FIN來終止這個方向連線。當一端收到一個FIN,它必須通知應用層另一端已經終止了那個方向的資料傳送。所以TCP終止連線的過程需要四個過程,稱之為四次握手過程。```
![TCP四次握手.png](http://upload-images.jianshu.io/upload_images/1398091-2330ab7d7c3a3f8f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 視窗實際上是一種流量控制的機制。
![視窗控制.png](http://upload-images.jianshu.io/upload_images/1398091-4f9e87a00bd3dc4d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)當視窗尺寸是1時,傳送一個資料段後必須等待確認才可以傳送下一個資料段,好處是在接收端接收的資料段順序不會出錯,缺點是傳輸速度慢,效率低。
利用大於1的視窗,可以同時傳送幾個資料包。當確認返回時,則傳送新資料段。在這種方式下,可以提高傳輸效率。一個經過仔細調整的滑動視窗協議可以保持網路始終充滿資料包,並且可以得到較高的吞吐量。
其優點是傳輸速度快,效率高;缺點是由於TCP靠IP傳輸資料,而IP在傳輸過程中可能會選擇不同的路徑而導致在接收端接收的資料段順序混亂。
####UDP使用者報文協議
- ```UDP是一個簡單的面向資料包的傳輸層協議,UDP不提供可靠性,它把應用程式傳給IP層的資料傳送出去,但是並不保證它們能到達目的地。UDP和TCP在首部中都有覆蓋它們首部和資料的檢驗和。UDP的檢驗和是可選的,而TCP的檢驗和是必需的。```
![UDP使用者報文協議.png](http://upload-images.jianshu.io/upload_images/1398091-af2f8e509372d973.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 兩個傳輸層協議TCP與UDP具有不同的特點,適合在不同的網路環境及不同的應用需求中使用。
![TCP/UDP比較.png](http://upload-images.jianshu.io/upload_images/1398091-5950d86d0e1c907e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
###網路層
- 網際協議(IP)在RFC 971中定義,它同時被TCP和UDP使用,處於OSI參考模型的網路層。IP可以被認為是將資料包從一個主機移動到另一個主機的傳遞機制。因為它處理傳遞,它必須提供定址功能。IP提供3種主要的功能:
複製程式碼

無連線的,不可靠的傳遞服務 資料包分段和重組 路由功能ICMP(Internet互連網控制報文協議)是IP協議的附屬協議,主要被用來與其他主機或路由器交換錯誤報文和其他重要資訊。儘管ICMP主要被IP使用,但應用程式也可以訪問它,例如我們常用的兩個診斷工具ping和traceroute,都使用了ICMP協議。``` ARP(地址解析協議)和RARP(反向地址解析協議)是某些網路介面(如乙太網和令牌環網)使用的特殊協議,用來轉換IP層和網路介面層使用的地址。

網路層.png

  • IP資料包中包含的主要部分如下: 版本:目前的協議版本號是4,因此IP有時也稱作I P v 4。- iOS現已支援IPV6 首部長度:首部長度指的是IP包頭中32 bit的數量,包括任何選項。由於它是一個4位元欄位,因此首部最長為60個位元組。普通IP資料包(沒有任何選擇項)欄位的值是5,即長度20個位元組。 服務型別(TOS)欄位:包括一個3 bit的優先權子欄位,4 bit的TOS子欄位和1 bit未用位但必須置0的子欄位。4 bit的TOS分別代表:最小時延、最大吞吐量、最高可靠性和最小費用。4 bit中只能置其中1 bit。如果所有4 bit均為0,那麼就意味著是一般服務。現在大多數的TCP/IP實現都不支援TOS特性,但是自4.3BSD Reno以後的新版系統都對它進行了設定。另外,新的路由協議如OSPF和IS-IS都能根據這些欄位的值進行路由決策。 總長度欄位:指整個IP資料包的長度,以位元組為單位。利用首部長度欄位和總長度欄位,就可以知道IP資料包中資料內容的起始位置和長度。由於該欄位長16位元,所以IP資料包最長可達65535位元組。儘管可以傳送一個長達65535位元組的IP資料包,但是大多數的鏈路層都會對它進行分片。總長度欄位是IP首部中必要的內容,因為一些資料鏈路(如乙太網)需要填充一些資料以達到最小長度。儘管乙太網的最小幀長為46位元組,但是IP資料可能會更短。如果沒有總長度欄位,那麼IP層就不知道46位元組中有多少是IP資料包的內容。 標識欄位:唯一地標識主機傳送的每一份資料包。通常每傳送一份報文它的值就會加1樣,物理網路層一般要限制每次傳送資料幀的最大長度。IP把MTU與資料包長度進行比較,如果需要則進行分片。分片可以發生在原始傳送端主機上,也可以發生在中間路由器上。把一份IP資料包分片以後,只有到達目的地才進行重新組裝。重新組裝由目的端的IP層來完成,其目的是使分片和重新組裝過程對傳輸層(TCP和UDP)是透明的,即使只丟失一片資料也要重傳整個資料包。 已經分片過的資料包有可能會再次進行分片(可能不止一次)。IP首部中包含的資料為分片和重新組裝提供了足夠的資訊。 對於傳送端傳送的每份IP資料包來說,其標識欄位都包含一個唯一值。該值在資料包分片時被複制到每個片中。標誌欄位用其中一個位元來表示“更多的片”除了最後一片外,其他每片都要把該位元置1。 片偏移欄位指的是該片偏移原始資料包開始處的位置。當資料包被分片後,每個片的總長度值要改為該片的長度值。標誌欄位中有一個位元稱作“不分片”位。如果將這一位元置1,IP將不對資料包進行分片,在網路傳輸過程中如果遇到鏈路層的MTU小於資料包的長度時將資料包丟棄併傳送一個ICMP差錯報文。 TTL(time-to-live)生存時間:該欄位設定了資料包可以經過的最多路由器數。它指定了資料包的生存時間。TTL的初始值由源主機設定(通常為32或64),一旦經過一個處理它的路由器,它的值就減去1。當該欄位的值為0時,資料包就被丟棄,併傳送ICMP報文通知源主機。 協議欄位:根據它可以識別是哪個協議向IP傳送資料。 首部檢驗和欄位:根據IP首部計算的檢驗和碼。它不對首部後面的資料進行計算。因為ICMP、IGMP、UDP和TCP在它們各自的首部中均含有同時覆蓋首部和資料效驗和碼。 每一份IP資料包都包含32 bit的源IP地址和目的IP地址。 最後一個欄位是任選項,是資料包中的一個可變長的可選資訊。這些任選項定義如下:
安全和處理限制(用於軍事領域,詳細內容參見RFC 1108[Kent 1991])
記錄路徑(讓每個路由器都記下它的IP地址)
時間戳(讓每個路由器都記下它的IP地址和時間)
寬鬆的源站選路(為資料包指定一系列必須經過的IP地址)
嚴格的源站選路(與寬鬆的源站選路類似,但是要求只能經過指定的這些地址,不能經過其他的地址)。```
這些選項很少被使用,並非所有的主機和路由器都支援這些選項。`選項欄位一直都是以32 bit作為界限,在必要的時候插入值為0的填充位元組。這樣就保證IP首部始終是32 bit的整數倍。`
最後是上層的資料,比如TCP或UDP的資料段。
![IP資料包格式.png](http://upload-images.jianshu.io/upload_images/1398091-1888e63ac0573e4f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 由於TCP、UDP、ICMP和IGMP及一些其他的協議都要利用IP傳送資料,因此IP必須在生成的IP首部中加入某種標識,以表明其承載的資料屬於哪一類。為此,IP在首部中存入一個長度為8 bit的數值,稱作協議域。
其中1表示為ICMP協議,2表示為IGMP協議,6表示為TCP協議,17表示為UDP協議。
![協議型別欄位.png](http://upload-images.jianshu.io/upload_images/1398091-068db5f9f0b5b81f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- ICMP是一種集差錯報告與控制於一身的協議。在所有TCP/IP主機上都可實現ICMP。ICMP訊息被封裝在IP資料包裡,ICMP經常被認為是IP層的一個組成部分。它傳遞差錯報文以及其他需要注意的資訊。ICMP報文通常被IP層或更高層協議(TCP或UDP)使用。一些ICMP報文把差錯報文返回給使用者程式。
```常用的“ping”就是使用的ICMP協議```。“ping”這個名字源於聲納定位操作,目的是為了測試另一臺主機是否可達。該程式傳送一份ICMP迴應請求報文給主機,並等待返回ICMP迴應應答。一般來說,如果不能Ping到某臺主機,那麼就不能Telnet或者FTP到那臺主機。反過來,如果不能Telnet到某臺主機,那麼通常可以用Ping程式來確定問題出在哪裡。Ping程式還能測出到這臺主機的往返時間,以表明該主機離我們有“多遠”。
然而隨著Internet安全意識的增強,出現了提供訪問控制列表的路由器和防火牆,那麼像這樣沒有限定的斷言就不再成立了。一臺主機的可達性可能不只取決於IP層是否可達,還取決於使用何種協議以及埠號。
![ICMP.png](http://upload-images.jianshu.io/upload_images/1398091-d50dd59583376d35.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 資料鏈路層協議如乙太網或令牌環網都有自己的定址機制(常常為48 bit地址),這是使用資料鏈路的任何網路層都必須遵從的。當一臺主機把乙太網資料幀傳送到位於同一區域網上的另一臺主機時,是根據48 bit的乙太網地址來確定目的介面的。裝置驅動程式從不檢查IP資料包中的目的IP地址。
ARP協議需要為IP地址和MAC地址這兩種不同的地址形式提供對應關係。
`ARP過程如下`:ARP傳送一份稱作ARP請求的乙太網資料幀給乙太網上的每個主機。這個過程稱作廣播,ARP請求資料幀中包含目的主機的IP地址,其意思是“如果你是這個IP地址的擁有者,請回答你的硬體地址。
連線到同一LAN的所有主機都接收並處理ARP廣播,目的主機的ARP層收到這份廣播報文後,根據目的IP地址判斷出這是傳送端在尋問它的MAC地址。於是傳送一個單播ARP應答。這個ARP應答包含IP地址及對應的硬體地址。收到ARP應答後,傳送端就知道接收端的MAC地址了。
ARP高效執行的關鍵是由於每個主機上都有一個ARP快取記憶體。這個快取記憶體存放了最近IP地址到硬體地址之間的對映記錄。當主機查詢某個IP地址與MAC地址的對應關係時首先在本機的ARP快取表中查詢,只有在找不到時才進行ARP廣播。
![ARP工作機制.png](http://upload-images.jianshu.io/upload_images/1398091-e19d6dac01243bc6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 具有本地磁碟的系統引導時,一般是從磁碟上的配置檔案中讀取IP地址。但是無盤工作站或被配置為動態獲取IP地址的主機則需要採用其他方法來獲得IP地址。
RARP實現過程是主機從介面卡上讀取唯一的硬體地址,然後傳送一份RARP請求(一幀在網路上廣播的資料),請求某個主機(如DHCP伺服器或BOOTP伺服器)響應該主機系統的IP地址。
DHCP伺服器或BOOTP伺服器接收到了RARP的請求,為其分配IP地址等配置資訊,並通過RARP迴應傳送給源主機。
![RARP工作機制.png](http://upload-images.jianshu.io/upload_images/1398091-6d96a1f00ebcd626.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

資料:
[HTTP協議](http://www.360doc.com/content/10/0930/17/3668821_57590979.shtml)
[深入理解HTTP](http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html)


複製程式碼

相關文章