什么是TCP/IP網(wǎng)絡模型詳解

2021-02-01    分類: 網(wǎng)站建設

TCP/IP網(wǎng)絡模型

TCP/IP模型是互聯(lián)網(wǎng)的基礎,它是一系列網(wǎng)絡協(xié)議的總稱。這些協(xié)議可以劃分為四層,分別為鏈路層、網(wǎng)絡層、傳輸層和應用層。

在網(wǎng)絡體系結構中網(wǎng)絡通信的建立必須是在通信雙方的對等層進行,不能交錯。 在整個數(shù)據(jù)傳輸過程中,數(shù)據(jù)在發(fā)送端時經(jīng)過各層時都要附加上相應層的協(xié)議頭和協(xié)議尾(僅數(shù)據(jù)鏈路層需要封裝協(xié)議尾)部分,也就是要對數(shù)據(jù)進行協(xié)議封裝,以標識對應層所用的通信協(xié)議。

OSI七層模型

當然在理論上,還有一個OSI七層模型:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡層、傳輸層、會話層、表示層和應用層。這是一個理想模型,由于其復雜性并沒有被大家廣泛采用。


鏈路層

1 以太網(wǎng)和802封裝

以太網(wǎng)封裝是以RFC894定義的 而802封裝則是RFC1042定義的 主機需求RFC要求: (1)必須支持以太網(wǎng)封裝 (2)應該支持與RFC894混合的RFC1042封裝 (3)或許可以發(fā)送RFC1042封裝的分組

2 SLIP

適用于RS-232和高速調(diào)制解調(diào)器接入網(wǎng)絡 (1)以0xC0結束 (2)對報文中的0xC0和ESC字符進行轉義 缺點:沒有辦法通知本端IP到對端;沒有類型字段;沒有校驗和

3 CSLIP

將SLIP報文中的20字節(jié)IP首部和20字節(jié)TCP首部壓縮為3或5字節(jié)

4 PPP協(xié)議

修正了SLIP協(xié)議的缺陷,支持多種協(xié)議類型;帶數(shù)據(jù)校驗和;報文首部壓縮;雙方可以進行IP地址動態(tài)協(xié)商(使用IP協(xié)議);鏈路控制協(xié)議可以對多個鏈路選項進行設置。

5 環(huán)回接口

用于同一臺主機上的程序通過TCP/IP通信。 傳給環(huán)回的數(shù)據(jù)均作為輸入; 傳給該主機IP地址的數(shù)據(jù)也是送到環(huán)回接口; 廣播和多播數(shù)據(jù)先復制一份到環(huán)回接口,再送到以太網(wǎng)上。

6 MTU

對數(shù)據(jù)幀長度的大限制,如果數(shù)據(jù)分組長度大于這個數(shù)值,需要在IP層對其分片。 注意:發(fā)往以太網(wǎng)的數(shù)據(jù)要考慮路徑MTU

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

IP是TCP/IP中最為核心的協(xié)議,所有的TCP、UDP、ICMP等協(xié)議均以IP數(shù)據(jù)報的格式傳輸。IP協(xié)議提供不可靠、無連接的服務,它不保證數(shù)據(jù)報一定可以送達目的,也不保證數(shù)據(jù)報的先后次序。

IP首部格式為


注:網(wǎng)絡字節(jié)序:32bit傳輸?shù)拇涡驗?-7bit, 8-15bit, 16-23bit, 24-31bit(即big endian字節(jié)序)

IP路由

IP路由選擇是逐跳進行的。IP并不知道到達任何目的的完整路徑(當然,除了那些與主機直接相連的)。所有的IP路由選擇只為數(shù)據(jù)報傳輸提供下一站路由器的I P地址。它假定下一站路由器比發(fā)送主機更接近目的,而且下一站路由器與該主機是直接相連的。

IP路由選擇主要完成以下這些功能:

1) 搜索路由表,尋找能與目的IP地址完全匹配的表目(網(wǎng)絡號和主機號都要匹配)。如果找到,則把報文發(fā)送給該表目指定的下一站路由器或直接連接的網(wǎng)絡接口(取決于標志字段的值)。 2) 搜索路由表,尋找能與目的網(wǎng)絡號相匹配的表目。如果找到,則把報文發(fā)送給該表目指定的下一站路由器或直接連接的網(wǎng)絡接口(取決于標志字段的值)。目的網(wǎng)絡上的所有主機都可以通過這個表目來處置。例如,一個以太網(wǎng)上的所有主機都是通過這種表目進行尋徑的。這種搜索網(wǎng)絡的匹配方法必須考慮可能的子網(wǎng)掩碼。關于這一點我們在下一節(jié)中進行討論。 3) 搜索路由表,尋找標為“默認”的表目。如果找到,則把報文發(fā)送給該表目指定的下一站路由器。

如果上面這些步驟都沒有成功,那么該數(shù)據(jù)報就不能被傳送。如果不能傳送的數(shù)據(jù)報來自本機,那么一般會向生成數(shù)據(jù)報的應用程序返回一個“主機不可達”或“網(wǎng)絡不可達”的錯誤。

IP路由選擇是通過逐跳來實現(xiàn)的。數(shù)據(jù)報在各站的傳輸過程中目的IP地址始終不變,但是封裝和目的鏈路層地址在每一站都可以改變。大多數(shù)的主機和許多路由器對于非本地網(wǎng)絡的數(shù)據(jù)報都使用默認的下一站路由器。

IP路由選擇機制的兩個特征: (1)完整主機地址匹配在網(wǎng)絡號匹配之前執(zhí)行 (2)為網(wǎng)絡指定路由,而不必為每個主機指定路由

IP地址和MAC地址分類

按IP地址范圍劃分

  • A類:地址范圍1.0.0.1-126.255.255.255,A類IP地址的子網(wǎng)掩碼為255.0.0.0,每個網(wǎng)絡支持的大主機數(shù)為256的3次方-2=16777214臺。
  • B類:地址范圍128.0.0.1-191.255.255.255,B類IP地址的子網(wǎng)掩碼為255.255.0.0,每個網(wǎng)絡支持的大主機數(shù)為256的2次方-2=65534臺
  • C類:地址范圍192.0.1.1-223.255.255.255,C類IP地址的子網(wǎng)掩碼為255.255.255.0,每個網(wǎng)絡支持的大主機數(shù)為256-2=254臺
  • D類:以1110開始的地址,多播地址
  • E類:以11110開始的地址,保留地址

按照通訊模式劃分

  • 單播:目標是特定的主機,比如192.168.0.3
  • 廣播:目標IP地址的主機部分全為1,并且目的MAC地址為FF-FF-FF-FF-FF-FF。比如B類網(wǎng)絡172.16.0.0的默認子網(wǎng)掩碼為255.255.0.0,廣播地址為172.16.255.255。
  • 多播:目標為一組主機,IP地址范圍為224.0.0.0~239.255.255.255。多播MAC地址以十六進制值01-00-5E打頭,余下的6個十六進制位根據(jù)IP多播組地址的最后23位轉換得到。

單播是對特定的主機進行數(shù)據(jù)傳送。如給某一個主機發(fā)送IP數(shù)據(jù)包,鏈路層頭部是非常具體的目的地址,對于以太網(wǎng)來 說,就是網(wǎng)卡的MAC地址。廣播和多播僅應用于UDP,它們對需將報文同時傳往多個接收者的應用來說十分重要。

  • 廣播是針對某一個網(wǎng)絡上的所有主機發(fā)包,這個網(wǎng)絡可能是網(wǎng)絡,可能是子網(wǎng),還可能是所有的子網(wǎng)。如果是網(wǎng)絡,例如A類網(wǎng)址的廣播就是 netid.255.255.255,如果是子網(wǎng),則是netid.netid.subnetid.255;如果是所有的子網(wǎng)(B類IP)則是則是 netid.netid.255.255。廣播所用的MAC地址FF-FF-FF-FF-FF-FF。網(wǎng)絡內(nèi)所有的主機都會收到這個廣播數(shù)據(jù),網(wǎng)卡只要把 MAC地址為FF-FF-FF-FF-FF-FF的數(shù)據(jù)交給內(nèi)核就可以了。一般說來ARP,或者路由協(xié)議RIP應該是以廣播的形式播發(fā)的。
  • 多播就是給一組特定的主機(多播組)發(fā)送數(shù)據(jù),這樣,數(shù)據(jù)的播發(fā)范圍會小一些。多播的MAC地址是高字節(jié)的低位為一,例 如01-00-00-00-00-00。多播組的地址是D類IP,規(guī)定是224.0.0.0-239.255.255.255。與IP多播相對應的以太網(wǎng)地址范圍從0 1 : 0 0 : 5 e : 0 0 : 0 0 : 0 0到01: 00: 5e: 7f: ff: ff。通過將其低位23 bit映射到相應以太網(wǎng)地址中便可實現(xiàn)多播組地址到以太網(wǎng)地址的轉換。由于地址映射是不唯一的,因此要其他的協(xié)議實現(xiàn)額外的數(shù)據(jù)報過濾。

子網(wǎng)掩碼

子網(wǎng)掩碼用來確定多少bit用于網(wǎng)絡號和多少bit用于主機號。

給定IP地址和子網(wǎng)掩碼以后,主機就可以確定IP數(shù)據(jù)報的目的是: (1)本子網(wǎng)上的主機; (2)本網(wǎng)絡中其他子網(wǎng)中的主機; (3)其他網(wǎng)絡上的主機。

如果知道本機的IP地址,那么就知道它是否為A類、B類或C類地址(從IP地址的高位可以得知),也就知道網(wǎng)絡號和子網(wǎng)號之間的分界線。而根據(jù)子網(wǎng)掩碼就可知道子網(wǎng)號與主機號之間的分界線。

封裝

以太網(wǎng)數(shù)據(jù)幀的物理特性是其長度必須在46~1500字節(jié)之間,而數(shù)據(jù)幀在進入每一層協(xié)議棧的時候均會做一些封裝。


而更具體的以太網(wǎng)幀格式為


分用

當目的主機收到一個以太網(wǎng)幀時,就在協(xié)議棧中從底向上升,同時去掉各層協(xié)議加上的報文首部。每層協(xié)議盒都要去檢查報文首部的協(xié)議標識,以確定接收數(shù)據(jù)的上層協(xié)議。這個過程稱作分用。


分段 (fragmentation)

老的內(nèi)核通常在IP層處理IP分段,IP層可以接收0~64KB的數(shù)據(jù)。因此,當數(shù)據(jù)IP packet大于PMTU時,就必須把數(shù)據(jù)分成多個IP分段。 較新的內(nèi)核中,L4會嘗試進行分段:L4不會再把超過PMTU的緩沖區(qū)直接傳給IP層,而是傳遞一組和PMTU相匹配的緩沖區(qū)。這樣,IP層只需要給每個分段增加IP報頭。但是這并不意味著IP層就不做分段的工作了,一些情況下,IP層還會進行分段操作。

  • 分段是指將一個IP包分成多個傳輸,在接收端 IP 層重新組裝
  • 一個 IP 包能否分包,取決于它的 DF 標志位:DF bit (0 = "may fragment," 1 = "don't fragment")
  • 分包后,每個分段有 MF 標志位:MF bit (0 = "last fragment," 1 = "more fragments")

第一個表格中:

  • IP 包長度 5140,包括 5120 bytes 的 payload
  • DF = 0, 允許分包
  • MF = 0, 這是未分包

第二個表格中:

  • 0-0 第一個分包: 長度 1500 = 1480 (payload) + 20 (IP Header). Offset(起始偏移量): 0
  • 0-1 第二個分包: 長度 1500 = 1480 (payload) + 20 (IP Header). Offset: 185 = 1480 / 8
  • 0-2 第三個分包: 長度 1500 = 1480 (payload) + 20 (IP Header). Offset: 370 = 185 + 1480/8
  • 0-3 第四個分包: 長度 700 = 680 (payload, = (5140 - 20) - 1480 * 3) + 20 (IP Header) . Offset: 555 = 370 + 1480/8

需要注意的是,只有第一個包帶有原始包的完整 IPv4 + TCP/UDP 信息,后續(xù)的分包只有 IPv4 信息。

分包帶來的問題:

  • sender overhead:需要消耗 CPU 去分包,包括計算和數(shù)據(jù)拷貝。
  • receiver overhead:重新組裝多個分包。在路由器上組裝非常低效率,因此組裝往往在接收主機上進行。
  • 重發(fā) overhead:一個分包丟失,則整個包需要重傳。
  • 在多個分包出現(xiàn)順序錯開時,防火墻可能將分到當無效包處理而丟棄。

MTU

一個網(wǎng)絡接口的 MTU 是它一次所能傳輸?shù)拇髷?shù)據(jù)塊的大小。任何超過MTU的數(shù)據(jù)塊都會在傳輸前分成小的傳輸單元。MTU 有兩個測量層次:網(wǎng)絡層和鏈路層。比如,網(wǎng)絡層上標準的因特網(wǎng) MTU 是 1500 bytes,而在連接層上是 1518 字節(jié)。沒有特別說的時候,往往指的是網(wǎng)絡層的MTU。

要增加一個網(wǎng)絡接口 MTU 的常見原因是增加高速因特網(wǎng)的吞吐量。標準因特網(wǎng) MTU 使用 1500byte是為了和 10M 和 100M 網(wǎng)絡后向兼容,但是,在目前1G和 10G網(wǎng)絡中遠遠不夠。新式的網(wǎng)絡設備可以處理更大的MTU,但是,MTU需要顯式設置。這種更大MTU的幀叫做“巨幀”,通常 9000 byte 是比較普遍的。

相對地,一些可能得需要減少MTU的原因:

  • 滿足另一個網(wǎng)絡的MTU的需要(為了消除UDP分包,以及需要TCP PMTU discover )
  • 滿足 ATM cell 的要求
  • 在高出錯率線路上提高吞吐量

MTU 不能和目前任何 Internet 網(wǎng)絡協(xié)議混在一起,但是,可以使用一個路由器將不同 MTU 的網(wǎng)段連在一起。

TCP fragmentation

每個TCP數(shù)據(jù)包(segment)的大小受MSS(TCP_MAXSEG選項)限制。大報文段長度 ( MSS )表示 TCP 傳往另一端的大塊數(shù)據(jù)的長度。當一個連接建立時(SYN packet), 連接的雙方都要通告各自的MSS。

一般說來,如果沒有分段發(fā)生, MSS還是越大越好。報文段越大允許每個報文段傳送的數(shù)據(jù)就越多,相對IP和TCP首部有更高的網(wǎng)絡利用率。當TCP發(fā)送一個SYN時,或者是因為一個本地應用進程想發(fā)起一個連接,或者是因為另一端的主機收到了一個連接請求,它能將MSS值設置為外出接口上的MTU長度減去固定的IP首部(20 bytes)和TCP首部長度(20 bytes)。對于一個以太網(wǎng),MSS值可達1460字節(jié)(詳細參考tcp_sendmsg)。

TCP/SCTP會將數(shù)據(jù)按MTU進行切片,然后3層的工作只需要給傳遞下來的切片加上 ip頭就可以了(也就是說調(diào)用這個函數(shù)的時候,其實4層已經(jīng)切好片了)。

Segmentation offload

現(xiàn)在很多網(wǎng)卡本身支持數(shù)據(jù)分片,這樣,上層L4/L3就可以不用進行分片(大64KB),而由NIC來完成,從而提高網(wǎng)絡性能。

  • Large Segment Offload (LSO):使得網(wǎng)絡協(xié)議棧能夠將超過PMTU的數(shù)據(jù)包推送至網(wǎng)卡,然后網(wǎng)卡執(zhí)行分片工作,這樣減輕了CPU的負荷
  • TCP Segmentation Offload (TSO):類似于LSO,針對TCP協(xié)議包
  • UDP Fragmentation Offload (UFO): 類似于TSO,針對UDP包
  • Large Receive Offload (LRO): 將接收到的包聚合成一個大的數(shù)據(jù)包,然后再發(fā)給協(xié)議棧處理
  • Generic Segmentation Offload (GSO): TSO/LSO的增強,同時支持TCP和UDP協(xié)議,負責把超過MTU的包分片
  • Generic Receive Offload (GRO):LRO的增強,負責將接收到的多個包聚合成一個大的數(shù)據(jù)包,然后再發(fā)給協(xié)議棧處理

PMTU (Path Maximum Transmission Unit Discovery)

PMTU 的用途是動態(tài)的確定從發(fā)送端到接收端整個路徑上的最小 MTU,從而避免分包。注意,PMTU 只支持 TCP,對其他協(xié)議比如 UDP 無效。而且,如果發(fā)送方已經(jīng)開啟了 PMTU,那么它發(fā)送的所有 TCP/IP 包的 DF 標志都被設置為 1 即不再允許分包。當網(wǎng)絡路徑上某個路由器發(fā)現(xiàn)發(fā)送者的包因為超過前面轉發(fā)路徑的 MTU 而無法發(fā)送時,它向發(fā)送者返回一個 ICMP "Destination Unreachable" 消息,其中包含了那個 MTU,然后發(fā)送者就會在它的路由表中將該mtu值保存下來,再使用較小的 MTU 重新發(fā)出新的較小的包。

例子1:超過 MTU,DF = 0 => 路由器分包、發(fā)送,接收主機組裝


例子2:超過,DF = 1 => PMTU,發(fā)送者重新以小包發(fā)送


網(wǎng)頁題目:什么是TCP/IP網(wǎng)絡模型詳解
瀏覽地址:http://www.bm7419.com/news13/98513.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設、企業(yè)建站網(wǎng)站制作、網(wǎng)站策劃、手機網(wǎng)站建設、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設計