PM技術(shù)課 | 計算機網(wǎng)絡知多少?

10 評論 7350 瀏覽 89 收藏 20 分鐘

本文筆者將與大家分享:TCP/IP協(xié)議族、HTTP、TCP、UDP、Socket、狀態(tài)碼等的基礎知識。

一個完整的通信過程

互聯(lián)網(wǎng),顧名思義,就是互相連接,形成網(wǎng)絡。其中的關(guān)鍵是“聯(lián)網(wǎng)”,從技術(shù)上看,聯(lián)網(wǎng)就是通信。

那么,通信的過程是怎么樣的呢?使用瀏覽器訪問網(wǎng)頁,是最為常見的通信方式,我們也以訪問網(wǎng)頁為例,查看一個完整的通信過程。

PM技術(shù)課 | 計算機網(wǎng)絡

我們在瀏覽器中輸入一個 URL,回車之后便會在瀏覽器中觀察到頁面內(nèi)容,實際上這個過程經(jīng)過了很多個步驟。

  1. 我們在地址欄輸入一個URL鏈接,比如www.baidu.com;
  2. 瀏覽器向百度服務器發(fā)送了一個訪問請求;
  3. 百度服務器接收到這個訪問請求之后進行處理和解析,知道客戶端是想要訪問網(wǎng)站;
  4. 百度服務器返回對應的響應給瀏覽器,包含了頁面的源代碼等內(nèi)容;
  5. 瀏覽器再對其進行響應解析;
  6. 瀏覽器將網(wǎng)頁呈現(xiàn)出來。

互聯(lián)網(wǎng)的基礎:TCP/IP協(xié)議族

互聯(lián)網(wǎng)的的關(guān)鍵是通信,而通信的關(guān)鍵則是通信協(xié)議。

說句題外話,有段時間,聯(lián)想5G投票事件鬧得沸沸揚揚,除了民族情緒,更多的還是對通信協(xié)議的爭奪,誰掌握了通信協(xié)議,誰就掌握了通信的核心。

計算機之間的通信協(xié)議是TCP/IP協(xié)議族,通信協(xié)議定義了通信的基本問題。

比如:由哪一邊先發(fā)起通信、使用哪種語言進行通信、數(shù)據(jù)傳輸順序是怎么樣的、怎樣結(jié)束通信等規(guī)則,這些規(guī)則稱為協(xié)議(protocol)。通過這些協(xié)議,不同的計算機、手機甚至智能手表之間都可以互相通信。

“族”的意思是很多種協(xié)議,比如TCP、UDP、IP、FTP、HTTP、ICMP等都屬于 TCP/IP 族內(nèi)的協(xié)議。這些協(xié)議本身又可以劃分為不同的層次,大致可以分為4層,分別是:應用層、傳輸層、網(wǎng)絡層和鏈路層。

當然也有不同的劃分方式,不同的劃分方式大同小異,沒有本質(zhì)的區(qū)別。

PM技術(shù)課 | 計算機網(wǎng)絡

1)應用層

應用層負責傳送各種最終形態(tài)的數(shù)據(jù),是直接與用戶打交道的層,典型協(xié)議是HTTP、FTP等。

2)傳輸層

傳輸層負責傳送文本數(shù)據(jù),傳輸層有兩個性質(zhì)不同的協(xié)議,分別是 TCP(Transmission Control Protocol,傳輸控制協(xié)議)和 UDP(User Data Protocol,用戶數(shù)據(jù)報協(xié)議)。

3)網(wǎng)絡層

網(wǎng)絡層負責分配地址和傳送數(shù)據(jù),主要協(xié)議是IP協(xié)議。

IP地址(Internet Protocol Address)是指:互聯(lián)網(wǎng)協(xié)議地址,它為互聯(lián)網(wǎng)上的每一個網(wǎng)絡和每一臺主機分配一個邏輯地址,以此來屏蔽物理地址的差異,用來在網(wǎng)絡中標記一臺電腦的一串數(shù)字,比如192.168.1.1。

4)鏈路層

鏈路層向該層用戶提供透明的和可靠的數(shù)據(jù)傳送基本服務。

透明性是指:該層上傳輸?shù)臄?shù)據(jù)的內(nèi)容、格式及編碼沒有限制,也沒有必要解釋信息結(jié)構(gòu)的意義;可靠的傳輸使用戶免去對丟失信息、干擾信息及順序不正確等的擔心。

你可能會感到奇怪,為什么要層次化呢?

  1. 在保證層次之間接口不變的情況下,層次內(nèi)部可以改動,不至于“牽一發(fā)而動全身”
  2. 降低了開發(fā)的復雜度,開發(fā)的過程中,也只需要關(guān)注某一層的協(xié)議,而不需要深入了解所有的協(xié)議。

數(shù)據(jù)是如何流動傳輸?

數(shù)據(jù)發(fā)送的時候依次經(jīng)過應用層、傳輸層、網(wǎng)絡層、鏈路層,之后通過光纖等硬件傳送給接收端。

接收端的鏈路層接收到數(shù)據(jù),并依次通過網(wǎng)絡層、傳輸層、最終到達應用層,進行數(shù)據(jù)處理。

PM技術(shù)課 | 計算機網(wǎng)絡

首先,作為發(fā)送端的客戶端在應用層(HTTP 協(xié)議)發(fā)出的 HTTP請求(比如想要訪問http://www.baidu.com),并生成HTTP數(shù)據(jù)。

  1. 為了傳輸方便,在傳輸層(比如TCP 協(xié)議)把從應用層處收到的數(shù)據(jù)(HTTP 數(shù)據(jù))進行封裝,之后轉(zhuǎn)發(fā)給網(wǎng)絡層。
  2. 在網(wǎng)絡層(IP 協(xié)議),增加作為通信目的地的地址后轉(zhuǎn)發(fā)給鏈路層。
  • 給這些數(shù)據(jù)附加上以太網(wǎng)數(shù)據(jù)并進行發(fā)送處理,生成的以太網(wǎng)數(shù)據(jù)將通過物理層傳輸給接收端。
  • 接收端在鏈路層接收到數(shù)據(jù),依次往上層傳輸,直至應用層。當傳輸?shù)綉脤?,才能算真正接收到由客戶端發(fā)送過來的 HTTP 請求。

HTTP是啥?

HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)是用于服務器傳輸超文本到本地瀏覽器的傳送協(xié)議。HTTP是TCP/IP協(xié)議族的一部分,屬于應用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷、快速的方式,受到了廣泛的應用。

HTTP協(xié)議工作于客戶端-服務端架構(gòu)上,客戶端向服務器發(fā)送所有請求,服務器根據(jù)接收到的請求后,向客戶端發(fā)送響應信息。

PM技術(shù)課 | 計算機網(wǎng)絡

HTTP協(xié)議具有以下特點:

  1. HTTP協(xié)議簡單快速,客戶端向服務器請求服務時,只需傳送請求方法和路徑。由于HTTP協(xié)議簡單,使得HTTP服務器的程序規(guī)模小,因而通信速度很快。
  2. HTTP系統(tǒng)通信靈活,允許傳輸任意類型的數(shù)據(jù)對象。比如:文字、圖片、音頻和視頻等內(nèi)容,這也是我們可以在瀏覽器或者手機APP查看各種音頻、視頻的原因。
  3. HTTP協(xié)議面向無連接通信,面向無連接是指通信雙方不需要事先建立一條通信線路,而是把每個帶有目的地址的包送到線路上,由系統(tǒng)自主選定路線進行傳輸。這就像我們做出租車的時候,只會告訴司機目的地,并不需要跟司機說走哪條路。

TCP、UDP、Socket

TCP

TCP(transport control protocol,傳輸控制協(xié)議)是面向連接的、可靠的流協(xié)議。

流就是指不間斷的數(shù)據(jù),你可以把它想象成排水管中的水流。

面向連接,是指發(fā)送數(shù)據(jù)之前必須在兩端建立連接。建立連接,為數(shù)據(jù)的可靠傳輸打下了基礎。

可靠的意思是信息不會丟失,當一臺計算機想要與另一臺計算機通訊時,兩臺計算機之間的通信需要暢通且可靠,這樣才能保證正確收發(fā)數(shù)據(jù)。比如:查收電子郵件的時候,有時候差一個字,意思可能就不一樣了,所以要保證每一個字都能夠接收到。

在技術(shù)實現(xiàn)上,TCP為了保證報文傳輸?shù)目煽?,就給每個包一個序號,序號也保證了傳送到接收端實體的包的按序接收。接收端接受到數(shù)據(jù)之后,也會向發(fā)送端發(fā)送一個確認的信息(Acknowledgement ,ACK)。如果發(fā)送端在一定時間內(nèi)沒有收到接收端返回的ACK,那么發(fā)送端會重新發(fā)送數(shù)據(jù),保證通信的可靠性。

UDP

UDP(user datagram protocol,用戶數(shù)據(jù)報協(xié)議)與TCP協(xié)議一樣用于處理數(shù)據(jù)包,是一種無連接,面向消息的,提供高效率服務的協(xié)議。

UDP是面向無連接的協(xié)議, UDP不需要在發(fā)送數(shù)據(jù)前進行建立連接,想發(fā)數(shù)據(jù)就可以開始發(fā)送了。有時候,接收端還沒有準備好,發(fā)送端就開始發(fā)送數(shù)據(jù)了!

UDP也沒有數(shù)據(jù)拆分和編號操作,一股腦直接發(fā)送過去了。特別是在網(wǎng)絡傳輸狀況較差的時候,發(fā)送端只顧著發(fā)送數(shù)據(jù),接收端可能壓根沒有接受到數(shù)據(jù)。

但UDP這樣做也有好處,就是傳輸速度快,TCP在傳輸之前要建立連接,傳輸過程中還要編號。接收端接收到所有編號之后,重新組裝成信息,需要花費不少時間,在對時間較高的場景,這樣做明顯會帶來較長的時延。

所以,UDP常用在對實時性較高的通信領(lǐng)域,比如:視頻會議,這些情況對實時性要求較高,即使丟失了一些數(shù)據(jù),也不影響接受信息。

TCP提供面向連接的可靠服務 ,UDP提供無連接的不可靠的服務。對數(shù)據(jù)準確性要求高,速度可以相對較慢的,可以選用TCP,對實時性要求高的場景可以使用UDP。

Socket

除了TCP/IP,我們可能也會聽說過Socket。

Socket(套接字) 是對 TCP/IP 協(xié)議的封裝,Socket 只是個接口(API)不是協(xié)議,通過 Socket 我們才能使用 TCP/IP 協(xié)議。

創(chuàng)建 Socket 接口的時候,需要指定傳輸層協(xié)議,可以是 TCP 或者 UDP,當用 TCP 連接,該Socket就是個TCP連接,反之亦然。

狀態(tài)碼:404

服務器響應客戶端請求的時候,會返回HTTP狀態(tài)碼(HTTP Status Code)。狀態(tài)碼是表示服務器響應狀態(tài)的3位數(shù)字代碼,表示訪問請求已經(jīng)被服務器接收、理解并接收。

狀態(tài)碼可以分為下面5類:

  1. 1xx:指示信息–表示請求已接收,繼續(xù)處理;
  2. 2xx:成功–表示請求已被成功接收、理解、接受;
  3. 3xx:重定向–要完成請求必須進行更進一步的操作;
  4. 4xx:客戶端錯誤–請求有語法錯誤或請求無法實現(xiàn);
  5. 5xx:服務器端錯誤–服務器未能實現(xiàn)合法的請求。

下面是幾個比較常見的狀態(tài)碼。

1)200:OK

請求已成功,出現(xiàn)此狀態(tài)碼是表示正常狀態(tài)。

2)403:Forbidden

服務器已經(jīng)理解請求,但是拒絕執(zhí)行它,通常是服務器文件權(quán)限設置導致,比如:用戶無權(quán)訪問。

3)404:Not Found

用戶最常見的狀態(tài)碼是404,即請求失敗,通常是訪問的資源在服務器中不存在。用戶沒有找到自己需要的資源,給用戶的體驗很不好,自定義404錯誤頁面是提高用戶體驗的常見做法。

當用戶訪問的資源不存的時候,不是直接返回404,而是指向一個設計好的html 文件,有些網(wǎng)站甚至會為404設置個小游戲,作為彩蛋。

比如:游戲公司暴雪的404網(wǎng)頁延續(xù)了其冷酷的設計,一張被錘子砸得面目全非的網(wǎng)頁告訴用戶:你真的走錯路了。

PM技術(shù)課 | 計算機網(wǎng)絡

八卦:下載那些事兒

帶寬與網(wǎng)速

我們?nèi)ブ袊娦拧⒅袊?lián)通、中國移動辦理寬帶網(wǎng)絡的時候,帶寬通常是10M、20M,但安裝完成后,下載速度卻可能只有1M/s,遠遠達不到所說的10M。是運營商欺騙了我們么?帶寬、網(wǎng)速是什么,又有什么關(guān)系呢?

  • 帶寬是數(shù)據(jù)傳輸?shù)乃俣?,單位是比?秒(bps),10M=10Mbps。
  • 網(wǎng)速是數(shù)據(jù)傳輸?shù)乃俣龋菃挝慌c帶寬的單位不同,單位是字節(jié)/秒(B/s),1MB/s=1024KB/s 。

比特是信息的最小單位,1字節(jié)=8比特,1字節(jié)/秒=8比特/秒。因此, 10M帶寬=1.25MB/s網(wǎng)速,1M帶寬=0.125MB/s=128KB/s,運營商提供的10M網(wǎng)絡,轉(zhuǎn)換成網(wǎng)速也就是1.25M/s,跟我們?nèi)粘5捏w驗相符,這也算是運營商的“小詭計”了。

帶寬成本

對普通用戶而言,10M的寬帶,每個月的上網(wǎng)費用就要幾十塊錢。不只是對普通用戶,帶寬成本對互聯(lián)網(wǎng)公司而言同樣是巨大的成本,特別是對于各大視頻網(wǎng)站而言,帶寬成本是非常巨大的運營成本。

根據(jù)阿里云提供的數(shù)據(jù),按流量計費,要0.8元/G,一部電影通常在2G左右,下載一部電影就需要 1.6元,這個數(shù)據(jù)看起來可能不大,但考慮到用戶規(guī)模,數(shù)據(jù)就會變得很大了。如果有100萬個用戶,每個用戶每天看一部電影,每天的帶寬成本可能就有160萬元,這也是視頻網(wǎng)站難以盈利的重要原因。

為了減低帶寬成本,互聯(lián)網(wǎng)公司也是想盡辦法,比如:百度網(wǎng)盤會對非會員限速,巨大的帶寬成本是百度網(wǎng)盤這么做的重要原因。

面對用戶對限速的質(zhì)疑,百度網(wǎng)盤回應,“作為一款免費的云存儲產(chǎn)品,每年的服務器成本和帶寬成本是硬傷啊。百度網(wǎng)盤存活著為廣大用戶提供免費的空間內(nèi)存已經(jīng)是一筆需每年持續(xù)支出的高額成本。除此之外,還有服務成本和帶寬成本,寶寶們雖然已經(jīng)為家里的網(wǎng)絡網(wǎng)速買過單,但是當寶寶們打開百度網(wǎng)盤上傳和下載文件時,我們還需要為這些文件傳輸時的帶寬進行支付,用戶文件傳輸時帶寬越大我們需要支付的費用越高”。

即使是財大氣粗的百度公司,也要考慮到昂貴的帶寬成本,帶寬成本始終是高流量網(wǎng)站需要面對的問題。

PM技術(shù)課 | 計算機網(wǎng)絡

P2P

提高下載速度就要增加帶寬,增加帶寬,運營成本也隨之提高;如果不增加帶寬,下載速度就會降低,用戶體驗很差。

有沒有什么辦法可以解決成本和下載速度之間的矛盾呢?

P2P是個好主意,這里的P2P不是互聯(lián)網(wǎng)金融的P2P,而是點對點(peer to peer)通信的網(wǎng)絡技術(shù)。P2P依賴網(wǎng)絡中參與者的計算能力和帶寬,而不是把依賴都聚集在較少的幾臺服務器上,互聯(lián)網(wǎng)金融的P2P借鑒了這個技術(shù)概念。

定義有些拗口,我們舉個例子就明白了。

傳統(tǒng)下載方式是從服務器端下載文件到客戶端,由于是從一臺服務器下載,服務器所提供的帶寬是一定的,因此下載人越多速度越慢。假設服務器的帶寬是100M,即12500kb/s。有100臺客戶端連接,那么每一臺分享到的帶寬就是125kb/s,難怪下載速度這么慢!

PM技術(shù)課 | 計算機網(wǎng)絡

為了避免服務端帶寬的限制, P2P下載應運而生。與傳統(tǒng)下載不同,P2P下載是用戶越多,下載越快,這是因為P2P用的是一種共享的方式提供下載。

我們可能也會聽說過BT,BT全名叫”BitTorrent”, BT和P2P有些差別,P2P指的是數(shù)據(jù)的一種傳送方式,而BT是應用這種方式的軟件。但我們大多數(shù)人接觸較多的都是P2P,這里就用P2P直接使用P2P代指P2P和BT了,請讀者知曉。

PM技術(shù)課 | 計算機網(wǎng)絡

我們以迅雷下載為例,說明P2P的下載過程。

比如:用戶甲從網(wǎng)上下載《流浪地球》,得到一個下載地址A,然后使用迅雷下載,下載地址A就會被迅雷收集在服務器上,另外還有一個用戶乙使用迅雷從另外一個網(wǎng)站下載《流浪地球》,迅雷同樣會收集這個下載地址B。

這時候,迅雷就有了(下載地址A,下載地址B)兩個下載地址,同時用戶甲,用戶乙也會作為新的下載地址(行話叫做’“ 肉雞”),此時,迅雷就有(下載地址A,下載地址B,用戶甲,用戶乙)四個下載地址。

當新用戶丙使用迅雷下載《流浪地球》的時候,就可以分別從下載地址A,下載地址B,用戶甲,用戶乙這四個地方同時下載不同的片段,等下載完成之后再拼成一部完整的電影。

當然,用戶丙在下載的過程中,也給其他人提供下載地址,此時迅雷的數(shù)據(jù)庫里有(下載地址A、下載地址B、用戶甲、用戶乙、用戶丙)五個下載地址,這也是迅雷下載速度較快的原因。不只是迅雷,快播、電驢、BT下載等P2P下載也是類似的原理。

通過P2P下載,在不增加服務器帶寬的時候,卻能提高下載速度!網(wǎng)絡真奇妙!

 

本文由@李艷賓 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自Unsplash, 基于CC0協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 最后一點不是很明白,下載地址A、下載地址B、用戶甲、用戶乙作為用戶丙的下載地址,那用戶甲或者用戶乙關(guān)機了,那用戶丙下載的電影不是少了一段?

    來自安徽 回復
  2. 下載那段內(nèi)容,異常精彩!感謝

    來自福建 回復
  3. 獲益匪淺

    回復
  4. 通俗易懂

    來自廣東 回復
  5. 嗯,看不懂

    來自廣東 回復
    1. 是專業(yè)名詞、概念太多,而平時基本接觸不到這些東西嗎?

      來自浙江 回復
  6. 加個雞腿

    來自廣東 回復
  7. 作者辛苦了

    來自廣東 回復