1. 程式人生 > 實用技巧 >網路基礎 -2

網路基礎 -2

TCP 握手和揮手

TCP 協議

​ 全雙工協議

三次握手

​ 第一次握手,(SYN=1, seq=x),客戶端傳送一個 SYN標誌 位置1的包, 指明 客戶端打算連線的服務的埠,以及初始序號X, 儲存在 包頭的 序列號(Sequence Number) 欄位裡。 客戶段進去 SYN_SENT 狀態。

​ 第二次握手,(SYN=1, ACK=1,seq=y, ack=x+1), 伺服器 發回確認包(ACK)應答。即 SYN 和ACK 標誌位 均為1. 伺服器端 選擇 自己 ISN序列號,放到 Seq域裡, 同時將 確認 序號(Acknowledgement Number)設定為 客戶的 ISN ➕ 1.即 x+ 1. 傳送結束,伺服器端,進入 SYN _RCVD狀態。

​ 第三次握手,( ACK=1,seq=y, ack=y+1) 客戶端再次傳送確認包(ACK),SYN 標誌位 為1,ACk 標誌位 為1 並且把伺服器發來的 ACK 的 序號端(seq)+1, 放在確定欄位中 傳送給 對方,並且 在 資料段 放 ISN 傳送完畢,客戶端 進入ESTABLISHED 狀態,當伺服器端接受到這個包時,也進入ESTABLISHED 狀態。

DDoS(分散式拒絕服務) 攻擊

SYN 攻擊就是 Client 在短時間內偽造大量不存在的 IP 地址,並向 Server 不斷地傳送 SYN 包,Server 回覆確認包,並等待 Client 的確認,由於源地址是不存 在的,因此,Server 需要不斷重發直至超時,這些偽造的 SYN 包將產時間佔用未連線隊 列,導致正常的 SYN 請求因為佇列滿而被丟棄,從而引起網路堵塞甚至系統癱瘓。

​ SYN 攻 擊時一種典型的 DDOS 攻擊,檢測 SYN 攻擊的方式非常簡單,即當 Server 上有大量半連線 狀態且源 IP 地址是隨機的,則可以斷定遭到 SYN 攻擊了。

四次揮手

傳送4個包 確認 連線的斷開。

​ 第一次揮手 (FIN=1,seq=u),客戶端傳送一個 FIN 標誌位 為 1 的包,表示自己已經沒有資料 可以傳送了,但是仍然可以接受資料。傳送完畢後,客戶端進入 FIN_WAIT_1 狀態。

​ 第二次揮手(ACK=1,ack=u+1),伺服器端確認客戶端的 FIN 包,傳送一個確認包,表明自己接受到了客戶端關閉連線的請求, 但還沒有準備好關閉連線。傳送完畢後,伺服器端進入 CLOSE_WAIT

狀態,客戶端接收到這 個確認包之後,進入 FIN_WAIT_2 狀態,等待伺服器端關閉連線。

​ 第三次揮手(FIN=1,seq=w,ACK=1,ack=u+1),伺服器端準備好關閉連線時,向客戶端傳送結束連線請求,FIN 置為 1。傳送完畢後,伺服器 端進入 LAST_ACK 狀態,等待來自客戶端的最後一個 ACK。

​ 第四次揮手(ACK=1,ack=w+1) 客戶端接收到來自伺服器端的關閉請求,傳送一個確認包,並進入 TIME_WAIT 狀態,等待 可能出現的要求重傳的 ACK 包。 伺服器端接收到這個確認包之後,關閉連線,進入 CLOSED 狀態。

客戶端等待了某個固定時間(兩個最大段生命週期,2MSL,2 Maximum Segment Lifetime) 之後,沒有收到伺服器端的 ACK,認為伺服器端已經正常關閉連線,於是自己也關閉連線, 進入 CLOSED 狀態。

為什麼 TIME_WAIT 狀態需要經過 2MSL(最大報文段生存時間)才能返回到 CLOSE 狀態?

必須假定 網路是不可靠的,有可以最後一個 ACK 丟失。所以 TIME_WAIT 狀態就是用來重發可能丟 失的 ACK 報文。

理解 TCP 的通訊原理及 IO 阻塞

接收緩衝區

傳送緩衝區

滑動視窗; 圖示

​ 一種流量控制技術。 傳送和接收放都會維護一個 資料幀的序列。

  • 阻塞
    • todo
  • 非阻塞
  • IO多路複用

一臺機器理論能支援的連線數

標示 一個tcp 連線:

> source_ip, source_port, destination_ip, destination_port
>
> 一個不同,就是不同 的連線

連線數的設定

1、記憶體大小。 每個 tcp 都佔用一塊 記憶體
2、檔案控制代碼限制,一個tcp 佔用一個 fd,一旦超過限制,返回 “can't open so many files” 異常。 如下可以進行一些調整。
  2.1、ulimit -n  檢視但前一個程序 最大能開啟的 檔案數,linux 一般 1024, mac 256
  2.2、可 通過 vim /etc/security/limits.conf 修改系統醉倒的檔案 開啟數的限制
  > soft nofile 2048
  > hard nofile 2048
  >  表示修改所有使用者限制、soft/hard 表示軟限制還是硬限制,2048 表示修改以後的值
  2.3、可通過【cat /proc/sys/fs/file-max】 檢視linux 系統最大 開啟檔案數限制,標但前 伺服器 最多能同==同時開啟的檔案數
3、頻寬資源的限制

參考:

mic 老師的遠端通訊協議