關於 TCP/IP 必須要知道的 10 個問題 (上)
一、TCP/IP模型 |
TCP/IP協定模型(Transmission Control Protocol/Internet Protocol), 包含了一系列構成互聯網基礎的網路通訊協定,是Internet的核心協議。 基於TCP/IP的參考模型將協定分成四個層次, 它們分別是鏈路層、網路層、傳輸層和應用層。下圖表示TCP/IP模型與OSI模型各層的對照關係 |
TCP/IP協定族按照層次由上到下,層層包裝。 最上面的是應用層,這裡面有http,ftp 等等我們熟悉的協議。 而第二層則是傳輸層,著名的TCP和UDP協定就在這個層次。 第三層是網路層,IP協定就在這裡, 它負責對資料加上IP位址和其他的資料以確定傳輸的目標。 第四層是資料連結層,這個層次為待傳送的資料加入一個乙太網協定頭, 並進行CRC編碼,為最後的資料傳輸做準備。 |
上圖清楚地表示了TCP/IP協議中每個層的作用,而TCP/IP協議通信的過程其實就對應著資料入棧與出棧的過程。 入棧的過程,資料發送方每層不斷地封裝首部與尾部,添加一些傳輸的資訊, 確保能傳輸到目的地。出棧的過程,資料接收方每層不斷地拆除首部與尾部,得到最終傳輸的資料。 |
上圖以HTTP協議為例,具體說明。 |
二、資料連結層 |
實體層負責0、1位元流與物理設備電壓高低、光的閃滅之間的互換。 資料連結層負責將0、1序列劃分為資料幀從一個節點傳輸到臨近的另一個節點, 這些節點是通過MAC來唯一標識的(MAC,物理位址,一個主機會有一個MAC位址)。 |
|
三、網路層 |
1、IP協議 IP協定是TCP/IP協定的核心,所有的TCP,UDP,IMCP,IGMP的資料都以IP資料格式傳輸。 要注意的是,IP不是可靠的協議,這是說,IP協定沒有提供一種資料未傳達以後的處理機制, 這被認為是上層協議:TCP或UDP要做的事情。 1.1 IP地址 在資料連結層中我們一般通過MAC地址來識別不同的節點, 而在IP層我們也要有一個類似的位址標識,這就是IP位址。 32位元IP位址分為網路位元和位址位元,這樣做可以減少路由器中路由表記錄的數目, 有了網路位址,就可以限定擁有相同網路位址的終端都在同一個範圍內, 那麼路由表只需要維護一條這個網路位址的方向, 就可以找到相應的這些終端了。A類IP地址: 0.0.0.0~127.0.0.0 B類IP地址:128.0.0.1~191.255.0.0 C類IP地址:192.168.0.0~239.255.255.0 1.2 IP協議頭 |
這裡只介紹:八位的TTL欄位。這個欄位規定該資料包在穿過多少個路由之後才會被拋棄。 某個IP資料包每穿過一個路由器,該資料包的TTL數值就會減少1,當該資料包的TTL成為零, 它就會被自動拋棄。這個欄位的最大值也就是255, 也就是說一個協議包也就在路由器裡面穿行255次就會被拋棄了, 根據系統的不同,這個數位也不一樣,一般是32或者是64。 2、ARP及RARP協議 ARP 是根據IP位址獲取MAC位址的一種協議。ARP(位址解析)協定是一種解析協定, 本來主機是完全不知道這個IP對應的是哪個主機的哪個介面,當主機要發送一個IP包的時候, 會首先查一下自己的ARP快取記憶體(就是一個IP-MAC位址對應表緩存)。 如果查詢的IP-MAC值對不存在,那麼主機就向網路發送一個ARP協定廣播包, 這個廣播包裡面就有待查詢的IP地址,而直接收到這份廣播的包的所有主機都會查詢自己的IP位址, 如果收到廣播包的某一個主機發現自己符合條件, 那麼就準備好一個包含自己的MAC位址的ARP包傳送給發送ARP廣播的主機。 而廣播主機拿到ARP包後會更新自己的ARP緩存(就是存放IP-MAC對應表的地方)。 發送廣播的主機就會用新的ARP緩存資料準備好資料連結層的的資料包發送工作。 RARP協議的工作與此相反,不做贅述。 3、ICMP協議 IP協定並不是一個可靠的協定,它不保證資料被送達,那麼,自然的,保證資料送達的工作應該由其他的模組來完成。 其中一個重要的模組就是ICMP(網路控制報文)協定。 ICMP不是高層協定,而是IP層的協議。當傳送IP資料包發生錯誤。 比如主機不可達,路由不可達等等,ICMP協定將會把錯誤資訊封包,然後傳送回給主機。 給主機一個處理錯誤的機會,這 也就是為什麼說建立在IP層以上的協議是可能做到安全的原因。 |
四、ping |
ping可以說是ICMP的最著名的應用,是TCP/IP協議的一部分。 利用“ping”命令可以檢查網路是否連通,可以很好地説明我們分析和判定網路故障。 例如:當我們某一個網站上不去的時候。通常會ping一下這個網站。 ping會回顯出一些有用的資訊。一般的資訊如下: |
ping這個單詞源自聲納定位,而這個程式的作用也確實如此,它利用ICMP協議包來偵測另一個主機是否可達。 原理是用類型碼為0的ICMP發請求,受到請求的主機則用類型碼為8的ICMP回應。 |
五、Traceroute |
Traceroute是用來偵測主機到目的主機之間所經路由情況的重要工具,也是最便利的工具。 Traceroute的原理是非常非常的有意思,它收到到目的主機的IP後, 首先給目的主機發送一個TTL=1的UDP資料包,而經過的第一個路由器收到這個資料包以後, 就自動把TTL減1,而TTL變為0以後,路由器就把這個包給拋棄了, 並同時產生 一個主機不可達的ICMP資料包給主機。 主機收到這個資料包以後再發一個TTL=2的UDP資料包給目的主機, 然後刺激第二個路由器給主機發ICMP資料 報。如此往復直到到達目的主機。 這樣,traceroute就拿到了所有的路由器IP。 |
六、TCP/UDP |
TCP/UDP都是是傳輸層協議,但是兩者具有不同的特性, 同時也具有不同的應用場景,下面以圖表的形式對比分析。 |
面向報文面向報文的傳輸方式是應用層交給UDP多長的報文,UDP就照樣發送,即一次發送一個報文。 因此,應用程式必須選擇合適大小的報文。若報文太長,則IP層需要分片,降低效率。 若太短,會是IP太小。面向位元組流面向位元組流的話, 雖然應用程式和TCP的交互是一次一個資料塊(大小不等),但TCP把應用程式看成是一連串的無結構的位元組流。 TCP有一個緩衝,當應用程式傳送的資料塊太長,TCP就可以把它劃分短一些再傳送。 關於擁塞控制,流量控制,是TCP的重點,後面講解。TCP和UDP協議的一些應用 |
什麼時候應該使用TCP? 當對網路通訊品質有要求的時候,比如:整個資料要準確無誤的傳遞給對方, 這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸檔的協議,POP、SMTP等郵件傳輸的協定。 什麼時候應該使用UDP? 當對網路通訊品質要求不高的時候,要求網路通訊速度能儘量的快,這時就可以使用UDP。 |