網絡篇一---網絡基礎

一、網絡基礎知識

1、歷史溯源

最開始,各大硬件廠商想通過一種技術將自己生產的硬件互相連接起來,比較著名的是全錄公司的Ethernet(即以太網)技術。但是不同廠商的設備還是不能相互通信。後來由美國國防部牽頭,研究一種在這些不同硬件上能夠運行的一種軟件,叫做ARPANET, 這就是tcp/ip技術的雛形。到了1975年,該技術已經兼容了Ethernet,即可以在使用Ethernet技術的硬件底下互通數據了,再後來,unix系統也接入了該技術,再後來就吸引了越來越多的使用者接入了該技術,於是tcp/ip就逐漸發展成爲了一個通信標準,這種技術連接起來的網絡也就成爲Internet。再後來到了80年代,emil和圖形化界面的出現,使得這個internet迅速蔓延在計算機世界中。只要你使用的是支持TCP/IP技術的硬件和操作系統,並且實際連上網絡後,就進入了internet,可以全世界遨遊。

2、硬件標準

平常說的買了網卡然後連上網,這個意思是說通過網卡這個硬件連上網。其實還有很多不同的網絡硬件和軟件,但最成功的的確是以太網絡和Internet,這是因爲兩者都被標準所支持。舉例子,以太網絡被標準化組織所認可,並被制定爲一項標準,因此,一項硬件只要符合以太網絡的標準,理論上就可以加入以太網的世界。除此之外,tcp/ip協議也是有標準的,因此,任何會寫程序語言的人,基於這個協議寫出自己的TCP/IP軟件,並且鏈接上INTERNET。

3、計算機網絡的組件

(1)節點(node):凡是具有單獨IP的設備就可以稱之爲一個節點

(2)服務器:提供服務的主機都可以稱之爲服務器

(3)網卡:內建或者插在機器內的一塊設備,主要是提供網絡聯機的設備,目前大都使用RJ-45頭的以太網卡;一般的節點上,都有一塊以上的網卡,以提供網絡聯機功能;

(4)網絡接口:利用軟件設計出來的網絡接口,主要在提供IP地址的任務。一張網卡至少可搭配一個以上的網絡接口,而每個主機內部也都有一個內部的網絡接口,就是(loopback)lo這個循環測試接口;

(5)網絡形態或者拓撲:就是各個節點在網絡上的鏈接方式,一般講的是物理鏈接方式,一般的,有star形等

(6)路由器(route)或者網關(gateway):具有倆個以上的網絡接口,可以鏈接倆個以上不同的網段的設備。調制解調器ADSL不可以算是一個網關,因爲它被視爲一個主機內的網卡設備,在一個PC上可以通過撥號軟件將ADSL仿真爲一個實體網卡。

4、OSI七層模型

由於網絡連接的過程相當複雜,包括硬件、軟件數據封包與應用程序的互相鏈接等等,因此,如果想要寫一支將聯網全部功能都串連在一塊的程序,那麼這段程序稍微出現錯誤,則代碼就要重寫,很麻煩。爲了實現簡單化,因此在網絡連接時,分爲7個層次(可以理解爲分爲7個模塊)來進行組織整個連接的過程,這就是osi7層模型。可以理解爲 原始數據爲一個文件,然後由上往下,由這7層層層加了一個包裹,依次報裝,最後到了物理層時,物理層轉換爲了硬件設備可以識別的電信號0和1。七層如下:

物理層:電信號

數據鏈路層:網絡層的信號轉換及和物理層的通信

網絡層:主要承擔的是IP及路由的任務

傳輸層:兩個主機之間如何通話,這裏定義標準即封包格式,如tcp、udp等

會話層:相當於高速路上的收費站出口,進行回話

表現層:格式轉換爲應用程序看的懂的信號,加密解密就發生在這一層;

應用層:接受或者傳送數據給應用層;

5、TCP/IP四層模型

由於7層模型比較複雜,寫程序不易,因此由ARPANET發展而來的TCP/IP技術參考了7層協議,但是做了簡化,成爲了4層模型,如下

鏈接層:數據鏈結層與物理層則整合成爲一個鏈結層,包括定義硬件訊號、 訊框轉位串的編碼等等,因此主要與硬件 (不論是區網還是廣域網) 有關

網路層:沒有變,主要內容是提供了 IP 封包,並可選擇最佳路由來到達目標 IP 地址

傳輸層:沒有變,不過依據傳送的可靠性又將封包格式分爲連接導向的 TCP 及非連接導向的 UDP 封包格式

應用層:將應用、表現、會話整合爲一個應用層,在該層上可以有很多程序協議,如HTTP、SMTP、DNS等

那 TCP/IP 是如何運作的呢?我們就拿常常連上的 baidu.com 入口網站來做個說明,整個聯機的狀態可以這樣看:

1. 應用程序階段:打開瀏覽器,在瀏覽器上面輸入網址列,按下 [Enter]。此時網址列與相關數據會被瀏覽器包成一個數據, 並向下傳給 TCP/IP 的應用層;

2. 應用層:由應用層提供的 HTTP 通訊協議,將來自瀏覽器的數據報起來,並給予一個應用層表頭,再向傳送層丟去;

3. 傳送層:由於 HTTP 爲可靠聯機,因此將該數據丟入 TCP 封包內,並給予一個 TCP 封包的表頭,向網絡層丟去;

4. 網絡層:將 TCP 包裹包進 IP 封包內,再給予一個 IP 表頭 (主要就是來源與目標的 IP ),向鏈結層丟去;

5. 鏈結層:如果使用以太網絡時,此時 IP 會依據 CSMA/CD 的標準,包裹到MAC 訊框中,並給予 MAC 表頭,再轉成位串後, 利用傳輸媒體傳送到遠程主機上。

等到 baidu.com收到你的包裹後,在依據相反方向拆解開來,然後交給對應的層級進行分析,最後就讓 baidu.com 的 WWW 服務器軟件得到你所想要的數據,該服務器軟件再根

據你的要求,取得正確的資料後,又依循上述的流程,一層一層的包裝起來, 最後傳送到你的手上!就是這樣囉!

PS:由於傳輸的數據一般很大,因此,一般的,在分層的包裝時,就得把數據先拆開放到不同的包裹中,再給每一個包裹一個序號,好讓目的端的主機根據這些信號將包重新組織成有效數據;

二、TCP/IP協議

1、局域網使用的設備---以太網絡

局域網中,最長使用的就是以太網絡,因爲它被制定爲了標準了。幾個概念如下

(1)帶寬:因爲網絡傳輸的信號就是0和1,因此數據傳輸的單位爲每秒多少bit,也就是Mbits/second,Mbps的意思。注意:這裏是Mbits,是字節,不是M或者KB(KB指的是K bytes)

(2)MAC:以太網網線上傳輸的最小數據單位,其中的數據大小爲1500byte(IP 封包最大可以到 65535 bytes)  

 PS:因爲其中有網卡卡號,而網卡卡號又是唯一的,也把網卡的地址成爲MAC地址)

(3)集線器、交換機、路由器

集線器:是一個共享的網絡設備,只允許兩臺機器一條信道進行互相通信,被佔用後就需要等待,容易發生“碰車”;

交換機:是可以實現很多信道,且每一個信道的速度都一樣,不會相互碰撞,且內部有一塊內存區域;

路由器:由於局域網的兩塊網卡之間可以互相通信,而要和別的網域的網卡進行通信,則需要藉助於路由器,實現網卡卡號轉換的目的。

2、IP與路由

IP有兩種版本,一種是現行的IPV4,一種是未來預期會熱門的IPV6;

(1)IP的格式

IP其實就是一種網絡封包方式,這個封包裏最重要就是32位的來源與目標地址了,爲了方便記憶,這個地址就稱爲網絡地址。32位,即是32個0和1。由於人類對而二進制理解不清楚,就把它轉換爲十進制,即是

00000000  00000000  00000000  00000000  ---->0.0.0.0

111111111  111111111  111111111  1111111111  ---->255.255.255.255

這個地址還可以分爲兩段,前三段叫做網段號碼(Net_ID),後面叫做主機號碼(Host_ID),此外,Host_ID在二進制的表示法當中,不可同時爲 0 也不可同時爲 1 ,因爲全爲 0 表示整個網段的地址 (Network IP),而全爲 1 則表示爲廣播的地址 (Broadcast IP),因此,一個網段內可用的IP地址爲0.1到0.254。

PS:在同一個物理網段(機器在物理上通過同一個物理媒體串在一起,相互連接,則稱之爲在一個物理網段)之內,如果兩部主機設定成不同的 IP 網段,則由於廣播地址的不同,導致無法透過廣播的方式來進行聯機。 此時得要透過路由器 (router)來進行數據包的轉遞,才能將兩個網段連結在一起。而相同的網段則不需要路由器。

(2)IP的分類

公有IP:能連接網絡的IP,由機構分發的;

私有IP:局域網IP,以10、172、192開頭的均爲私有IP;

特殊的lo網段:即內部測試循環網段,默認的主機IP就是127.0.0.1,這個主要是沒有裝網卡的機器內部操作系統及程序來測試用的循環網段,即是本機器的內部(指的是機器內部,這個內部空間有的東西包括操作系統,各應用程序等)用的網址;

IP的取得,一般是通過設定爲固定IP或者DHCP服務動態分配;

(3)子網的切分,子網掩碼

通過子網掩碼來講網絡切分爲更小的子網,子網掩碼的意思即爲這32位的網址中,哪一段固定,哪一段可用。由於Net_ID是不可變的,因此就認爲它已經被用光,即全部爲1,Host_ID是可變的,就將它認爲是保留着,即全部爲0。因此,只要知道了Network和Netmask,就可以定義出該網段的所有IP了,因爲可以根據Netmask推算出Broadcast,,進而得出所有可用的IP。

示例:172.16.0.0,當 Net_ID 佔用 23 個位時,計算出這個網段的Netmask, Network, Broadcast 等參數

          由於 172.16.xxx.xxx 是在 Class B 的等級當中,亦即 Net_ID 是 16 位纔對。不過題目給的 Net_ID 佔用了 23 個位!等於是向 Host_ID 借了(23-16) 7 個位用在 Net_ID 當中。所以整個 IP 的地址會變成這樣:預設: 172 . 16 .0000000      0.00000000
                                                                        |----Net_ID---------------| - Host_ID -|
                                                             Network: 172 . 16 .0000000  0.00000000               即  172.16.0.0
                                                          Broadcast: 172 . 16 .0000000  1.11111111                 即  172.16.1.255   ----->即Host_ID設置爲最大,全部爲1,換算之後即爲172.168.1.255
                                               Netmask: 11111111.11111111.1111111  0.00000000               即   255.255.254.0

因此,常常以Network和Netmask來表示一個網段,如下:

Network/Netmask:192.168.0.0/255.255.255.0或者爲192.168.0.0/24      (因爲Netmask的 Net_ID 都是1,即全部固定,所以Network的Net_ID共有 24 個 bits,後面的均可變,所以可把後面寫爲24)

(4)路由的概念

不同網段之間的數據包發送,需要經過路由器和網關。

每部機器都有自己的路由表,在要發送數據包時,首先檢測自己的目標IP是否在路由表內,若是則進過局域網直接發送;若不是,則將數據包發到默認的路由器(或者網關)上去,而路由器也會比對自己的路由表,重複以上的過程;

PS:可以利用 ICMP 來檢驗網絡的狀態,最簡單的指令就是 ping 與traceroute

3、TCP/IP的傳輸層相關概念

IP只負責數據封包和發送出去,至於數據包會不會被接收、有沒有正確接收則是傳輸層的TCP協議的任務。

(1)可靠連接的TCP協議

在 網絡層之上的就是傳送層,傳送層的數據打包成什麼?就是tcp數據包了,並且這個tcp數據包還必須能放進IP數據包內纔可以,簡化一下,將 MAC, IP 與 TCP 的封包數如下:

       

TCP數據包也有一個表頭,用來說明相關信息,其中最重要的就是端口的信息(來源端口&目標端口),一般的,服務端的端口號是有一套默認的規範定義好的,並且小於1024的,端口號都是需要root纔可以開啓的,而客戶端的端口號則不同,是隨機取用一個大於1024的端口號的形式。

由於一個由於網絡是雙向的,要達成聯機的話得要服務器與客戶端均提供了 IP 與端口才行。因此,我們常常將這個成對的數據稱之爲 Socket Pair 

(2)三次握手和四次斷開

省略

(3) 網絡防火牆與OSI7層協議

封包的表頭上面已經有這麼多的重要信息, 那麼我就利用一些防火牆機制與軟件來進行封包表頭的分析,並且設定分析的規則,當發現某些特定的 IP 、特定的端口或者是特定的封包信息(SYN/ACK 等等),那麼就將該封包給他丟棄, 那就是最基本的防火牆原理。

如果以 OSI 七層協議來說,每一層可以抵擋的數據有:
  第二層:可以針對來源與目標的 MAC 進行抵擋;
  第三層:主要針對來源與目標的 IP ,以及 ICMP 的類別 (type) 進行抵擋;
  第四層:針對 TCP/UDP 的埠口進行抵擋,也可以針對 TCP 的狀態 (code)來處理

三、連接INTERNET前的準備

1、DNS

由於人類對於IP不熟悉,不好記憶,因此將主機名和IP對應起來,這就是DNS。因此在主機中,首先要向 DNS 服務器查詢 Hostname 對應 IP 的信息,那麼那部 DNS 主機的 IP 就必須要在我的計算機裏面設定好纔行,並且必須要是輸入IP ,不然我的計算機怎麼連到 DNS 服務器去要求數據呢?其實,在 Linux 裏面,DNS 主機 IP 的設定就是在下面的 這個目錄中/etc/resolv.conf 

2、總結

從上面的所有說明當中,我們知道一部主機要能夠使用網絡,必須要有 IP ,而 IP的設定當中,就必須要有 IP, Network, Broadcast, Netmask 等參數,此外,還需要考慮到路由裏面的 Default Gateway 才能夠正確的將非同網域的封包給他傳送出去。另外,考慮到主機名與 IP 的對應,所以你還必須要給予系統一個 DNS 服務器的 IP 纔行~ 所以說,一組合理的網絡設定需要哪些數據呢?就是:
  IP
  Netmask
  Network
  Broadcast
  Gateway
  DNS
其中,由於 Network 與 Broadcast 可以經由 IP/Netmask 的計算而得到,因此需要設定於你 PC 端的網絡參數, 主要就是 IP, Netmask, Default Gateway, DNS 這四個就是了!

四、linux系統上的網絡配置文件設定

1、/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=網卡的代號
BOOTPROTO=是否使用dhcp
HWADDR=是否加入網卡卡號(MAC)
IPADDR=就是 IP 地址
NETMASK=只網絡屏蔽啦
ONBOOT=要不要默認啓動此接口
GATEWAY=默認的網關   提示:當有多塊網卡時,不要設置多個,一個即可;
NM_CONTROLLED=額外的網管軟件,鳥哥建議取消這個項目!

2、/etc/sysconfig/network

NETWORKING=要不要有網絡
NETWORKING_IPV6=支持IPv6 否?
HOSTNAME=你的主機名
3、/etc/resolv.conf  

nameserver   DNS的IP

4、/etc/hosts  

私有IP    主機名   別名

5、/etc/services

記錄架構在 TCP/IP 上面的總總協議,包括 http, ftp, ssh,telnet 等等服務所定義的 port number























  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章