計算機網絡基礎知識講解
TCP/IP
TCP/IP是指能夠在多個不同網絡間實現信息傳輸的協議簇
TCP/IP協議不僅僅指的是TCP 和IP兩個協議,而是指一個由FTP、SMTP、TCP、UDP、IP等協議構成的協議簇, 只是因爲在TCP/IP協議中TCP協議和IP協議最具代表性,所以被稱爲TCP/IP協議
爲什麼會有這些協議的東西呢?其實就是約定的一個規矩,一個在網絡通信時定義的規矩,好讓大家都遵守並且準確完成通信。
ok,下面具體說下有哪幾層:
- 應用層:HTTP,FTP,DNS
- 傳輸層:TCP,UDP
- 網絡層:IP
- 數據鏈路層:以太網,Wi-Fi
應用層
應用層其實就是直接跟應用交互的,比如我們平時用瀏覽器訪問地址,手機中請求接口,都是屬於HTTP應用層的場景。
這一層是不管數據傳輸的具體情況的,只管發送和接受數據,作用在於產生數據報文。
一般就是使用最多的就是HTTP,那FTP,DNS又是什麼呢?
FTP(File Transfer Protocol):文件傳輸協議,端口號:21;用戶可通過客戶機程序向遠程主機上傳文件;或從遠程主機上下載文件。
DNS(Domain Name System):域名解析協議,端口號:53;通過域名解析獲得域名所對應的IP
傳輸層
這一層用來負責數據傳輸的具體過程,保證每個數據能夠準確的發送傳輸過去。
這一層作用在於告訴數據報文如何去目的地,比如要拆分報文之類的。
其中,TCP和UDP有什麼區別呢?
- TCP 是面向連接的,UDP 是面向無連接的
- UDP程序結構較簡單
- TCP 是面向字節流的,UDP 是基於數據報的
- TCP 保證數據正確性,UDP 可能丟包
- TCP 保證數據順序,UDP 不保證
可以看到TCP適用於穩定的應用場景,他會保證數據的正確性和順序,所以一般的瀏覽網頁,接口訪問都使用的是TCP傳輸。
而UDP是一種結構簡單的協議,不會考慮丟包啊,建立連接等。所以適用於直播,遊戲等場景。
說到TCP,就要說到TCP的三次握手和四次揮手了
TCP建立連接需要三次握手:
- 客戶端A向服務端B表示自己想跟B連接(客戶端發送syn包(syn=x)到服務器,A進入SYN_SENT狀態)
- 服務端B收到信息,表示我也想跟你連接(服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(syn=y),即SYN+ACK包,B進入SYN_RECV狀態)
- 客戶端A收到消息,告訴B我收到了你想跟我連接,我們開始連接吧(客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),AB進入ESTABLISHED狀態)
TCP斷開連接需要四次揮手:
- 客戶端A向服務端B表示自己想跟B斷開連接了(Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態)
- 服務端B收到消息後,告訴A我收到消息啦,但是等等我這邊還有數據沒傳完哦(Server收到FIN後,發送一個ACK給Client,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。)
- 服務端B告訴A,我這邊數據發完了,我要斷開和你的連接了哦。(Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。)
- 客戶端A收到消息,並告訴B我收到消息了,你斷開吧。(Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次揮手)
爲什麼連接是三次握手,斷開需要四次呢?
關閉的時候,服務器端B收到客戶端A關閉請求後,不能馬上關閉,因爲客戶端沒數據傳輸了,但是服務器端有可能還有數據還在傳輸給A,所以在收到A關閉請求後,等數據傳完後再告訴A,可以關閉了。
網絡層
IP網絡層主要負責網絡連接的建立和終止以及IP地址的尋找
這一層的作用在於告訴數據報文去哪,要找到數據報文的目的地
數據鏈路層
數據鏈路層是負責網絡在現實世界的一個表現,比如以太網,Wi-Fi
這一層的作用就是告訴數據報文如何走了,是數據報文實際走的路線
形象總結
ok,現在大家都基本清楚了每一層的含義了把,這裏我總結了一個比較形象的例子,讓大家更深刻的理解到網絡分層以及數據傳輸的過程。
故事開始於一個公子想向一位小姐寫情書。。。
HTTP
Hypertext Transfer Protocol,超⽂文本傳輸協議
位於TCP/IP協議族的應用層,用於網絡上請求和傳輸數據
URL格式
http://www.baidu.com:80/s?ie=utf-8
- http 屬於協議類型
- www.baidu.com 屬於服務器地址
- 80 屬於端口號
- /s 屬於路徑
- ie=utf-8 屬於攜帶參數
HTTP報文
HTTP報文分爲請求報文和響應報文
請求報文
//請求行
GET /s HTTP/1.1
//Headers
Host: www.baidu.com
Content-Type: text/plain
//Body
搜索****
請求報文分爲三部分:
- 請求行 (包括method、path、HTTP版本)
- Headers
- Body
其中請求報文中的請求方法 常見有四種
- GET 獲取資源,沒有body,冪等性
- POST 增加或者修改資源,有body
- PUT 修改資源,有body,冪等性
- DELETE 刪除資源,冪等性
什麼是分塊傳輸,什麼是斷點續傳?
1、分塊傳輸指的是服務器發給客戶端的數據可以分成多個部分傳輸。
使用方法:
- 消息頭部設置 Transfer-Encoding: chunked
- 每一塊會表明長度
- 由一個標明長度爲0的chunk標示結束
目的:
讓客戶端快速響應,減少等待時間
2、斷點續傳指的是客戶端想從文件上次中斷的地方開始下載或者上傳
使用方法:
- 請求報文頭部信息中加上Range字段,表示要從哪個字節開始下載(Range: bytes=0-499)
- 響應報文頭部信息中加上Content-Range,表示當前發送的數據的範圍,以及文件總大小(Content-Range: bytes 0-499/22400)
- ETag字段表示文件的唯一性
響應報文
//狀態行
HTTP/1.1 200 OK
//Headers
Content-Type: application/json; charset=utf-8
//Body
[{"info":"xixi"}]
響應報文分爲三部分:
- 狀態行 (包括HTTP版本、狀態碼,狀態信息)
- Headers
- Body
響應報文中的狀態碼 大概分爲五種類型
- 1開頭, 代表臨時性消息,比如100(繼續發送)
- 2開頭, 代表請求成功,比如200(OK)
- 3開頭, 代表重定向,比如304(內容無改變)
- 4開頭, 代表客戶端的一些錯誤,比如403(禁止訪問)
- 5開頭,代表服務器的一些錯誤,比如500
HTTPS
HTTP over SSL ,工作在 SSL (或 TLS)上的 HTTP
其實說白了,HTTPS就是在原本的http傳輸協議下層加了一個安全層(SSL),客戶端和服務器端採用對稱加密的方法進行加密傳輸。
只是傳輸過程中使用的對稱加密哦,在整個驗證證書到傳輸的過程中其實是用到了對稱加密,非對稱加密,和哈希算法。使用對稱加密傳輸的原因是非對稱加密的複雜性可能會影響到網絡通信性能。
通信流程如下:
- 首先客戶端請求建立TLS連接,發送tcp消息
- 服務器收到消息,發送證書給客戶端
- 客戶端收到證書,並驗證
- 驗證成功,和服務器協商出對稱加密
- 開始用對稱加密方式通信
其中第三步,服務器的證書,一般是由三層信息組成
- 服務器的公鑰,名字和地區,證書籤名
- 證書籤名的簽發機構的公鑰,名字和地區,簽發機構的證書籤名
- 根證書機構的公鑰,名字和地區
三環環環相扣,客戶端的系統驗證根證書,根證書驗證簽發機構,簽發機構驗證服務器公鑰。
這次內容有點多切枯燥,但都是基礎知識,面試也會問到,所以需要我們記住並理解,加油吧!🚀
你的一個👍,就是我分享的動力❤️。