七層網絡協議 計算機網絡基礎——網絡分層和IP地址

網絡七層協議

OSI是一個開放性的通信系統互連參考模型,他是一個定義得非常好的協議規範。OSI模型有7層結構,每層都可以有幾個子層。 OSI的7層從上到下分別是 7 應用層 6 表示層 5 會話層 4 傳輸層 3 網絡層 2 數據鏈路層 1 物理層 ;其中高層(即7、6、5、4層)定義了應用程序的功能,下面3層(即3、2、1層)主要面向通過網絡的端到端的數據流
中文名
網絡七層協議
外文名
Open System Interconnection
英文縮寫
OSI
屬    性
開放式系統互聯參考模型

各層功能

應用層

與其它計算機進行通訊的一個應用,它是對應應用程序的通信服務的。例如,一個沒有通信功能的字處理程序就不能執行通信的代碼,從事字處理工作的程序員也不關心OSI的第7層。但是,如果添加了一個傳輸文件的選項,那麼字處理器的程序就需要實現OSI的第7層。示例:TELNETHTTPFTPNFSSMTP等。

表示層

這一層的主要功能是定義數據格式及加密。例如,FTP允許你選擇以二進制或ASCII格式傳輸。如果選擇二進制,那麼發送方和接收方不改變文件的內容。如果選擇ASCII格式,發送方將把文本從發送方的字符集轉換成標準的ASCII後發送數據。在接收方將標準的ASCII轉換成接收方計算機的字符集。示例:加密,ASCII等。

會話層

它定義瞭如何開始、控制和結束一個會話,包括對多個雙向消息的控制和管理,以便在只完成連續消息的一部分時可以通知應用,從而使表示層看到的數據是連續的,在某些情況下,如果表示層收到了所有的數據,則用數據代表表示層。示例:RPC,SQL等。

傳輸層

這層的功能包括是否選擇差錯恢復協議還是無差錯恢復協議,及在同一主機上對不同應用的數據流的輸入進行復用,還包括對收到的順序不對的數據包的重新排序功能。示例:TCPUDPSPX

網絡層

這層對端到端的包傳輸進行定義,它定義了能夠標識所有結點的邏輯地址,還定義了路由實現的方式和學習的方式。爲了適應最大傳輸單元長度小於包長度的傳輸介質,網絡層還定義瞭如何將一個包分解成更小的包的分段方法。示例:IP,IPX等。

數據鏈路層

它定義了在單個鏈路上如何傳輸數據。這些協議與被討論的各種介質有關。示例:ATMFDDI等。

物理層

OSI的物理層規範是有關傳輸介質的特性,這些規範通常也參考了其他組織制定的標準。連接頭、幀、幀的使用、電流、編碼及光調製等都屬於各種物理層規範中的內容。物理層常用多個規範完成對所有細節的定義。示例:Rj45802.3等。

分層優點

(1)人們可以很容易的討論和學習協議的規範細節。
(2)層間的標準接口方便了工程模塊化。
(3)創建了一個更好的互連環境。
(4)降低了複雜度,使程序更容易修改,產品開發的速度更快。
(5)每層利用緊鄰的下層服務,更容易記住各層的功能。
大多數的計算機網絡都採用層次式結構,即將一個計算機網絡分爲若干層次,處在高層次的系統僅是利用較低層次的系統提供的接口和功能,不需瞭解低層實現該功能所採用的算法和協議;較低層次也僅是使用從高層系統傳送來的參數,這就是層次間的無關性。因爲有了這種無關性,層次間的每個模塊可以用一個新的模塊取代,只要新的模塊與舊的模塊具有相同的功能和接口,即使它們使用的算法和協議都不一樣。
網絡中的計算機與終端間要想正確的傳送信息和數據,必須在數據傳輸的順序、數據的格式及內容等方面有一個約定或規則,這種約定或規則稱做協議。

主要組成

語義

是對協議元素的含義進行解釋,不同類型的協議元素所規定的語義是不同的。例如需要發出何種控制信息、完成何種動作及得到的響應等。

語法

將若干個協議元素和數據組合在一起用來表達一個完整的內容所應遵循的格式,也就是對信息的數據結構做一種規定。例如用戶數據與控制信息的結構與格式等。

時序

對事件實現順序的詳細說明。例如在雙方進行通信時,發送點發出一個數據報文,如果目標點正確收到,則回答源點接收正確;若接收到錯誤的信息,則要求源點重發一次。

發展

70年代以來,國外一些主要計算機生產廠家先後推出了各自的網絡體系結構,但它們都屬於專用的。
爲使不同計算機廠家的計算機能夠互相通信,以便在更大的範圍內建立計算機網絡,有必要建立一個國際範圍的網絡體系結構標準。
國際標準化組織ISO 於1981年正式推薦了一個網絡系統結構----七層參考模型 [1]  ,叫做開放系統互連模型(Open System Interconnection,OSI)。由於這個標準模型的建立,使得各種計算機網絡向它靠攏,大大推動了網絡通信的發展。
OSI 參考模型將整個網絡通信的功能劃分爲七個層次,見圖1。它們由低到高分別是物理層(PH)、數據鏈路層(DL)、網絡層(N)、傳輸層(T)、會話層(S)、表示層(P)、應用層(A)。每層完成一定的功能,每層都直接爲其上層提供服務,並且所有層次都互相支持。第四層到第七層主要負責互操作性,而一層到三層則用於創造兩個網絡設備間的物理連接。

詳細介紹

物理層

物理層是OSI的第一層,它雖然處於最底層,卻是整個開放系統的基礎。物理層爲設備之間的數據通信提供傳輸媒體及互連設備,爲數據傳輸提供可靠的環境。
1.1媒體和互連設備
物理層的媒體包括架空明線、平衡電纜、光纖、無線信道等。通信用的互連設備指DTE和DCE間的互連設備。DTE即數據終端設備,又稱物理設備,如計算機、終端等都包括在內。而DCE則是數據通信設備或電路連接設備,如調制解調器等。數據傳輸通常是經過DTE——DCE,再經過DCE——DTE的路徑。互連設備指將DTE、DCE連接起來的裝置,如各種插頭、插座。LAN中的各種粗、細同軸電纜、T型接、插頭,接收器,發送器,中繼器等都屬物理層的媒體和連接器。
1.2物理層的主要功能
1.2.1爲數據端設備提供傳送數據的通路,數據通路可以是一個物理媒體,也可以是多個物理媒體連接而成。一次完整的數據傳輸,包括激活物理連接,傳送數據,終止物理連接.所謂激活,就是不管有多少物理媒體參與,都要在通信的兩個數據終端設備間連接起來,形成一條通路。
1.2.2傳輸數據.物理層要形成適合數據傳輸需要的實體,爲數據傳送服務。一是要保證數據能在其上正確通過,二是要提供足夠的帶寬(帶寬是指每秒鐘內能通過的比特(BIT)數),以減少信道上的擁塞。傳輸數據的方式能滿足點到點,一點到多點,串行或並行,半雙工或全雙工,同步或異步傳輸的需要。
1.3物理層的一些重要標準
物理層的一些標準和協議早在OSI/TC97/C16 分技術委員會成立之前就已制定並在應用了,OSI也制定了一些標準並採用了一些已有的成果.下面將一些重要的標準列出,以便讀者查閱.ISO2110:稱爲"數據通信----25芯DTE/DCE接口連接器和插針分配"。它與EIA(美國電子工業協會)的"RS-232-C"基本兼容。ISO2593:稱爲"數據通信----34芯DTE/DCE----接口連接器和插針分配"。ISO4092:稱爲"數據通信----37芯DTE/DEC----接口連接器和插針分配".與EIARS-449兼容。CCITT V.24:稱爲"數據終端設備(DTE)和數據電路終接設備之間的接口電路定義表".其功能與EIARS-232-C及RS-449兼容於100序列線上。

數據鏈路層

數據鏈路可以粗略地理解爲數據通道。物理層要爲終端設備間的數據通信提供傳輸媒體及其連接.媒體是長期的,連接是有生存期的.在連接生存期內,收發兩端可以進行不等的一次或多次數據通信.每次通信都要經過建立通信聯絡和拆除通信聯絡兩過程.這種建立起來的數據收發關係就叫作數據鏈路.而在物理媒體上傳輸的數據難免受到各種不可靠因素的影響而產生差錯,爲了彌補物理層上的不足,爲上層提供無差錯的數據傳輸,就要能對數據進行檢錯和糾錯.數據鏈路的建立,拆除,對數據的檢錯,糾錯是數據鏈路層的基本任務。
2.1鏈路層的主要功能
鏈路層是爲網絡層提供數據傳送服務的,這種服務要依靠本層具備的功能來實現。鏈路層應具備如下功能:
2.1.1鏈路連接的建立,拆除,分離。
2.1.2幀定界幀同步。鏈路層的數據傳輸單元是幀,協議不同,幀的長短和界面也有差別,但無論如何必須對幀進行定界。
2.1.3順序控制,指對幀的收發順序的控制。
2.1.4差錯檢測和恢復。還有鏈路標識,流量控制等等.差錯檢測多用方陣碼校驗和循環碼校驗來檢測信道上數據的誤碼,而幀丟失等用序號檢測.各種錯誤的恢復則常靠反饋重發技術來完成。
2.2數據鏈路層的主要協議
數據鏈路層協議是爲發對等實體間保持一致而制定的,也爲了順利完成對網絡層的服務。主要協議如下:
2.2.1 ISO1745--1975:"數據通信系統的基本型控制規程".這是一種面向字符的標準,利用10個控制字符完成鏈路的建立,拆除及數據交換.對幀的收發情況及差錯恢復也是靠這些字符來完成.ISO1155, ISO1177, ISO2626, ISO2629等標準的配合使用可形成多種鏈路控制和數據傳輸方式.
2.2.2 ISO3309--1984:稱爲"HDLC 幀結構".ISO4335--1984:稱爲"HDLC 規程要素 "。ISO7809--1984:稱爲"HDLC 規程類型彙編"。這3個標準都是爲面向比特的數據傳輸控制而制定的。有人習慣上把這3個標準組合稱爲高級鏈路控制規程.
2.2.3 ISO7776:稱爲"DTE數據鏈路層規程".與CCITT X.25LAB"平衡型鏈路訪問規程"相兼容。
2.3鏈路層產品
獨立的鏈路產品中最常見的當屬網卡,網橋也是鏈路產品。MODEM的某些功能有人認爲屬於鏈路層,對此還有爭議.數據鏈路層將本質上不可靠的傳輸媒體變成可靠的傳輸通路提供給網絡層。在IEEE802.3情況下,數據鏈路層分成了兩個子層,一個是邏輯鏈路控制,另一個是媒體訪問控制。下圖所示爲IEEE802.3LAN體系結構
AUI=連接單元接口 PMA=物理媒體連接
MAU=媒體連接單元 PLS=物理信令
MDI=媒體相關接口

網絡層

網絡層的產生也是網絡發展的結果.在聯機系統和線路交換的環境中,網絡層的功能沒有太大意義.當數據終端增多時。它們之間有中繼設備相連.此時會出現一臺終端要求不只是與唯一的一臺而是能和多臺終端通信的情況,這就是產生了把任意兩臺數據終端設備的數據鏈接起來的問題,也就是路由或者叫尋徑。另外,當一條物理信道建立之後,被一對用戶使用,往往有許多空閒時間被浪費掉.人們自然會希望讓多對用戶共用一條鏈路,爲解決這一問題就出現了邏輯信道技術和虛擬電路技術。
3.1網絡層主要功能
網絡層爲建立網絡連接和爲上層提供服務,應具備以下主要功能:
3.1.1路由選擇和中繼.
3.1.2激活,終止網絡連接.
3.1.3在一條數據鏈路上覆用多條網絡連接,多采取分時複用技術 .
3.1.4差錯檢測與恢復.
3.1.5排序,流量控制.
3.1.6服務選擇.
3.1.7網絡管理.
3.2網絡層標準簡介
網絡層的一些主要標準如下:
3.2.1 ISO.DIS8208:稱爲"DTE用的X.25分組級協議"
3.2.2 ISO.DIS8348:稱爲"CO 網絡服務定義"(面向連接)
3.2.3 ISO.DIS8349:稱爲"CL 網絡服務定義"(面向無連接)
3.2.4 ISO.DIS8473:稱爲"CL 網絡協議"
3.2.5 ISO.DIS8348:稱爲"網絡層尋址"
3.2.6 除上述標準外,還有許多標準。這些標準都只是解決網絡層的部分功能,所以往往需要在網絡層中同時使用幾個標準才能完成整個網絡層的功能.由於面對的網絡不同,網絡層將會採用不同的標準組合.
在具有開放特性的網絡中的數據終端設備,都要配置網絡層的功能.現在市場上銷售的網絡硬設備主要有網關路由器.

傳輸層

傳輸層是兩臺計算機經過網絡進行數據通信時,第一個端到端的層次,具有緩衝作用。當網絡層服務質量不能滿足要求時,它將服務加以提高,以滿足高層的要求;當網絡層服務質量較好時,它只用很少的工作。傳輸層還可進行復用,即在一個網絡連接上創建多個邏輯連接。 傳輸層也稱爲運輸層.傳輸層只存在於端開放系統中,是介於低3層通信子網系統和高3層之間的一層,但是很重要的一層.因爲它是源端到目的端對數據傳送進行控制從低到高的最後一層.
有一個既存事實,即世界上各種通信子網在性能上存在着很大差異.例如電話交換網,分組交換網,公用數據交換網,局域網等通信子網都可互連,但它們提供的吞吐量,傳輸速率,數據延遲通信費用各不相同.對於會話層來說,卻要求有一性能恆定的界面.傳輸層就承擔了這一功能.它採用分流/合流,複用/解複用技術來調節上述通信子網的差異,使會話層感受不到.
此外傳輸層還要具備差錯恢復,流量控制等功能,以此對會話層屏蔽通信子網在這些方面的細節與差異.傳輸層面對的數據對象已不是網絡地址主機地址,而是和會話層的界面端口.上述功能的最終目的是爲會話提供可靠的,無誤的數據傳輸.傳輸層的服務一般要經歷傳輸連接建立階段,數據傳送階段,傳輸連接釋放階段3個階段纔算完成一個完整的服務過程.而在數據傳送階段又分爲一般數據傳送和加速數據傳送兩種。傳輸層服務分成5種類型.基本可以滿足對傳送質量,傳送速度,傳送費用的各種不同需要.傳輸層的協議標準有以下幾種:
ISO8072:稱爲"面向連接的傳輸服務定義"
ISO8072:稱爲"面向連接的傳輸協議規範"

會話層

會話層提供的服務可使應用建立和維持會話,並能使會話獲得同步。會話層使用校驗點可使通信會話在通信失效時從校驗點繼續恢復通信。這種能力對於傳送大的文件極爲重要。會話層,表示層,應用層構成開放系統的高3層,面對應用進程提供分佈處理,對話管理,信息表示,恢復最後的差錯等.
會話層同樣要擔負應用進程服務要求,而運輸層不能完成的那部分工作,給運輸層功能差距以彌補.主要的功能是對話管理,數據流同步和重新同步。要完成這些功能,需要由大量的服務單元功能組合,已經制定的功能單元已有幾十種.現將會話層主要功能介紹如下.
5.1爲會話實體間建立連接。
爲給兩個對等會話服務用戶建立一個會話連接,應該做如下幾項工作:
5.1.1將會話地址映射爲運輸地址
5.1.2選擇需要的運輸服務質量參數(QOS)
5.1.3對會話參數進行協商
5.1.3識別各個會話連接
5.1.4傳送有限的透明用戶數據
5.2數據傳輸階段
這個階段是在兩個會話用戶之間實現有組織的,同步的數據傳輸.用戶數據單元爲SSDU,而協議數據單元爲SPDU.會話用戶之間的數據傳送過程是將SSDU轉變成SPDU進行的.
5.3連接釋放
連接釋放是通過"有序釋放","廢棄","有限量透明用戶數據傳送"等功能單元來釋放會話連接的.會話層標準爲了使會話連接建立階段能進行功能協商,也爲了便於其它國際標準參考和引用,定義了12種功能單元.各個系統可根據自身情況和需要,以核心功能服務單元爲基礎,選配其他功能單元組成合理的會話服務子集.會話層的主要標準有"DIS8236:會話服務定義"和"DIS8237:會話協議規範".

表示層

表示層的作用之一是爲異種機通信提供一種公共語言,以便能進行互操作。這種類型的服務之所以需要,是因爲不同的計算機體系結構使用的數據表示法不同。例如,IBM主機使用EBCDIC編碼,而大部分PC機使用的是ASCII碼。在這種情況下,便需要會話層來完成這種轉換。
通過前面的介紹,我們可以看出,會話層以下5層完成了端到端的數據傳送,並且是可靠,無差錯的傳送.但是數據傳送只是手段而不是目的,最終是要實現對數據的使用.由於各種系統對數據的定義並不完全相同,最易明白的例子是鍵盤,其上的某些鍵的含義在許多系統中都有差異.這自然給利用其它系統的數據造成了障礙.表示層應用層就擔負了消除這種障礙的任務.
對於用戶數據來說,可以從兩個側面來分析,一個是數據含義被稱爲語義,另一個是數據的表示形式,稱做語法.像文字,圖形,聲音,文種,壓縮,加密等都屬於語法範疇.表示層設計了3類15種功能單位,其中上下文管理功能單位就是溝通用戶間的數據編碼規則,以便雙方有一致的數據形式,能夠互相認識.ISO表示層爲服務,協議,文本通信符制定了DP8822,DP8823,DIS6937/2等一系列標準.

應用層

應用層嚮應用程序提供服務,這些服務按其嚮應用程序提供的特性分成組,並稱爲服務元素。有些可爲多種應用程序共同使用,有些則爲較少的一類應用程序使用。應用層是開放系統的最高層,是直接爲應用進程提供服務的。其作用是在實現多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務.其服務元素分爲兩類:公共應用服務元素CASE和特定應用服務元素SASE.CASE提供最基本的服務,它成爲應用層中任何用戶和任何服務元素的用戶,主要爲應用進程通信,分佈系統實現提供基本的控制機制.特定服務SASE則要滿足一些特定服務,如文卷傳送,訪問管理,作業傳送,銀行事務,訂單輸入等.
這些將涉及到虛擬終端,作業傳送與操作,文卷傳送及訪問管理,遠程數據庫訪問,圖形核心系統,開放系統互連管理等等.應用層的標準有DP8649"公共應用服務元素",DP8650"公共應用服務元素用協議",文件傳送,訪問和管理服務及協議.

總結

OSI七層模型是一個理論模型,實際應用則千變萬化,因此更多把它作爲分析、評判各種網絡技術的依據;對大多數應用來說,只將它的協議族(即協議堆棧)與七層模型作大致的對應,看看實際用到的特定協議是屬於七層中某個子層,還是包括了上下多層的功能。

好處

1.使人們容易探討和理解協議的許多細節。
2.在各層間標準化接口,允許不同的產品只提供各層功能的一部分,(如路由器在一到三層),或者只提供協議功能的一部分。(如Win95中的Microsoft TCP/IP)
3. 創建更好集成的環境。
4. 減少複雜性,允許更容易編程改變或快速評估。
5. 用各層的headers和trailers排錯。
6.較低的層爲較高的層提供服務。
7. 把複雜的網絡劃分成爲更容易管理的層。
參考資料

https://baike.baidu.com/item/開放系統互連參考模型/8851889?fromtitle=OSI七層模型&fromid=9763441

https://baike.baidu.com/item/開放系統互連參考模型/8851889?fromtitle=OSI七層模型&fromid=9763441

計算機網絡基礎——網絡分層和IP地址

協議

在因特網中,凡是涉及兩個或者多個遠程通信實體的所有活動都首協議的制約。
一個協議定義了在兩個或多個通信實體之間交換的報文格式和次序,以及報文發送、接受一條報文或其他事件所採取的動作。

簡單而說,協議就像人類之間通信的語言,它就像機器之間通信的方式和語言。

協議三要素
  • 語法:就是一段內容要符合一定的規則和格式
  • 語義:就是這一段內容要代表某種意義
  • 順序:就是先幹啥,後幹啥
網絡分層

我們知道,網絡是有分層的,可是爲什麼要分層呢?因爲,是個複雜的程序都要分層。
我們可以這樣來想,想象網絡包就是一段Buffer,或者一塊內存,它是有格式的,同時有一個可以跑在電腦,跑在服務器,跑在交換機,跑在路由器上的程序,程序可以處理這個網絡包,我們知道,一臺機器一般有很多個網口,從某一個網口拿進來一個網絡包,程序處理後,再出另外一個口出去。說了簡單,可是網絡包很複雜,程序也很複雜。
複雜的程序都要分層,這是程序設計的要求。讓每一層專注做本層的事情。

而且,網絡每一層協議負責的工作都是不一樣的,也就對應了有不同的設備來處理

這裏寫圖片描述

OSI七層模型:

  • 物理層:包含了多種與物理介質相關的協議,這些物理介質用以支撐TCP/IP通信。以二進制數據形式在物理媒體上傳輸數據。
  • 數據鏈路層:包含了控制物理層的協議:如何訪問和共享介質,怎樣標識介質上的設備,以及在介質上發送數據之前如何完成數據成幀。典型的數據鏈路協議有IEEE802.3/以太網,幀中繼,ATM以及SONET
  • 網絡層:主要負責定義數據包格式和地址格式,爲經過邏輯網絡路徑的數據進行路由選擇,IP,ICMP,RIP,OSPF等
  • 傳輸層:指定了控制網絡層的協議。這就像數據鏈路層控制物理層一樣,傳輸層和數據鏈路層都定義了流控和差錯機制。二者不同在於,數據鏈路層協議強調控制數據鏈路上的流量,即連接兩臺設備的物理介質上的流量;而傳輸層控制邏輯鏈路上的流量,即兩臺設備的端到端的連接,這種邏輯連接可能跨越一連串數據鏈路。
  • 會話層:解除或提供兩進程之間建立、維護和結束會話連接的功能;提供交互會話的管理功能,如三種數據流方向的控制,即一路交互、兩路交替和兩路同時會話模式。沒有協議
  • 表示層:數據格式化,代碼轉換,數據加密。沒有協議
  • 應用層:最常用的服務是向用戶提供訪問網絡的接口:文件傳輸,電子郵件,虛擬終端等。HTTP,FTP等

現在,我們常用的是TCP/IP四層模型:

  • 物理層:中繼器,集線器,雙絞線都工作在物理層
  • 網絡層:IP,ICMP,ARP,等等
  • 傳輸層:TCP,UDP
  • 應用層:HTTP,TFTP,FTP等等

知道了這些之後,我們前面有提到程序,程序來處理網絡包,那麼程序是如何工作的呢?

這裏寫圖片描述

當我點擊一個網頁想要瀏覽的時候,首先會發送HTTP請求,發送請求,在網絡上跑的肯定也是報文嘛,這個時候,報文會加上HTTP頭和HTTP正文,然後往傳輸層發送,因爲這裏是瀏覽網頁,傳輸層上會加上tcp頭和端口號,然後發往網絡層,在這一層,報文會加上IP頭,裏面含有目標IP地址,然後發往物理層,在物理層,會加上MAC頭,裏面含有目標MAC或者網關MAC還有源MAC地址。

之後這個包就在網絡中傳輸。

當一個網絡包從一個網口經過的時候,首先看看看要不要請進來,處理一下。
拿進來以後,就交給一段程序進行處理。
首先,會摘掉MAC頭,看一下是否和這個網口的MAC地址相符,如果不是,就丟棄,不處理。如果MAC地址和網口的相符,就說明是發給它的,於是它就會繼續摘掉IP頭,看看到底是發送給自己的,還是希望自己轉發出去的。

如果目標IP地址不是自己的,那麼就是轉發出去的;如果IP地址是自己的,那麼就是發給自己的,就會進行下一層的處理,我們這裏是TCP的,所以會摘掉TCP頭,這個時候,就需要查看TCP的頭,看這是一個發起,還是一個應答,又或者是一個正常的數據包,然後分別由不同的邏輯進行處理。

如果是發起或者應答,接下來可能要發送一個回覆包;如果是一個正常的數據包,就需要交給上層進行處理,這個時候會交給一個應用來進行處理,可是交給哪個應用呢?這個時候,TCP的頭裏面就有端口號,不同的應用監聽不同的端口號。如果發現瀏覽器應用在監聽這個端口,那麼程序就會把包發給瀏覽器,交給瀏覽器處理。

瀏覽器自然是解析HTML,顯示頁面出來。

要記住一點:只要是在網絡上跑的包,都是完整的。可以有下層沒上層,絕對不可能有上層沒下層。

IP地址

IP地址是一個網卡在網絡中的通訊地址,相當於我們現實世界的門牌號碼。

IP地址分類

IP地址分爲5類

這裏寫圖片描述

對於A,B,C類來說,主要分爲兩部分:網絡號和主機號

這裏寫圖片描述

A類IP地址

一個A類IP地址是指, 在IP地址的四段號碼中,第一段號碼爲網絡號碼,剩下的三段號碼爲本地計算機的號碼。如果用二進制表示IP地址的話,A類IP地址就由1字節的網絡地址和3字節主機地址組成,網絡地址的最高位必須是“0”。A類IP地址中網絡的標識長度爲8位,主機標識的長度爲24位,A類網絡地址數量較少,有126個網絡,每個網絡可以容納主機數達1600多萬臺。

A類IP地址 地址範圍1.0.0.1到127.255.255.254 [1] (二進制表示爲:00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111110)。最後一個是廣播地址。

A類IP地址的子網掩碼爲255.0.0.0,每個網絡支持的最大主機數爲256的3次方-2=16777214臺。

B類IP地址

一個B類IP地址是指,在IP地址的四段號碼中,前兩段號碼爲網絡號碼。如果用二進制表示IP地址的話,B類IP地址就由2字節的網絡地址和2字節主機地址組成,網絡地址的最高位必須是“10”。B類IP地址中網絡的標識長度爲16位,主機標識的長度爲16位,B類網絡地址適用於中等規模的網絡,有16384個網絡,每個網絡所能容納的計算機數爲6萬多臺。

B類IP地址地址範圍128.0.0.1-191.255.255.254 [3] (二進制表示爲:10000000 00000000 00000000 00000001----10111111 11111111 11111111 11111110)。 最後一個是廣播地址。

B類IP地址的子網掩碼爲255.255.0.0,每個網絡支持的最大主機數爲256的2次方-2=65534臺。

C類IP地址

一個C類IP地址是指,在IP地址的四段號碼中,前三段號碼爲網絡號碼,剩下的一段號碼爲本地計算機的號碼。如果用二進制表示IP地址的話,C類IP地址就由3字節的網絡地址和1字節主機地址組成,網絡地址的最高位必須是“110”。C類IP地址中網絡的標識長度爲24位,主機標識的長度爲8位,C類網絡地址數量較多,有209萬餘個網絡。適用於小規模的局域網絡,每個網絡最多隻能包含254臺計算機。

C類IP地址範圍192.0.0.1-223.255.255.254 [3] (二進制表示爲: 11000000 00000000 00000000 00000001 - 11011111 11111111 11111111 11111110)。

C類IP地址的子網掩碼爲255.255.255.0,每個網絡支持的最大主機數爲256-2=254臺

D類IP地址

D類IP地址在歷史上被叫做多播地址(multicast address),即組播地址。在以太網中,多播地址命名了一組應該在這個網絡中應用接收到一個分組的站點。多播地址的最高位必須是“1110”,範圍從224.0.0.0到239.255.255.255。

特殊的網址

每一個字節都爲0的地址(“0.0.0.0”)對應於當前主機;
IP地址中的每一個字節都爲1的IP地址(“255.255.255.255”)是當前子網的廣播地址;
IP地址中凡是以“11110”開頭的E類IP地址都保留用於將來和實驗使用。
IP地址中不能以十進制“127”作爲開頭,該類地址中數字127.0.0.1到127.255.255.255用於迴路測試,如:127.0.0.1可以代表本機IP地址,用“http://127.0.0.1”就可以測試本機中配置的Web服務器。
網絡ID的第一個6位組也不能全置爲“0”,全“0”表示本地網絡。

我們可以看到,C類地址的最大主機數太少了,而A類又很多,會造成浪費,於是出現了一個協議:無類型域間選路(CIDR)
它將32位的IP地址分爲兩部分,前一部分是網絡號,後面是主機號
如:10.100.122.2/24 ,這個IP地址後面有一個斜槓,斜槓後面有一個數字24,這個24就代表這個IP地址前24位是網絡號,後8爲是主機號。與此對應的子網掩碼是255.255.255.0。在10.100.122.XXX這個網絡段中,有一個IP地址比較特殊:10.100.122.255,這個是廣播地址,如果發送一個包,包的目標IP是它,那麼在10.100.122.xxx這個網絡段的所有主機都能接收到這個包。

當我發送一個包的時候,必須在同一網段下,才能接收到。
如:192.168.1.1/24 發一個包給 192.168.1.121/26 ,是不可以的。

ICMP協議
ping是基於ICMP協議工作的,ICMP,互聯網控制報文協議。
ICMP報文是封裝在IP包裏面的,它的報文類型有很多,不同類型有不同的代碼,最常用的類型是主動請求爲8,和主動請求的應答爲0。

  • 查詢報文類型:常用的ping就是查詢報文類型,是一種主動請求,並且獲得主動應答的ICMP協議。
  • 差錯報文類型:當異常情況發生時,來報告發生了不好的事情。
    • 第 一種是終點不可達:網絡不可達的代碼爲0,主機不可達的代碼爲1,協議不可達的代碼爲2,端口不可達的代碼爲3,需要進行分片設置的代碼爲4。
    • 第二種:源站抑制,也就是讓源站放慢發送速度
    • 第三種:時間超時,也就是超過網絡包的生產時間還沒有達到
    • 第四種:路由重定向,也就是繞路了,讓下一次發給另一個路由器

ping使用的是查詢報文,Traceroute使用的是差錯報文

MAC地址

MAC地址是一個網卡的物理地址,用十六進制,6個byte表示。MAC地址是全局唯一的,不會有兩個網卡有相同的MAC地址。

那麼我們爲什麼不用MAC地址進行通信呢?

因爲MAC地址更像是一個人的身份證,是一個標識,它沒有遠程定位的功能。一個網絡包從源到目標,中間會經過很多路由器等,MAC地址的通信範圍很小,侷限在一個子網裏面,找到MAC地址,就考喊,也就是廣播,當一個網絡包要經過很多子網的時候,MAC地址就不能通信了。

MAC頭和IP頭

這裏寫圖片描述

在MAC頭裏面,先是目標MAC地址,然後是源MAC地址,然後有一個協議類型,用來說明裏面是IP協議。

IP頭裏面:
版本:IPv4還是IPv6
TTL:最大生存時間,當一個網絡包在網絡上轉發時,每到下一跳是,這個值會加1,當達到255時,說明包不可達,包被丟棄。這也一定程度上避免網絡風暴。
協議:說明是TCP協議還是UDP協議

TCP(傳輸控制協議)

TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議,由IETF的RFC 793定義。在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能,用戶數據報協議(UDP)是同一層內 [1]  另一個重要的傳輸協議。在因特網協議族(Internet protocol suite)中,TCP層是位於IP層之上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。 [1] 
應用層向TCP層發送用於網間傳輸的、用8位字節表示的數據流,然後TCP把數據流分區成適當長度的報文段(通常受該計算機連接的網絡的數據鏈路層的最大傳輸單元( [1]  MTU)的限制)。之後TCP把結果包傳給IP層,由它來通過網絡將包傳送給接收端實體 [1]  的TCP層。TCP爲了保證不發生丟包,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的包發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據包就被假設爲已丟失將會被進行重傳。TCP用一個校驗和函數來檢驗數據是否有錯誤;在發送和接收時都要計算校驗和。 [1] 
軟件名稱
傳輸控制協議
英文名
Transmission Control Protocol
簡    稱
TCP
行業標準
IETF RFC 793
應用範圍
Internet

TCP網絡協議

TCP功能

當應用層向TCP層發送用於網間傳輸的、用8位字節表示的數據流,TCP則把數據流分割成適當長度的報文段,最大傳輸段大小(MSS)通常受該計算機連接的網絡的數據鏈路層的最大傳送單元(MTU)限制。之後TCP把數據包傳給IP層,由它來通過網絡將包傳送給接收端實體的TCP層。
TCP爲了保證報文傳輸的可靠 [1]  ,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的字節發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據(假設丟失了)將會被重傳。
  • 在數據正確性與合法性上,TCP用一個校驗和函數來檢驗數據是否有錯誤,在發送和接收時都要計算校驗和;同時可以使用md5認證對數據進行加密。
  • 在保證可靠性上,採用超時重傳和捎帶確認機制。
  • 在流量控制上,採用滑動窗口 [1]  協議,協議中規定,對於窗口內未經確認的分組需要重傳。
在擁塞控制上,採用廣受好評的TCP擁塞控制算法(也稱AIMD算法)。該算法主要包括三個主要部分:1)加性增、乘性減;2)慢啓動;3)對超時事件做出反應。

TCP實行標準

TCP/IP(Transmission Control Protocol/Internet Protocol) 即傳輸控制協議/網間協議,是一個工業標準的協議集,它是爲廣域網(WAN)設計的。它是由ARPANET網的研究機構發展起來的。
TCP/IP的標準在一系列稱爲RF [1]  C的文檔中公佈。文檔由技術專家、特別工作組、或RFC編輯修訂。公佈一個文檔時,該文檔被賦予一個RFC編號,如RFC959(FTP的說明文檔)、RFC793(TCP的說明文檔)、RFC791(IP的說明文檔)等。最初的RFC一直保留而從來不會被更新, [1]  如果修改了該文檔,則該文檔又以一個新號碼公佈。因此,重要的是要確認你擁有了關於某個專題的最新RFC文檔。通常在RFC的開頭部分,有相關RFC的更新(update)、排錯(errata)、作廢(obsolete)信息,提示讀者信息的時效性。

TCP首部格式

TCP的首部格式圖右圖所示:
---Source Port是源端口,16位。
TCP首部 TCP首部
---Destination Port是目的端口,16位。
---Sequence Number是發送數據包中的第一個字節的序列號,32位。
---Acknowledgment Number是確認序列號,32位。
---Data Offset是數據偏移,4位,該字段的值是TCP首部(包括選項)長度除以4。 [1] 
---標誌位: 6位,URG表示Urgent Pointer字段有意義:
ACK表示Acknowledgment Number字段有意義
PSH表示Push功能,RST表示復位TCP連接
SYN表示SYN報文(在建立TCP連接的時候使用)
FIN表示沒有數據需要發送了(在關閉TCP連接的時候使用)
Window表示接收緩衝區的空閒空間,16位,用來告訴TCP連接對端自己能夠接收的最大數據長度。
---Checksum是校驗和,16位。
---Urgent Pointers是緊急指針,16位,只有URG標誌位被設置時該字段纔有意義,表示緊急數據相對序列號(Sequence Number字段的值)的偏移。

TCP連接建立

TCP是因特網中的傳輸層協議,使用三次握手協議建立連接。當主動方發出SYN連接請求後,等待對方回答
TCP的三次握手 TCP的三次握手
SYN+ACK [1]  ,並最終對對方的 SYN 執行 ACK 確認。這種建立連接的方法可以防止產生錯誤的連接,TCP使用的流量控制協議是可變大小的滑動窗口協議。 [1] 
TCP三次握手的過程如下:
  1. 客戶端發送SYN(SEQ=x)報文給服務器端,進入SYN_SEND狀態。
  2. 服務器端收到SYN報文,迴應一個SYN (SEQ=y)ACK(ACK=x+1)報文,進入SYN_RECV狀態。
  3. 客戶端收到服務器端的SYN報文,迴應一個ACK(ACK=y+1)報文,進入Established狀態。
三次握手完成,TCP客戶端和服務器端成功地建立連接,可以開始傳輸數據了。

TCP連接終止

建立一個連接需要三次握手,而終止一個連接要經過四次握手,這是由TCP的半關閉(half-close)造成的。具體過程如下圖所示。 [1] 
TCP連接的終止 TCP連接的終止
(1) 某個應用進程首先調用close,稱該端執行“主動關閉”(active close)。該端的TCP於是發送一個FIN分節,表示數據發送完畢。
(2) 接收到這個FIN的對端執行 “被動關閉”(passive close),這個FIN由TCP確認。
注意:FIN的接收也作爲一個文件結束符(end-of-file)傳遞給接收端應用進程,放在已排隊等候該應用進程接收的任何其他數據之後,因爲,FIN的接收意味着接收端應用進程在相應連接上再無額外數據可接收。
(3) 一段時間後,接收到這個文件結束符的應用進程將調用close關閉它的套接字。這導致它的TCP也發送一個FIN。
(4) 接收這個最終FIN的原發送端TCP(即執行主動關閉的那一端)確認這個FIN。 [1] 
既然每個方向都需要一個FIN和一個ACK,因此通常需要4個分節。
注意:
(1) “通常”是指,某些情況下,步驟1的FIN隨數據一起發送,另外,步驟2和步驟3發送的分節都出自執行被動關閉那一端,有可能被合併成一個分節。 [2] 
(2) 在步驟2與步驟3之間,從執行被動關閉一端到執行主動關閉一端流動數據是可能的,這稱爲“半關閉”(half-close)。
(3) 當一個Unix進程無論自願地(調用exit或從main函數返回)還是非自願地(收到一個終止本進程的信號)終止時,所有打開的描述符都被關閉,這也導致仍然打開的任何TCP連接上也發出一個FIN。
無論是客戶還是服務器,任何一端都可以執行主動關閉。通常情況是,客戶執行主動關閉,但是某些協議,例如,HTTP/1.0卻由服務器執行主動關閉。 [2] 

TCP可靠性實現

TCP可靠性

 TCP提供一種面向連接的、可靠的字節流服務。面向連接意味着兩個使用TCP的應用(通常是一個客戶和一個服務器)在彼此交換數據包之前必須先建立一個TCP連接。這一過程與打電話很相似,先撥號振鈴,等待對方摘機說“喂”,然後才說明是誰。在一個TCP連接中,僅有兩方進行彼此通信。廣播和多播不能用於TCP。
TCP通過下列方式來提供可靠性: [1] 
1.應用數據被分割成TCP認爲最適合發送的數據塊。這和UDP完全不同,應用程序產生的數據長度將保持不變。由TCP傳遞給IP的信息單位稱爲報文段或段(segment)。
2.當TCP發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。當TCP收到發自TCP連接另一端的數據,它將發送一個確認。TCP有延遲確認的功能,在此功能沒有打開,則是立即確認。功能打開,則由定時器觸發確認時間點。
3.TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段(希望發端超時並重發)。
4.既然TCP報文段作爲IP數據報來傳輸,而IP數據報的到達可能會失序,因此TCP報文段的到達也可能會失序。如果必要,TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層。
5.既然IP數據報會發生重複,TCP的接收端必須丟棄重複的數據。 [2] 
6.TCP還能提供流量控制。TCP連接的每一方都有固定大小的緩衝空間。TCP的接收端只允許另一端發送接收端緩衝區所能接納的數據。這將防止較快主機致使較慢主機的緩衝區溢出。
兩個應用程序通過TCP連接交換8bit字節構成的字節流。TCP不在字節流中插入記錄標識符。我們將這稱爲字節流服務(bytestreamservice)。如果一方的應用程序先傳10字節,又傳20字節,再傳50字節,連接的另一方將無法瞭解發方每次發送了多少字節。只要自己的接收緩存沒有塞滿,TCP 接收方將有多少就收多少。一端將字節流放到TCP連接上,同樣的字節流將出現在TCP連接的另一端。
另外,TCP對字節流的內容不作任何解釋。TCP不知道傳輸的數據字節流是二進制數據,還是ASCⅡ字符、EBCDIC字符或者其他類型數據。對字節流的解釋由TCP連接雙方的應用層解釋。 [1]  [2] 
這種對字節流的處理方式與Unix操作系統對文件的處理方式很相似。Unix的內核對一個應用讀或寫的內容不作任何解釋,而是交給應用程序處理。對Unix的內核來說,它無法區分一個二進制文件與一個文本文件。

TCP重傳策略

TCP協議用於控制數據段是否需要重傳的依據是設立重發定時器。在發送一個數據段的同時啓動一個重傳,如果在重傳超時前收到確認(Acknowlegement)就關閉該重傳,如 [2]  果重傳超時前沒有收到確認,則重傳該數據段。在選擇重發時間的過程中,TCP必須具有自適應性。它需要根據互聯網當時的通信情況,給出合適的重發時間。
這種重傳策略的關鍵是對定時器初值的設定。採用較多的算法是Jacobson於1988年提出的一種不斷調整超時時間間隔的動態算法。其工作原理是:對每條連接TCP都保持一個 [2]  變量RTT(Round Trip Time),用於存放當前到目的端往返所需要時間最接近的估計值。當發送一個數據段時,同時啓動連接的定時器,如果在定時器超時前確認到達,則記錄所需要的時間(M),並修正 [2]  RTT的值,如果定時器超時前沒有收到確認,則將RTT的值增加1倍。通過測量一系列的RTT(往返時間)值,TCP協議可以估算數據包重發前需要等待的時間。在估計該連接所需的當前延遲時通常利用一些統計學的原理和算法(如Karn算法),從而得到TCP重發之前需要等待的時間值。

TCP窗口確認

TCP的一項功能就是確保每個數據段都能到達目的地。位於目的主機的TCP服務對接受到的數據進行確認,並向源應用程序發送確認信息。 [2] 
TCP的狀態機 TCP的狀態機
使用數據報頭序列號以及確認號來確認已收到包含在數據段的相關的數據字節。
TCP在發回源設備的數據段中使用確認號,指示接收設備期待接收的下一字節。這個過程稱爲期待確認 [2] 
源主機在收到確認消息之前可以傳輸的數據的大小稱爲窗口大小。用於管理丟失數據和流量控制。這些變化如右圖所示。 [2] 

TCP配置TCP

修改建立TCP連接的超時時間
建立TCP連接需要經過三次握手:主動端先發送SYN報文,被動放回應SYN+ACK報文,然後主動端再回應ACK。 [2] 
l在主動端發送SYN後,如果被動端一直不迴應SYN+ACK報文,主動端會不斷的重傳SYN報文直到超過一定的重傳次數或超時時間。 [2] 
l在主動端發送SYN後,被動端迴應SYN+ACK報文,但主動端不再回復ACK,被動端也會一直重傳直到超過一定的重傳次數或超時時間。(SYN報文攻擊會出現這種情況) [2] 
可以通過以下命令配置SYN報文的超時時間(發送SYN報文到三次握手成功的最大時間),也就是建立TCP連接的超時時間。
命令
作用
R(config)#ip tcp syntime-out seconds
修改建立TCP連接的超時時間。
單位秒,取值範圍5-300,缺省值20
使用no ip tcp syntime-out命令恢復參數缺省值。
修改緩衝區大小
TCP的接收緩衝區是用來緩存從對端接收到的數據,這些數據後續會被應用程序讀取。一般情況下,TCP報文的窗口值反映接收緩衝區的空閒空間的大小。對於帶寬比較大、有大批量數據的連接,增大接收緩衝區的大小可以顯著提供TCP傳輸性能。TCP的發送緩衝區是用來緩存應 [2]  用程序的數據,發送緩衝區的每個字節都有序列號,被應答確認的序列號對應的數據會從發送緩衝區刪除掉。增大發送緩衝區可以提高TCP跟應用程序的交互能力,也因此會提高性能。但是增大接收和發送緩衝區會導致TCP佔用比較多的內存。
命令
作用
R (config)#ip tcp window-size size
修改TCP連接的接收和發送緩衝區大小。
單位字節,取值範圍0-65535,缺省值4096。
使用no ip tcp window-size命令恢復接收和發送緩衝區大小爲缺省值。
禁止端口不可達時的重置報文
TCP模塊在分發TCP報文時,如果找不到該報文所屬的TCP連接會主動回覆一個reset報文以終止對端的TCP連接。攻擊者可能利用大量的端口不可達 [2]  的TCP報文對設備進行攻擊。
可以使用以下命令禁止/恢復在收到端口不可達的TCP報文時發送reset報文。
命令
作用
R (config)#ip tcp not-send-rst
禁止在接收到端口不可達的TCP報文時發送reset報文。
使用no ip tcp not-send-rst命令恢復發送reset報文。
限制TCP連接的MSS的最大值
MSS是最大傳輸段大小的縮寫,指一個TCP報文的數據載荷的最大長度,不包括TCP選項。
在TCP建立連接的三次握手中,有一種很重要的工作那就是進行MSS協商。連接的雙方都在SYN報文中增加MSS選項,其選項值表示本端 [2]  最大能接收的段大小,即對端最大能發送的段大小。連接的雙方取本端發送的MSS值和接收對端的MSS值的較小者作爲本連接最大傳輸段大小。
發送SYN報文時的MSS選項值的計算方法如下。
l非直連網絡中:mss = 默認值 [2]  536。
l直連網絡中:mss = 對端ip地址對應的出口的MTU - 20字節ip頭 - 20字節tcp頭。
  一般來說如果出口配置的某些應用影響了接口的mtu,那麼該應用會相應的設置mtu,如隧道口,vpn口等。
到這裏得到的rmss值就是要發送的syn報文mss選項的值 [2]  。舉例:一般情況下在直連網絡中建立bgp鄰居,那麼該連接的發送的mss爲1500 – 20 – 20 – 20 = 1440。
ip tcp mss命令的作用是限制即將建立的TCP連接的MSS的最大值。任何新建立的連接協商的MSS值不能超過配置的值。
命令
作用
R (config)#ip tcp mss max-segment-size
限制TCP連接的MSS的最大值。
單位爲字節,取值範圍68-10000。
使用no ip tcp mss命令取消此限制。
啓用PMTU發現功能
TCP的路徑最大傳輸單元(PMTU)發現功能是按RF [2]  C1191實現的,這個功能可以提高網絡帶寬的利用率。當用戶使用TCP來批量傳輸大塊數據時,該功能可以使傳輸性能得到明顯提升。
命令
作用
R(config)#ip tcp path-mtu-discovery [ age-timer minutes| age-timer infinite ]
啓用PMTU發現功能。
age-timer minutes:TCP在發現PMTU後,重新進行探測的時間間隔。單位分鐘,取值範圍10-30。缺省值10。
age-timer infinite:TCP在發現PMTU後,不重新探測。
按RFC1191的描述,TCP在發現PMTU後,隔一段時間可以使用更大的MSS來探測新的PMTU。這個時間間隔就是使用參數age-timer來指定。當設備發現的PMTU比TCP連接兩端協商出來的MSS小時,設備就會按上述配置時間間隔,去嘗試發現更大的PMTU。直到PMTU達到MS [2]  S的值,或者用戶停止這個定時器,這個探測過程纔會停止。停止這個定時器,使用age-timer infinite參數。
使用no ip tcp path-mtu-discovery命令關閉PMTU發現功能。
設置接口收發SYN報文的MSS選項值
當客戶端發起一個TCP連接時,它通過TCP SYN報文中的MSS選項字段協商TCP報文數據載荷的最大值,客戶端SYN報文的MSS值表示後續服務器端發送TCP報文數據載荷的最大值,反之同理。
如右圖的拓撲,PC用http訪問服務器可能會出現無法訪問的情況。因爲PC與服務器端建立的連接MSS協商的都會是1460,但1460的MSS無法通過R1和R2,R1和R2用隧道相連,MTU小於1500。 [2] 
這時可以通過在R2的(1)口和(2)口上配置如下命令,修改SYN報文中的MSS選項值。從而修改經過(1)口和(2)口的TCP連接協商的MSS值。
命令
作用
R (config-if)# ip tcp adjust-mssmax-segment-size
設置接口收發SYN報文的MSS選項值。
單位爲字節,取值範圍500-1460。
使用no ip tcp adjust-mss命令取消此項設置,則接口收發SYN報文時,不會修改報文的MSS選項值。
在接口上配置本命令會使得該接口接收或發送SYN報文的MSS選項都被改爲接口上配置的MSS值。建議出口和入口配置相同的值。如果SYN報文的入口和出口配置了不同的MSS值,經過該設備後,SYN報文的MSS選項被改爲這兩個口配置值的較小者。 [2] 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章