原文連結:https://mp.weixin.qq.com/s/lk0qxeoZwoXoZv0dYVXIIQ
1.疑問1 一臺電腦是怎麼把訊息發給另外一臺電腦的呢?
2 兩臺電腦啥線路也沒有相連,怎麼就能把訊息傳送給他呢?3 世界上的電腦那麼多,咋就能找到那臺特點的電腦呢?有人說我們可以 MAC 或者 IP 來唯一標識啊,可是,我就有點疑惑了,世界那麼大,電腦那麼多,有了這個標識,我們該怎麼找到他呢?遍歷所有電腦?
4 多個程式同時發訊息給一臺電腦,電腦是如何準確把這些訊息拿給這些不同程式的呢?
5 傳送的訊息丟失了怎麼辦?
透過以下的講解我們來回答以上問題。
2.協議首先來看計算機之間要相互通訊,雙方就必須基於相同的規則。比如,如何找到目標、如何進行通訊,所有的這一切都需要一種規則。而我們就把這種規則稱為協議(protocol)。像這樣把與網際網路相關聯的協議集合起來總稱為 TCP/IP,TCP/ IP 是在 IP 協議的通訊過程中協議族的統稱。TCP/IP 協議族裡重要的一點就是分層。接下來就看看我們的網路分層以及每一層的協議。
3.網路分層網路分層是標準的七層,也就是我們所說的 OSI 七層模型。TCP/IP 五層模型和TCP/IP 四層模型是以 OSI 七層最佳化而來。
為什麼要進行分層呢?
把 TCP/IP 層次化是有好處的。比如,如果網際網路只由一個協議統籌,某個地方需要改變設計時,就必須把所有部分整體替換掉。而分層之後只需把變動的層替換掉即可。把各層之間的介面部分規劃好之後,每個層次內部的設計就能夠自由改動了。
值得一提的是,層次化之後,設計也變得相對簡單了。處於應用層上的應用可以只考慮分派給自己的任務,而不需要弄清對方在地球上哪個地方、對方的傳輸路線是怎樣的、是否能確保傳輸送達等問題。
4.每層常見物理裝置在每一層詳解之前,我們先看看每一層的物理裝置有哪些?
5.每一層詳解我們針對OSI七層模型進行講解,這個是面試中常考的。
5.1物理層物理層負責利用光纜、電纜、雙絞線、無線電波等把兩臺計算機連起來,把計算機連線起來。在計算機之間主要是基於電器特性發送高低電壓(電訊號)進行通訊,高電壓對應數字1,低電壓對應數字0。
5.2資料鏈路層資料鏈路層由來:單純的電訊號0和1沒有任何意義,必須規定電訊號多少位一組,每組什麼意思。
資料鏈路層的功能:定義了電訊號的分組方式。
可以發位元流但是沒有格式就會亂七八糟,於是就有了”幀”。採用了一種”幀”的資料塊進行傳輸,為了確保資料通訊的準確,實現資料有效的差錯控制,加入了檢錯等功能。
5.2.1. 乙太網協議乙太網協議規定,一組電訊號構成一個數據包,我們把這個資料包稱之為幀。每一個楨由標頭(Head)和資料(Data)兩部分組成。
幀的大小一般為 64 - 1518 個位元組。假如需要傳送的資料很大的話,就分成多個楨來進行傳送。
head包含:(固定18個位元組)
傳送者/源地址,6個位元組。 接收者/目標地址,6個位元組。 資料型別,6個位元組。標頭部分的位元組是固定的,並且固定為18個位元組。
data包含:(最短46位元組,最長1500位元組)
資料包的具體內容head長度+data長度=最短64位元組,最長1518位元組,超過最大限制就分片傳送
把一臺計算機的資料透過物理層和鏈路層傳送給另一臺計算機,究竟是誰發給誰的,計算機與計算機之間如何區分,你總得給他們一個唯一的標識吧?head中包含的源和目標地址由來:ethernet規定接入internet的裝置都必須具備網絡卡,傳送端和接收端的地址便是指網絡卡的地址,即mac地址。
5.2.2. MAC 地址連入網路的每一個計算機都會有網絡卡介面,每一個網絡卡都會有一個唯一的地址,這個地址就叫做 MAC 地址。計算機之間的資料傳送,就是透過 MAC 地址來唯一尋找、傳送的。長度為48位2進位制,通常由12位16進位制數表示(前六位是廠商編號,後六位是流水線號)
5.2.3.廣播:有了MAC地址,同一網路內的兩臺主機就可以通訊了(一臺主機透過ARP協議獲取另外一臺主機的MAC地址)
在同一個子網中,計算機 1 要向計算機 4 傳送一個數據包,這個資料包會包含接收者的 MAC 地址。當傳送時,計算機 A 是透過廣播的方式傳送的,這時同一個子網中的計算機 2, 3 也會收到這個資料包的,然後收到這個資料包的計算機,會把資料包的 MAC 地址取出來,與自身的 MAC 地址對比,如果兩者相同,則接受這個資料包,否則就丟棄這個資料包。計算機4發現包含自己的MAC地址,於是就進行響應。
5.3網路層我們所處的網路,是由無數個子網路構成的。廣播的時候,也只有同一個子網裡面的計算機能夠收到。假如沒有子網這種劃分的話,於是就透過ethernet、mac地址、廣播的傳送方式,世界上的計算機就可以彼此通訊了,問題是世界範圍的網際網路是由一個個彼此隔離的小的區域網組成的,那麼如果所有的通訊都採用乙太網的廣播方式,那麼一臺機器傳送的包全世界都會收到,這就會使得整個網路奔潰。
必須找出一種方法來區分哪些計算機屬於同一廣播域,哪些不是,如果是就採用廣播的方式傳送,如果不是,透過閘道器和路由向不同廣播域/子網分發資料包,
所以有了我們的網路層,它是處理分組在網路中的活動,比如分組的選路。
引入一套新的協議用來區分不同的廣播域/子網,於是就有了IP 協議。
5.3.1.IP協議IP協議,它所定義的地址,我們稱之為IP地址。IP協議有兩種版本,一種是 IPv4,另一種是 IPv6。我們目前大多數用的還是 IPv4,並且面試也重點考這個,所以我們來重點考一下這個IPv6。
這個 IP 地址由 32 位的二進位制陣列成,我們一般把它分成4段的十進位制表示,地址範圍為0.0.0.0~255.255.255.255。
ip地址分成兩部分
網路部分:標識子網主機部分:標識主機網路部分和主機部分所佔用的二進位制位數是不固定的。
注意:單純的ip地址段只是標識了ip地址的種類,從網路部分或主機部分都無法辨識一個ip所處的子網。
假如兩臺計算機的網路部分是一模一樣的,我們就說這兩臺計算機是處於同一個子網中。例如 192.168.33.1 和 192.168.33.2, 假如這兩個 IP 地址的網路部分為 24 位,主機部分為 8 位。那麼他們的網路部分都為 192.168.33,所以他們處於同一個子網中。又例如:192.16.10.1與192.16.10.2並沒有告訴你網路部分和主機部分各幾位,所以不能確定二者處於同一子網。於是就有了子網掩碼。
子網掩碼它是表示子網路特徵的一個引數,是一個32位二進位制數字,它的網路部分全部為1,主機部分全部為0。比如上面的ip地址192.16.10.1,如果已知網路部分是前24位,主機部分是後8位,那麼子網路掩碼就是11111111.11111111.11111111.00000000,寫成十進位制就是255.255.255.0。
如何判斷是否在一個子網中
是將兩個IP地址與子網掩碼分別進行AND運算(兩個數位都為1,運算結果為1,否則為0),然後比較結果是否相同,如果是的話,就表明它們在同一個子網路中,否則就不是。
例如,192.168.33.1和192.168.33.2的子碼掩碼都為255.255.255.0,把IP與子碼掩碼相與,可以得到他們都為192.168.33.0,進而他們處於同一個子網中。
5.3.2.ARP協議arp協議功能:廣播的方式傳送資料包,獲取目標主機的mac地址。
有了IP協議,我們可以判斷在一個一個子網中了,在一個子網中我們在鏈路層也講過是透過MAC地址進行通訊的,那我們現在只有目標的IP地址,如何才能拿到目標主機的MAC地址呢,這個時候又引出了ARP協議。
傳送端主機透過廣播的方式把自己的資料包發出去,所有主機接收後拆開包,發現目標ip為自己的,就響應,返回自己的mac。資料包格式如下:
資料包格式:(傳送端的MAC地址,目標MAC地址,傳送端IP地址,目標IP地址,資料)
5.3.3.ICMP協議這個協議也經常考。讓我們來了解一下。
為什麼需要ICMP協議呢?一個新搭建好的網路,往往需要先進行一個簡單的測試,來驗證網路是否暢通;但是IP協議並不提供可靠傳輸。如果丟包了,IP協議並不能通知傳輸層是否丟包以及丟包的原因。於是就有了ICMP協議。
ICMP協議的功能主要有:1. 確認IP包是否成功到達目標地址2. 通知在傳送過程中IP包被丟棄的原因
我們需要注意幾點: 1.ICMP是基於IP協議工作的,但是它並不是傳輸層的功能,因此仍然把它歸結為網路層協議。2.ICMP只能搭配IPv4使用,如果是IPv6的情況下, 需要使用ICMPv6。
還記得我們平時的ping命令嗎?其實就是用到了ICMP。
那麼如何驗證的呢? (1)ping命令會先發送一個 ICMP Echo Request給對端 (2)對端接收到之後, 會返回一個ICMP Echo Reply (3)若沒有返回,就是超時了,會認為指定的網路地址不存在。
5.3.4.traceroutetraceroute也是基於ICMP協議實現的。功能: 打印出可執行程式主機,一直到目標主機之前經歷多少路由器。
注意:因為traceroute是路由器命令,在windows下應該是tracert命令。
5.4傳輸層相比網路層的功能是建立主機到主機的通訊。傳輸層的功能就是建立埠到埠的通訊。
透過物理層、資料鏈路層以及網路層的互相幫助,我們已經把資料成功從計算機1傳送到計算機4了,可是,計算機B裡面有各種各樣的應用程式,計算機該如何知道這些資料是給誰的呢?透過埠(Port)。比如我們的熟知的8080。
補充:埠範圍0-65535,0-1023為系統佔用埠。
也就是說,只有有了IP和埠,我們才能進行準確的通訊。這個時候可能有人會說,我輸入IP地址的時候並沒有指定一個埠啊。其實呢,對於有些傳輸協議,已經有設定了一些預設埠了。例如http的傳輸預設埠是80,這些埠資訊也會包含在資料包裡的。
傳輸層最常見的兩大協議是 TCP(Transmission Control Protocol,傳輸控制協議) 協議和 UDP(User Data Protocol,使用者資料報協議) 協議,其中 TCP 協議與 UDP 最大的不同就是TCP 提供可靠的傳輸,而 UDP 提供的是不可靠傳輸。
這裡詳細瞭解一下程式設計師必考---http\https的連線過程
5.5會話層會話層提供的服務可使應用建立和維持會話,並能使會話獲得同步。計算機收到了傳送的資料,但是有那麼多程序,具體哪個程序需要用到這個資料,則把他輸送到那個程序。例如:如果80埠要用,所以系統內資料通訊,將接收埠資料送至需求埠。還有就是會話層使用校驗點可使通訊會話在通訊失效時從校驗點繼續恢復通訊,即對資訊的互動實現控制。這種能力對於傳送大的檔案極為重要。
5.6表示層表示層的作用之一是為異種機通訊提供一種公共語言,以便能進行互操作。現在正確接收到了需要的資料,但是因為資料在傳輸過程中可能基於安全性,或者是演算法上的壓縮,還有就是網路型別不同。那就得有一個溝通的橋樑來整理整理,還原出原本應該有的表示。例如,IBM主機使用EBCDIC編碼,而大部分PC機使用的是ASCII碼。在這種情況下,便需要會話層來完成這種轉換。其他功能例如資料加密,資料壓縮。
5.7應用層終於說到應用層了,應用層這一層最接近我們使用者了。應用層是網路可向終端使用者提供應用服務的唯一視窗,其目的是支援使用者聯網的應用的要求。由於使用者的要求不同,應用層含有支援不同應用的多種應用實體,提供多種應用服務,如電子郵件(MHS)、檔案傳輸(FTAM)、虛擬終端(VT)、電子資料交換(EDI)等。
應用層的主要協議:FTP(檔案傳送協議、21埠)、Telnet(遠端登入協議)、DNS(域名解析協議)、SMTP(郵件傳送協議、25埠),POP3協議(郵局協議),HTTP協議(Hyper Text Transfer Protocol、80埠)
5.7.1. DHCP協議DHCP(Dynamic Host configuration Protocol,動態主機配置協議 )是一個區域網的網路協議,使用UDP協議工作;統一使用兩個IANA分配的埠:67(伺服器端),68(客戶端)。DHCP通常被用於區域網環境,主要作用是集中的管理、分配IP地址,使client動態的獲得IP地址、Gateway地址、DNS伺服器地址等資訊,並能夠提升地址的使用率。簡單來說,DHCP就是一個不需要賬號密碼登入的、自動給內網機器分配IP地址等資訊的協議。
主要有兩個用途:
(1)用於內部網或網路服務供應商自動分配IP地址;(2)給使用者用於內部網管理員作為對所有計算機作中央管理的手段。
DHCP實現動態分配IP的功能,實現IP的時分複用,從而解決IP資源短缺的問題。
DHCP有三種機制分配IP地址:1) 自動分配方式(Automatic Allocation),DHCP伺服器為主機指定一個永久性的IP地址,一旦DHCP客戶端第一次成功從DHCP伺服器端租用到IP地址後,就可以永久性的使用該地址。
2) 動態分配方式(Dynamic Allocation),DHCP伺服器給主機指定一個具有時間限制的IP地址,時間到期或主機明確表示放棄該地址時,該地址可以被其他主機使用。
3) 手工分配方式(Manual Allocation),客戶端的IP地址是由網路管理員指定的,DHCP伺服器只是將指定的IP地址告訴客戶端主機。
三種地址分配方式中,只有動態分配可以重複使用客戶端不再需要的地址。
5.7.2. DNS域名系統(英文:Domain Name System,縮寫:DNS)是網際網路的一項服務。它作為將域名和IP地址相互對映的一個分散式資料庫,能夠使人更方便地訪問網際網路。
就比如我們訪問www.baidu.com 轉化為 39.156.69.79
6.必學協議以及面試高頻考點:1、http協議,包括:封裝格式,常見響應碼,不同版本的區別,常見請求方法,存在哪些安全隱患,啥是無狀態協議等。
2、https協議:http 是明文傳輸,https 是加密安全的,需要知道 https 是如何加密的、數字證書如何形成,啥的對稱加密、非對稱加密。
3、TCP協議:三次握手、四次揮手、如何保證可靠傳輸、流量控制、擁塞控制。
4、UDP:這個大致瞭解即可,好像內容比較少
5、DNS、ICMP、ARP、DHCP
推薦書籍:《計算機網路:自頂向下》、《圖解http》