自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

TCP網絡那點破事!三次握手、四次揮手、TIME-WAIT、HTTP 2.0 ....

網絡 通信技術
今天主要給各位分享TCP網絡的一些常見知識點,日常工作或面試會經常遇到??紤]內容篇幅不小,建議先收藏,慢慢咀嚼。

[[419435]]

大家好,我是Tom哥~

今天主要給各位分享TCP網絡的一些常見知識點,日常工作或面試會經常遇到??紤]內容篇幅不小,建議先收藏,慢慢咀嚼。

如果有幫助,也請轉給身邊的朋友們,”獨樂樂不如眾樂樂“

首先,來個目錄,讓大家對文章內容先有個直觀了解

網絡的七層模型,簡單介紹每層的作用?

答案:分為7層,從下到上依次是:

  • 應用層:計算機用戶與網絡之間的接口,常見的協(xié)議有:HTTP、FTP、 SMTP、TELNET
  • 表示層:數據的表示、安全、壓縮。將應用處理的信息轉換為適合網絡傳輸的格式。
  • 會話層:建立和管理本地主機與遠程主機之間的會話。
  • 傳輸層:定義傳輸數據的協(xié)議端口號,以及流控和差錯校驗,保證報文能正確傳輸。協(xié)議有TCP、UDP
  • 網絡層:路由選擇算法,進行邏輯地址尋址,實現(xiàn)不同網絡之間的最佳路徑選擇。協(xié)議有IP、ICMP
  • 數據鏈路層:接收來自物理層的位流形式的數據,并封裝成幀,傳送到上一層;同樣,也將來自上層的數據幀,拆裝為位流形式的數據轉發(fā)到物理層。這一層的數據叫做幀。
  • 物理層:建立、維護、斷開物理連接。傳輸比特流(將1、0轉化為電流強弱來進行傳輸,到達目的地后在轉化為1、0,也就是我們常說的數模轉換與模數轉換)。這一層的數據叫做比特。

TCP 報文首部有哪些字段?

答案:

  • 源端口、目的端口:各占2個字節(jié),表示數據從哪個進程來,去往哪個進程
  • 序號(Sequence Number):占4個字節(jié),TCP連接中傳送的數據每一個字節(jié)都會有一個序號
  • 確認號(Acknowledgement Number):占4個字節(jié),另一方發(fā)送的tcp報文段的響應
  • 數據偏移:頭部長度,占4個字節(jié),表示TCP報文段的數據距離TCP報文段的起始處有多遠。
  • 6位標志位:
    • URG:緊急指針是否有效
    • ACK:表示確認號是否有效
    • PSH:提示接收端應用程序立刻將數據從tcp緩沖區(qū)讀走
    • RST:表示要求對方重新建立連接
    • SYN:這是一個連接請求或連接接受的報文
    • FIN:告知對方本端要關閉連接
  • 窗口大?。赫?個字節(jié),用于TCP流量控制。告訴對方本端的TCP接收緩沖區(qū)還能容納多少字節(jié)的數據,這樣對方就可以控制發(fā)送數據的速度。
  • 校驗和:占2個字節(jié),由發(fā)送端填充,接收端對TCP報文段執(zhí)行CRC算法以檢驗TCP報文段在傳輸過程中是否損壞。檢驗的范圍包括頭部、數據兩部分,是TCP可靠傳輸的一個重要保障。
  • 緊急指針:占2個字節(jié),一個正的偏移量。它和序號字段的值相加表示最后一個緊急數據的下一個字節(jié)的序號,用于發(fā)送端向接收端發(fā)送緊急數據。

TCP 三次握手過程?

答案:目的是同步連接雙方的序列號和確認號,并交換TCP窗口。

  • 第一次握手,客戶端發(fā)送(seq=x),客戶端進入SYN_SEND狀態(tài)
  • 第二次握手,服務端響應(Seq=y, Ack=x+1),服務器端就進入SYN_RCV狀態(tài)。
  • 第三次握手,客戶端收到服務端的確認后,發(fā)送(Ack=y+1),客戶端進入ESTABLISHED狀態(tài)。當服務器端接收到這個包時,也進入ESTABLISHED狀態(tài)。

為什么是三次握手,而不是兩次或四次?

答案:

如果只有兩次握手,那么服務端向客戶端發(fā)送 SYN/ACK 報文后,就會認為連接建立。但是如果客戶端沒有收到報文,那么客戶端是沒有建立連接的,這就導致服務端會浪費資源。

使用兩次握手無法建立 TCP 連接,而使用三次握手是建立連接所需要的最小次數

TCP 四次揮手的過程?

答案:

  • 第一次揮手:客戶端向服務端發(fā)送連接釋放報文
  • 第二次揮手:服務端收到連接釋放報文后,立即發(fā)出確認報文。這時 TCP 連接處于半關閉狀態(tài),即客戶端到服務端的連接已經釋放了,但是服務端到客戶端的連接還未釋放。表示客戶端已經沒有數據發(fā)送了,但是服務端可能還要給客戶端發(fā)送數據。
  • 第三次揮手:服務端向客戶端發(fā)送連接釋放報文
  • 第四次揮手:客戶端收到服務端的連接釋放報文后,立即發(fā)出確認報文。此時,客戶端就進入了 TIME-WAIT 狀態(tài)。注意此時客戶端到 TCP 連接還沒有釋放,必須經過 2*MSL(最長報文段壽命)的時間后,才進入CLOSED 狀態(tài)。

為什么需要四次揮手?

答案:TCP 是全雙工。一方關閉連接后,另一方還可以繼續(xù)發(fā)送數據。所以四次揮手,將斷開連接分成兩個獨立的過程。

客戶端 TIME-WAIT ,為什么要等待 2MSL 才進入 CLOSED 狀態(tài)?

答案:MSL 是報文段在網絡上最大存活時間。

確保 ACK 報文能夠到達服務端,從而使服務端正常關閉連接??蛻舳嗽诎l(fā)送完最后一個 ACK 報文段后,再經過 2MSL,就可以保證本連接持續(xù)的時間內產生的所有報文段都從網絡中消失。這樣就可以使下一個連接中不會出現(xiàn)這種舊的連接請求報文段。

一臺 8G 內存服務器,可以同時維護多少個連接?

答案:發(fā)送、接收緩存各4k,還要考慮socket描述符,一個tcp連接需要占用的最小內存是8k,那么最大連接數為:8*1024*1024 K / 8 K = 1048576 個,即約100萬個tcp長連接。

什么是拆包?

答案:傳輸層封包不能太大,基于這個限制,往往以緩沖區(qū)大小為單位,將數據拆分成多個 TCP 段(TCP Segment)傳輸。在接收數據的時候,一個個 TCP 段又被重組成原來的數據。簡單來講分為幾個過程:拆分——傳輸——重組。

什么是粘包?

答案:解決數據太小問題,防止多次發(fā)送占用資源。TCP 協(xié)議將它們合并成一個 TCP 段發(fā)送,在目的地再還原成多個數據。

緩沖區(qū)是做什么用?

答案:緩沖區(qū)是在內存中開辟的一塊區(qū)域,目的是緩沖。當應用頻繁地通過網卡收、發(fā)數據,網卡只能一個一個處理。當網卡忙不過來的時候,數據就需要排隊,也就是將數據放入緩沖區(qū)。

注意:TCP Segment 的大小不能超過緩沖區(qū)大小。

TCP 協(xié)議是如何保證數據的順序?

答案:

大數據拆包成多個片段,發(fā)送可以保證有序,但是由于網絡環(huán)境復雜,并不能保證它們到達時也是有序的,為了解決這個問題,對每個片段用Sequence Number編號,接收數據的時候,通過 Seq 進行排序。

注意:seq是累計的發(fā)送字節(jié)數

TCP 協(xié)議如何解決丟包?

答案:丟包需要重發(fā),關鍵是如何判斷有沒有丟包!

每一個數據包,接收方都會給發(fā)送方發(fā)響應。每個 TCP 段發(fā)送時,接收方已經接收了多少數據,用 Acknowledgement Number(簡寫ACK) 表示。

注意:ack是累計的接收字節(jié)數,表示這個包之前的包都已經收到了。

什么是 MSS ?

答案:MSS 全稱 Maximun Segment Size。是TCP Header 中的可選項(Options),控制了 TCP 段的大小,不能由單方決定,需要雙方協(xié)商。

TCP 協(xié)議如何控制流量傳輸速度?

答案:簡單講通過滑動窗口。發(fā)送、接收窗口的大小可以用來控制 TCP 協(xié)議的流速。窗口越大,同時可以發(fā)送、接收的數據就越多,吞吐量也就越大。但是窗口越大,如果數據發(fā)生錯誤,損失也就越大,因為需要重傳越多的數據。

TCP每個請求都要有響應,如果一個請求沒有收到響應,發(fā)送方就會認為這次發(fā)送出現(xiàn)了故障,會觸發(fā)重發(fā)。為了提升吞吐量,一個TCP段再沒有收到響應時,可以繼續(xù)發(fā)送下一個段。

  • 窗口區(qū)域包含兩類數據:已發(fā)送未確認、未發(fā)送(即將發(fā)送)
  • 窗口中序號最小的分組如果收到 ACK,窗口就會向右滑動
  • 滑動窗口的size規(guī)格可能會變化,需要從ACK數據包實時取最新值
  • 如果最小序號的分組長時間沒有收到 ACK,就會觸發(fā)整個窗口的數據重新發(fā)送

HTTP 1.0 、1.1 和 HTTP 2.0 有什么區(qū)別?

答案:

1、HTTP 1.0

  • 默認是短連接,每次與服務器交互,都需要新開一個連接。

2、HTTP 1.1

  • 默認持久化連接,建立一次連接,多次請求均由這個連接完成。

3、HTTP 2.0

  • 二進制分幀:在應用層和傳輸層之間加了一個二進制分幀層,將所有傳輸的信息分割為更小的消息和幀(frame),并對它們采用二進制格式的編碼。減少服務端的壓力,內存占用更少,連接吞吐量更大
  • 多路復用:允許同時通過單一的HTTP/2.0連接發(fā)起多次的請求-響應消息。
  • 頭部壓縮:采用了Hpack頭部壓縮算法對Header進行壓縮,減少重復發(fā)送。
  • 服務器推送:服務器主動將一些資源推送給瀏覽器并緩存起來。

HTTP 與 HTTPS 的區(qū)別?

答案:HTTPS = HTTP + SSL/TLS

HTTP 采用明文通訊;端口 80

HTTPS 在HTTP的基礎上加入了SSL/TLS協(xié)議,SSL/TLS依靠證書來驗證服務器的身份,并為瀏覽器和服務器之間的通信加密。端口 443

HTTP 協(xié)議為什么要設計成無狀態(tài)?

答案:HTTP是一種無狀態(tài)協(xié)議,每個請求都是獨立執(zhí)行,請求/響應。這樣設計的重要原因是,降低架構設計復雜度,畢竟服務器一旦帶上了狀態(tài),擴容、縮容、路由都會受到制約。無狀態(tài)協(xié)議不要求服務器在多個請求期間保留每個用戶的信息。

但,你可能會問,如果有登錄要求的業(yè)務怎么辦?HTTP協(xié)議提供擴展機制,Header中增加了Cookie,存儲在客戶端,每次請求時自動攜帶,采用空間換時間機制,滿足上下請求關聯(lián)。雖然浪費了些網絡帶寬,但是減少了復雜度。當然為了減輕網絡負擔,瀏覽器會限制Cookie的大小,不同瀏覽器的限制標準略有差異,如:Chrome 10,限制最多 180個,每個Cookie大小不能超過 4096 bytes

HTTPS 的訪問流程是什么?

答案:

  • 客戶端發(fā)起一個http請求,告訴服務器自己支持哪些hash算法。
  • 服務端把自己的信息以數字證書的形式返回給客戶端(公鑰在證書里面,私鑰由服務器持有)。
  • 客戶端收到服務器的響應后會先驗證證書的合法性(證書中包含的地址與正在訪問的地址是否一致,證書是否過期)
  • 如果證書驗證通過,就會生成一個隨機的對稱密鑰,用證書的公鑰加密。
  • 客戶端將證書公鑰加密后的密鑰發(fā)送給服務端
  • 服務端用私鑰解密,解密之后就得到客戶端的密鑰
  • 然后,客戶端與服務端就靠密鑰完成明文加密、安全通信、對稱解密

對稱加密與非對稱加密有什么區(qū)別?

答案:

  • 對稱加密。加密和解密使用同一個密鑰。速度快。常用的如:AES、DES
  • 非對稱加密。公鑰與私鑰配對出現(xiàn),公鑰對數據加密,私鑰對數據解密。常用的如:RSA、DSS

TCP 抓包用什么工具?

答案:Wireshark,應用最廣泛的網絡協(xié)議分析器。功能非常豐富

  • 支持數百個協(xié)議
  • 實時捕獲、離線分析
  • 支持 Windows、Linux、macOS、Solaris、FreeBSD、NetBSD等平臺;
  • 界面化操作
  • 支持 Gzip
  • 支持 IPSec

 

 

責任編輯:武曉燕 來源: 微觀技術
相關推薦

2015-10-13 09:42:52

TCP網絡協(xié)議

2019-06-12 11:26:37

TCP三次握手四次揮手

2023-10-24 15:22:09

TCPUDP

2024-01-12 08:23:11

TCPACK服務器

2021-07-03 17:47:25

TCP控制協(xié)議

2021-01-29 06:11:08

TCP通信三次握手

2019-02-01 09:38:16

2021-05-18 12:27:40

TCP控制協(xié)議

2019-01-25 09:21:30

2020-02-17 10:10:43

TCP三次握手四次揮手

2017-09-25 21:27:07

TCP協(xié)議數據鏈

2021-05-28 09:08:20

TCP連接序列號

2020-06-29 14:50:47

TCP狀態(tài)ACK

2015-11-09 09:58:56

2023-10-28 09:07:57

TCP面試三次握手

2022-11-17 10:20:49

TCP三次握手四次揮手

2014-09-19 09:46:46

TCPIP

2023-10-17 15:44:19

TCP四次揮手

2023-11-01 08:04:08

WiresharkTCP協(xié)議

2021-08-04 08:01:28

Linux 三次握手Linux 系統(tǒng)
點贊
收藏

51CTO技術棧公眾號