天天看點

TCP/IP協定族

資料鍊路層實作網卡接口的網絡驅動程式,以處理資料在實體媒介上的傳輸。不同的實體網絡有不同的電器特性,網絡驅動程式隐藏了這些細節,為上層協定提供一個統一的接口。

資料鍊路層兩個常用的協定是ARP協定(Address Resolution Protocol,位址解析協定)和RARP協定(Reverse Address Resolution Protocol,反向位址解析解析)。它們實作了IP位址和實體位址之間的互相轉換。

網絡層使用IP位址尋址一台機器,而資料鍊路層使用實體位址尋址一台機器,是以網絡層必須先将其目标機器IP位址轉換為實體位址,才能使用資料鍊路層提供的服務。

其工作原理是:主機向自己所在的網絡廣播-個ARP請求,該請求包含目标機器的網絡位址。此網絡上的其他機器都将收到這個請求,但隻有被請求的目标機器會回應-一個 ARP應答,其中包含自己的實體位址。

TCP/IP協定族

硬體類型:字段定義實體位址的類型,它的值為1表示MAC位址。

協定類型:字段表示要映射的協定位址類型,它的值為0x800,表示IP位址。

口硬體位址長度字段和協定位址長度字段:顧名思義,其機關是位元組。對MAC位址來說,其長度為6;對IP (v4)位址來說,其長度為4。

操作字段:指出4種操作類型: ARP 請求(值為1)、ARP應答(值為2)、RARP請求(值為3)和RARP應答(值為4)。

最後4個字段指定通信雙方的以太網位址和IP位址。發送端填充除目的端以太網位址外的其他3個字段,以建構ARP請求并發送之。接收端發現該請求的目的端IP位址是自己,就把自己的以太網位址填進去,然後交換兩個目的端位址和兩個發送端位址,以建構ARP應答并傳回之(當然,如前所述,操作字段需要設定為2)。

由此可知,ARP請求/應答封包的長度為28位元組。如果再加上以太網幀頭部和尾部的18位元組,則一個搒帶ARP請求1應答封包的以太網幀長度為46位元組。不過有的實作要求以太網幀資料部分長度至少為46位元組,此時ARP請求/應答封包将增加一-些填充位元組,以滿足這個要求。在這種情況下,一個攜帶ARP請求/應答封包的以太網幀長度為64位元組。

通常,ARP 維護-一個高速緩存,其中包含經常通路(比如網關位址)或最近通路的機器的IP位址到實體位址的映射。這樣就避免了重複的ARP請求,提高了發送資料包的速度。

TCP/IP協定族

網絡層實作資料包的選擇和轉發。

IP協定根據資料報的目的IP位址來決定如何投遞它。如果資料包不能直接發給目标主機,那麼IP協定就為他尋找一個合适的下一跳(next hop)路由器,并将資料包傳遞給路由來器轉發。多次重複這一過程,最終到達目标主機,或者由于發送失敗而被丢棄。

ICMP協定(Internet Control Message Protocol,網際網路控制封包協定)它是IP協定的補充,主要用于網絡連接配接測試。

TCP/IP協定族

8位類型字段用于區分封包類型,它将ICMP分為兩大類:

差錯封包:這類封包主要用來回應網絡錯誤,比如目标不可達(類型值為3)和重定向(類型值為5);

查詢封包:這類封包用來查詢網絡資訊,比如ping程式就是使用ICMP封包檢視目标是否可達(類型值為8)。

TCP/IP協定族

有的 ICMP封包還是用8為代碼字段來進一步細分不同的條件。比如重定向封包使用代碼值0表示對網路重定向,代碼值1表示對主機重定向。

ICMP使用16位校驗和字段對整個封包(包括頭部和内容部分)進行循環備援校驗(Cyclic Redundancy Check, CRC)以校驗封包在傳輸過程中是否損壞。不同的ICMP封包類型有不同的正文内容。

傳輸層為兩台主機上的應用程式提供端到端的通信。與網絡層使用的逐跳通信方式不同,傳輸層隻關心通信的起始端和目的端,而不在乎資料包的中轉過程。

TCP/IP協定族

垂直的直線箭頭表示TCP/IP協定族各層之間的實體通信,而水準的虛線箭頭表示邏輯通信線路。從中可見,資料鍊路層封裝了實體網絡的電氣細節;網絡層封裝了網絡連接配接的細節;傳輸層則為程式封裝了一條端到端的邏輯通信鍊路,它負責資料的收發,鍊路的逾時重連等;

TCP協定(TCP,Transmission Control Protocol,傳輸控制協定)它為應用層提供面向連接配接的、可靠的、基于位元組流的服務。

UDP協定(UDP,User Datagram Protocol,使用者資料報協定)它為應用層提供無連接配接,不可靠,基于資料報的服務。

SCTP協定(SCTP,Stream Control Transmission Protocol,流控制傳輸協定)是一種傳輸協定,在TCP/IP協定棧中所處的位置和TCP、UDP類似,兼有TCP/UDP兩者特征

應用層負責處理應用程式的邏輯。資料鍊路層、網絡層和傳輸層負責處理網絡通信細節,這部分必須既穩定又高效,是以它們都在核心空間中實作。而應用層則在使用者空間實作,因為它負責處理衆多邏輯,比如檔案傳輸、名稱查詢和網絡管理等。如果應用層也在核心中實作,則會使核心變得非常龐大。當然,也有少數伺服器程式是在核心中實作的,這樣代碼就無須在使用者空間和核心空間來回切換(主要是資料的複制),極大地提高了工作效率。不過這種代碼實作起來較複雜,不夠靈活,且不便于移植。

ping是應用程式,而不是協定,它利用ICMP封包檢測網絡連接配接,是調試網絡環境的必備工具。

telnet協定:是一種遠端登入協定,它使我們能在本地完成遠端任務。

OSPF (Open Shortest Path First,開放最短路徑優先)協定是一種動态路由更新協定,用于路由器之間的通信,以告知對方各自的路由資訊。

DNS (Domain Name Service,域名服務)協定提供機器域名到IP位址的轉換。

應用層協定(或程式)可能跳過傳輸層直接使用網絡層提供的服務,比如ping程式和OSPF協定。應用層協定(或程式)通常既可以使用TCP服務,又可以使用UDP服務,比如DNS協定。我們可以通過/etc/services檔案檢視所有知名的應用層協定,以及它們都能使那些傳輸層服務。

DNS是--套分布式的域名服務系統。每個DNS伺服器上都存放着大量的機器名和IP位址的映射,并且是動态更新的。衆多網絡用戶端程式都使用DNS協定來向DNS伺服器查詢目标主機的IP位址。DNS查詢和應答封包的格式如圖。

TCP/IP協定族

16位辨別e字段用于标記- -對 DNS查詢和應答,以此區分-一個DNS應答是哪個DNS查詢的回應。16位标志字段用于協商具體的通信方式和回報通信狀态。

TCP/IP協定族

QR,查詢1應答标志。0表示這是-一個查詢封包,1表示這是一個應答封包。

opcode,定義查詢和應答的類型。0表示标準查詢,1表示反向查詢(由IP位址獲得主機域名),2表示請求伺服器狀态。

AA,授權應答标志,僅由應答封包使用。1表示域名伺服器是授權伺服器。

TC,截斷标志,僅當DNS封包使用UDP服務時使用。因為UDP資料報有長度限制,是以過長的DNS封包将被截斷。1表示DNS封包超過512位元組,并被截斷。

RD,遞歸查詢标志。1表示執行遞歸查詢,即如果目标DNS伺服器無法解析某個主機名,則它将向其他DNS伺服器繼續查詢,如此遞歸,直到獲得結果并把該結果傳回給用戶端。0表示執行疊代查詢,即如果目标DNS伺服器無法解析某個主機名,則它将自己知道的其他DNS伺服器的IP位址傳回給用戶端,以供用戶端參考。

RA,允許遞歸标志。僅由應答封包使用,1表示DNS伺服器支援遞歸查詢。

zero,這3位未用,必須都設定為0。

rcode, 4位傳回碼,表示應答的狀态。常用值有0 (無錯誤)和3 (域名不存在)。.

接下來的4個字段則分别指出DNS封包的最後4個字段的資源記錄數目。對查詢封包而言,它一般包含1個查詢問題,而應答資源記錄數、授權資源記錄數和額外資源記錄數則為0。應答封包的應答資源記錄數則至少為1,而授權資源記錄數和額外資源記錄數可為0或非0。

查詢類型的格式:

TCP/IP協定族

查詢名以一定的格式封裝了要查詢的主機域名。16位查詢類型表示如何執

查詢操作,常見的類型有如下幾種:

類型A,值是1,表示擷取目标主機的IP位址。0類型CNAME,值是5,表示獲得目标主機的别名。

類型PTR,值是12,表示反向查詢。

16位查詢類通常為1,表示擷取網際網路位址(IP 位址)。

應答字段、授權字段和額外資訊字段都使用資源記錄(Resource Record,RR)格式。資源記錄格式如圖所示。

TCP/IP協定族

32 位域名是該記錄中與資源對應的名字,其格式和查詢問題中的查詢名字

段相同。16 位類型和16位類字段的含義也與DNS查詢問題的對應字段相同。

32位生存時間表示該查詢記錄結果可被本地用戶端程式緩存多長時間,機關是秒。

16位資源資料長度字段和資源資料字段的内容取決于類型字段。對類型A而言,資源資料是32位的IPv4位址,而資源資料長度則為4 (以位元組為機關)。

通過封裝(encapsulation)上層協定可以使用下層協定提供的服務。應用程式資料在發送到實體網絡上之前,将沿着協定棧從上往下依次傳遞。每層協定都将在上層資料的基礎上加上自己的頭部資訊(有時還包括尾部資訊),以實作該層的功能。

TCP/IP協定族

經過TCP封裝後的資料稱為TCP封包段(TCP message segment),或者簡稱TCP段。TCP協定為通信雙方維持一個連接配接,并且在核心中存儲相關資料。這部分資料中的TCP頭部資訊和TCP核心緩沖區(發送緩沖區或接收緩沖區)資料一起構成了 TCP封包段。

TCP/IP協定族

當發送端應用程式使用send (或者write)麗數向-一個TCP連接配接寫人資料時,核心中的TCP子產品首先把這些資料複制到與該連接配接對應的TCP核心發送緩沖區中,然後TCP子產品調用IP子產品提供的服務,傳遞的參數包括TCP頭部資訊和TCP發送緩沖區中的資料,即TCP封包段。

經過UDP封裝後的資料稱為UDP資料報(UDPdatagram)。UDP對應用程式資料的封裝與TCP類似。不同的是,UDP無須為應用層資料儲存副本,因為它提供的服務是不可靠的。當一個UDP資料報被成功發送之後,UDP核心緩沖區中的該資料報就被丢棄了。如果應用程式檢測到該資料報未能被接收端正确接收,并打算重發這個資料報,則應用程式需要重新從使用者空間将該資料報拷貝到UDP核心發送緩沖區中。

經過IP封裝後的資料稱為IP資料報(IP datagram)。IP 資料報也包括頭部資訊和資料部分,其中資料部分就是一個TCP封包段、UDP資料報或者ICMP封包。

經過資料鍊路層封裝的資料稱為幀(frame)。傳輸媒介不同,幀的類型也不同。比如,以太網上傳輸的是以太網幀(ethernet frame),而令牌環網絡上傳輸的則是令牌環幀(token ring frame)。以以太網幀為例。

以太網幀使用6位元組的目的實體位址和6位元組的源實體位址來表示通信的雙方。關于類型(type)字段,4位元組CRC字段對幀的其他部分提供循環備援校驗。

幀的最大傳輸單元(Max Transmit Unit, MTU),即幀最多能攜帶多少上層協定資料(比如IP資料報),通常受到網絡類型的限制。圖1-6所示的以太網幀的MTU是1500位元組。正因為如此,過長的IP資料報可能需要被分片( fragment)傳輸。幀才是最終在實體網絡上傳送的位元組序列。至此,封裝過程完成。

當幀到達目标主機時,将沿着協定棧自低向上依次傳遞,各層協定依次處理幀中本次負責的頭部資料,以擷取所需的資訊,并最終将處理後的幀交給目标應用程式。這個過程稱為分用((demultiplexing)。 分用是依靠頭部資訊中的類型字段實作的。

繼續閱讀