關於TCP IP,這十個問題你都知道,就入門了!

2021-08-25 06:05:35 字數 4083 閱讀 7699

/巨集碁

本文整理了一些tcp/ip協議簇中需要必知必會的十大問題,既是面試高頻問題,又是程式設計師必備基礎素養。

1、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協議為例,具體說明。

2、資料鏈路層

物理層負責0、1位元流與物理裝置電壓高低、光的閃滅之間的互換。 資料鏈路層負責將0、1序列劃分為資料幀從乙個節點傳輸到臨近的另乙個節點,這些節點是通過mac來唯一標識的(mac,實體地址,乙個主機會有乙個mac位址)。

封裝成幀: 把網路層資料報加頭和尾,封裝成幀,幀頭中包括源mac位址和目的mac位址。

透明傳輸:零位元填充、轉義字元。

可靠傳輸: 在出錯率很低的鏈路上很少用,但是無線鏈路wlan會保證可靠傳輸。

差錯檢測(crc):接收者檢測錯誤,如果發現差錯,丟棄該幀。

3、網路層

1.ip協議

ip協議是tcp/ip協議的核心,所有的tcp,udp,imcp,igmp的資料都以ip資料格式傳輸。要注意的是,ip不是可靠的協議,這是說,ip協議沒有提供一種資料未傳達以後的處理機制,這被認為是上層協議:tcp或udp要做的事情。

1.1 ip位址

在資料鏈路層中我們一般通過mac位址來識別不同的節點,而在ip層我們也要有乙個類似的位址標識,這就是ip位址。

32位ip位址分為網路位和位址位,這樣做可以減少路由器中路由表記錄的數目,有了網路位址,就可以限定擁有相同網路位址的終端都在同乙個範圍內,那麼路由表只需要維護一條這個網路位址的方向,就可以找到相應的這些終端了。

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層以上的協議是可能做到安全的原因。

4、ping

ping可以說是icmp的最著名的應用,是tcp/ip協議的一部分。利用「ping」命令可以檢查網路是否連通,可以很好地幫助我們分析和判定網路故障。

ping這個單詞源自聲納定位,而這個程式的作用也確實如此,它利用icmp協議包來偵測另乙個主機是否可達。原理是用型別碼為0的icmp髮請 求,受到請求的主機則用型別碼為8的icmp回應。

ping程式來計算間隔時間,並計算有多少個包被送達。使用者就可以判斷網路大致的情況。我們可以看到, ping給出來了傳送的時間和ttl的資料。

5、traceroute

traceroute是用來偵測主機到目的主機之間所經路由情況的重要工具,也是最便利的工具。

traceroute的原理是非常非常的有意思,它收到到目的主機的ip後,首先給目的主機傳送乙個ttl=1的udp資料報,而經過的第乙個路由器收到這個資料報以後,就自動把ttl減1,而ttl變為0以後,路由器就把這個包給拋棄了,並同時產生 乙個主機不可達的icmp資料報給主機。主機收到這個資料報以後再發乙個ttl=2的udp資料報給目的主機,然後刺激第二個路由器給主機發icmp資料 報。如此往復直到到達目的主機。這樣,traceroute就拿到了所有的路由器ip。

tcp/udp都是是傳輸層協議,但是兩者具有不同的特性,同時也具有不同的應用場景,下面以圖表的形式對比分析。

面向報文

面向報文的傳輸方式是應用層交給udp多長的報文,udp就照樣傳送,即一次傳送乙個報文。因此,應用程式必須選擇合適大小的報文。若報文太長,則ip層需要分片,降低效率。若太短,會是ip太小。

面向位元組流

面向位元組流的話,雖然應用程式和tcp的互動是一次乙個資料塊(大小不等),但tcp把應用程式看成是一連串的無結構的位元組流。tcp有乙個緩衝,當應用程式傳送的資料塊太長,tcp就可以把它劃分短一些再傳送。

關於擁塞控制,流量控制,是tcp的重點,後面講解。

tcp和udp協議的一些應用

什麼時候應該使用tcp?

什麼時候應該使用udp?

關於UI設計你需要自問的十個問題

摘要 ui 設計的魅力在於,你不僅需要適當的技巧,更要理解使用者與程式的關係。乙個有效的使用者介面關注的是使用者目標的實現,包括視覺元素與功能操作在內的所有東西都 需要完整一致。為了實現這個目標,你需要問自己10 個最基本的問題。1.你的ui 是否高度一致?使用者來.ui 設計的魅力在於,你不僅需要...

你遇到了嗎?這十個關於二級建造師的問題!

一 二級建造工程師證書超過三年不進行註冊,會過期嗎?答 是不會過期的,超過三年沒有註冊時,可以申請繼續教育。二 去年二建考試過了兩門,今年可以改其他專案嗎?答 可以更改,但是之前通過科目的成績作為無效處理。三 二級建造工程師註冊成功需要多長時間?答 從成績出來到取得資格證需要三個月左右的時間,再到註...

SEO分享 關於SEO的十個問題

想寫的幽默一點,幽默細胞太少,想寫的專業一點,又不夠專業,結果就出現了這篇不倫不類的怪文,望海涵!問題一 站點內容須要每天更新嗎?答 行業不同更新頻率也不同,站點更新僅僅要與行業更新頻率一致就ok了。問題二 新站該怎麼優化?答 永遠不要把自己的站點當作新站,站點優化方法沒有新舊之分。答 這就好比男人...