網絡理論基礎

一、網絡概述

  1、什么是網絡

    網絡就是通過有線或無線技術將各種硬件設備連接起來進行數據傳輸的一種方式。

  2、網絡的分類

    根據距離范圍可以將網絡劃分為局域網和廣域網。

      局域網:傳輸距離較近,傳輸速率快。

      廣域網:傳輸距離較遠,比如城市與城市之間,傳輸速率慢。

  3、OSI七層協議

    網絡連接是一個復雜的過程,為了方便網絡連接的理解以及各種功能的實現,將各種功能通過分層的方式來使它們不會相互干擾,這個分層的機制就是OSI七層模型。

    下面來看一下每一層負責的任務:

      (1) 物理層:物理層用于定義所使用的傳輸設備的電壓與信號,同時負責將數據幀轉成比特流,并發送/接收比特信號。

      (2)數據鏈路層:此層又分為兩個子層介質訪問控制(MAC)和邏輯鏈接控制(LLC)。MAC用于控制網絡介質,LLC則負責數據包的處理。在這層中將數據封裝成幀格式,相關協議:PPP。

      (3)網絡層:負責數據包傳輸路徑的選擇。此層將數據封裝成包,相關協議:IP。

      (4)傳輸層:負責建立在傳輸設備間建立連接,同時包括數據包的格式定義、數據包發送、傳輸過程偵測,重傳等,確保數據包可以正確的被發送。此層將數據封裝為段,相關協議:TCP、UDP。

      (5)會話層:用于確定網絡服務建立的連接。

      (6)表示層:用于將數據的格式標準化,另外也負責數據的加密。

      (7)應用層:負責將數據發送給應用程序。相關協議:HTTP、FTP、SMTP等。

    數據的傳輸過程其實就是按照這七個層次在發送端從應用層開始逐層封裝后經傳輸介質(網線、無線信號等)發送出去,再由接收端從物理層開始逐層解封裝的過層。

    由于OSI七層協議太過于嚴謹,使得程序不容易編寫,所以并沒有得到很好的發展。而目前被廣泛使用的是TCP/IP。

  4、TCP/IP

    TCP/IP是從OSI七層協議簡化而得來的,其簡單的結構使用程序的編寫更加容易,這也成為TCP/IP流行于世的原因。

    下面來看一下TCP/IP與OSI七層協議的對應關系:      

OSI七層協議 TCP/IP

應用層

表示層

會話層

應用層
傳輸層

傳輸層

網絡層 網絡層

數據鏈路層

物理層

網絡接口層

二、以太網

  目前局域網中最常使用的就是以太網,那么到底什么是以太網呢?

  1、CSMA/CD

   CSMA/CD(Carrier Sense Multiple Access with Collision Detection)帶沖突檢測的載波偵聽多路訪問是一種數據傳輸的工作方式,其工作原理為:檢測線路是否空閑,空閑時馬上發送數據包,并且邊發送邊偵聽,一旦發現有沖突就立即停止發送。

   只要是符合CSMA/CD機制的網絡就稱為以太網。

   其最典型的應用就是使用集線器Hub連接組成的網絡,現在已經很難找個hub了,原因就因為其工作時只能有一個設備發送數據而其它的設備需要排除等待,效率低下,現在流行使用二層交換機來替代hub。

   集線器和二層交換機都是工作在數據鏈路層的設備,而二層交換機的優勢在于hub是一種共享的設備,所有接口共享同一個帶寬,而交換機的每個接口都具有獨立的帶寬。

  2、全雙工和半雙工

   假設目前帶寬為10M,使用半雙工的設備每次傳輸總帶寬只能為10M,全雙工的設備可以達到20M,因為每次發送和接收的可以同時進行,共享設備不可能達到全雙工。

  3、MAC封裝格式

   數據鏈路層的工作是基于MAC地址工作的,CSMA/CD發送出去的幀就是MAC。     

前導碼

8Bytes

目的地址

6Bytes

源地址

2Bytes

長度指示

2Bytes

LLC數據

46-1500Bytes

幀校驗序列

4Bytes

   目的地址與源地址就是通信兩端的網卡地址,每個網卡地址都是全球唯一的,其取值范圍為00:00:00:00:00:00到FF:FF:FF:FF:FF:FF,這6bytes當中,前3bytes為廠商的代碼,后3bytes為廠商自行定義的編碼。

  4、MTU

   以太網中數據幀內的數據容量最大可達1500bytes,這就是MTU最大傳輸單元。

  5、交換機

   從上面的介紹中我們了解到CSMA/CD機制是利用沖突檢測來決定是否發送數據的,一旦有數據正在傳輸其它設備就只能排隊等待,一個集線器無論有多少的端口每次也只能建立一條傳輸信道,那么我們說這個集線器就是一個沖突域。

   交換機的每個端口都是獨立的帶寬,所有端口上的設備可以同時進行數據傳輸,那么每個端口就是一個沖突域。

   交換機內部維護了一張表,表中記錄了交換機端口與連接的主機MAC的對應關系,由此可以根據數據幀快速定位到目的主機;交換機每隔一段時間會向端口上的主機進行確認,如果沒有回復就從表中刪除這條記錄。

   交換機這張表的最開始是空的,只有要進行學習后才能在表中填入對應條目。當有主機發起連接請求后,交換機會向所有端口廣播這個連接請求,找到正確的目的主機后交換機就會將端口與MAC的對應關系寫入表中。由此我們說交換機是就形成了一個廣播域。

三、IP數據包的封裝

  下面是IP數據包的包頭:

1.jpg

  上圖中每行所占用的位置必須是32bits。

  內容詳解:

    Version(版本):聲明這個IP數據包的版本,一般為IPv4;

    IHL(IP包頭長度):說明這個IP數據包的包頭長度,以4字節為一個單位;

    Service Type(服務類型):服務類型分為以下幾種,

      PPP:表示IP數據包的優先級,很少使用;

      D:若為0表示一般延遲,若為1表示為低延遲;

      T:若為0表示一般傳輸量,若為1表示高傳輸量;

      R:若為0表示為一般可靠度,若為1表示高可靠度。

    Package Length(總長度):IP包的總長度,包括報頭和數據部分;

    Identification(識別碼):上面介紹過幀的默認最大傳輸單元為1500bytes,而IP包最大可以到65536bytes,那么要想將IP包封裝到數據幀中就必須將其分割成更小的IP包,那個這個識別碼就是用于識別這此小的IP分段是否來自同一個IP包。

    Flags(特殊標志):標志有以下幾種:

      D:若為0表示可以分段,若為1表示不可分段;

      M:若為0表示此IP為最后分段,若為1表示非最后分段。

    Frag. Offse(分段偏移):表示目前這個IP分段在原始的IP包中所處的位置,相當于這個IP分段的序號。通過包的總長度、識別碼、特殊標志、分段偏移就可以將小的IP分段在接收端組合成完整的IP數據包。

    Time to live(TTL,生存時間):范圍0-255。當數據包通過一個路由器時就會減1,當TTL為0時數據包被丟棄。

    Protocol(協議代碼):記錄來自傳輸層和網絡層本身的協議信息。常見代碼如下:

      1:ICMP

      4:IP

      6:TCP

      17:UDP

    Header Checksum(報頭校驗碼):用于檢查IP報頭是否存在錯誤。

    Source Address(源IP地址):發送端的IP地址。

   Destination Address(目標IP地址):接收端的IP地址。

    Options(其它參數):包括安全處理機制、路由記錄、時間戳等。

    Padding(補齊項目):IP每個數據必須為32bits,如果Options不足32bits時,由Padding主動補齊。

四、路由

  在上面的介紹中了解到交換機是通過MAC地址和廣播的方式來查找主機的,如果目標主機不在同一個IP網絡內,交換機就無查找到目標主機了,這時就需要用到路由設備來將數據包傳送到不同的網絡中。

  最早的路由設備是網橋,現在已經看不到了,其工作原理就是在不同的端口上連接兩個不同的網絡,再通信路由指向使兩個網絡中的主機可以相互通信。

  現在最常使用的是路由器,工作原理與網橋相同,只不過網橋只有兩個接口,而路由器有很多接口,可以連接更多的網絡。

  路由器的每個接口都是一個廣播域。

五、TCP

  1、TCP報頭

2.jpg

  內容詳解:

    源端口:端口是用來標記應用程序的,源端口是連接發起端使用的端口,通常為隨機端口。

    目的端口:常用的應用都會規定有固定的端口號,如http使用80端口,ssh使用22端口。

    順序號:當IP包過太時,需要對包進行分段。順序號就是記錄每個數據包的順序,以方便接收端將包重新組合。

    確認號:當接收端收到數據包后會向發送端發送確認號,告訴發送端數據包被正確傳遞。

    TCP頭長:用于調整整個TCP數據包的大小,說明整個數據包字段的起始位置。

   控制標志碼:

      URG:為1代碼為緊急數據包,接收端應緊急處理。

      ACK:為1代表這人數據包為響應數據包。

      PSH:為1代表要求對方立即傳送緩沖區的其他對應數據包,而無須等待緩沖區滿了才送。

      RST:為1代表連接會被馬上結束,強制結束連接。

      SYN:為1代表發送端希望雙方建立同步連接,表示主動連接對方。

      FIN:為1代表傳送結束。

    窗口大小:用于控制數據包流量,表示緩沖區是否還可以接收數據,為0表示無法接收數據。

    校驗和:發送端首先會計算一個檢驗碼,接收端收到數據包后會再次計算這個值,如果兩個值相符合就接受數據包,否則就認為此數據包已損壞。

    緊急指針:URG為1時才有作用,告知緊急數據所在的位置。

    可選項:表示接收端可以接收的最大數據段容量。

  2、三次握手

    TCP的連接需要經過三次的發送和確認才能建立,這個過程被稱為三次握手。

blob.png

    A:數據包發起。

    發起端隨機使用一個大于1024的端口發起請求,在TCP報頭中標記SYN為1。

    B:數據包接收并確認。

    接收端收到數據包后,回自復一個帶有SYN=1,ACK=1的數據包,告訴發送方已接收到數據包,并等發起端的回復。

    C:回復確認數據包。

    發起端收到確認數據包后再次發送一個確認數據包(ACK=1),告訴接收端可以建立連接。

    D:建立連接。

    接收端收到ACK=1的確認數據包后,就可以建立起連接了。

  3、四次揮手

   當TCP連接斷開時需要4個步驟,這個斷開過程被稱為四次揮手。

blob.png

    四次揮手過程很簡單:

    1、發起方發送一個FIN請求,要求斷開連接。

    2、接收方發收到數據包后如果還沒有準備好,可能還有數據沒有傳輸完成,這時回復一個ACK給對方說自己還沒準備好,請等待我的回復。

    3、接收方準備好后也會向發起方發送一個FIN請求,說明可以斷開連接。

    4、發起方再次回復ACK,接收方收到ACK后則知道可以斷開連接了;在等一段時間后沒有收到接收方的回復后,發起方也就斷開了連接,此時連接則正常關閉。

 

六、UDP數據包

  UDP即用戶數據報協議,是不可靠的連接方式。其沒有復雜的連接確認機制,所有報頭內容較少。

3.jpg

七、應用層

  應用層的作用是標記資源,網絡通信的實際上是進程與進程之間的通信,而向進程進行注冊通信的不是端口號,而是套接字(socket)。

  socket:即IP:Port。如:192.168.0.1:80

原創文章,作者:petmaster,如若轉載,請注明出處:http://www.www58058.com/2600

(0)
petmasterpetmaster
上一篇 2016-01-09
下一篇 2016-01-13

相關推薦

  • grub詳解

    grub詳解 1、GRUB(Boot Loader): grub:grub 0.x:grub1 legacy傳統的版本 grub 1.x:grub2 grub legacy: 第1階段:mbr 第1.5階段:mbr之后的扇區中,讓第一階段中的boot loader能識別第二階段所在分區上的文件系統 第2階段:磁盤分區(/boot/grub/) 配置文件/et…

    2017-09-03
  • Shell腳本的編寫

    1.什么是Shell腳本 Shell腳本是利用 shell 的功能所寫的一個程序 program,這個程序是使用純文本文件,將一些 shell 的語法與指令(含外部指令)寫在里面, 搭配正則表達式、管線命令與數據流重導向等功能,以達到我們所想要的處理目的。 Shell 腳本可以簡單的被看成是批處理文件, 也可以被說成是一個程序語言,且這個程序語言由于都是利用…

    Linux干貨 2017-04-16
  • 文本處理工具sed、vim

    文本處理工具sed、vim 一、sed的使用 1、sed的概念 sed簡單地說sed是一種行處理工具。 sed 是一種流性的行編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space ),接著用sed 命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末…

    Linux干貨 2016-08-11
  • httpd-2.4 功能生動實現 (Blog 13)

    CentOS 7 與 CentOS 6 訪問控制區別、虛擬主機

    2017-12-01
  • Linux網絡配置

    (1)、ifcfg家庭命令配置: ifconfig/route/netstat ifup/ifdown   (2)、ip命令配置: ip addr | route | link   (3)、修改配置文件 IP、MASK、GW、DNS相關配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE 路由相關…

    2018-01-30
  • 第六周作業

    第六周作業 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; cp /etc/rc.d/rc.sysinit /tmp vim /tmp/rc.sysinit :進入末行模式 % s/^[[:space:]]/#&…

    Linux干貨 2016-10-09
欧美性久久久久