詳解TCP/IP的三次握手與四次揮手

在瞭解後面的知識之前我們先來了解一下OSI七層模型吧。

一、What is the OSI model?

開放式系統互聯通信參考模型(英語:Open System Interconnection Reference Model,縮寫爲 OSI),簡稱爲OSI模型(OSI model),一種概念模型,由國際標準化組織(ISO)提出,一個試圖使各種計算機在世界範圍內互連爲網絡的標準框架。定義於ISO/IEC 7498-1。

1483069521

第7層應用層(Application Layer)

主要功能: 爲應用軟件提供接口,使應用程序能夠使用網絡服務
典型設備: 網關
典型協議、標準和應用: http(80)、ftp(20/21)、smtp(25)、pop3(110)、telnet(23)、dns(53)

第6層表示層(Presentation Layer)

主要功能: 數據的解碼和編碼,數據的加密和解密,數據的壓縮和解壓縮
典型設備: 網關
典型協議、標準和應用: ASCLL、PICT、TIFF、JPEG、 MIDI、MPEG

第5層會話層(Session Layer)

主要功能: 建立、維護、管理應用程序之間的會話
典型設備: 網關
典型協議、標準和應用: RPC、SQL、NFS 、X WINDOWS、ASP

第4層傳輸層(Transport Layer)

主要功能: 負責建立端到端的鏈接,保證保溫在端到端之間的傳輸
典型設備: 網關
典型協議、標準和應用: TCP、UDP、SPX

第3層網絡層(Network Layer)

主要功能: 負責將分組數據從源端傳輸到目的端,網絡層的主要作用就是路由和尋址
典型設備: 路由器
典型協議、標準和應用: IP、IPX、APPLETALK、ICMP

第2層數據鏈接層(Data Link Layer)

主要功能: 在不可靠的物理鏈路上,提供可靠的數據傳輸服務
典型設備: 交換機、網橋、網卡
典型協議、標準和應用: 802.2、802.3ATM、HDLC、FRAME RELAY

第1層物理層(Physical Layer)

主要功能: 利用傳輸介質爲數據鏈路層提供物理連接,實現比特流的透明傳輸
典型設備: 集線器、中繼器
典型協議、標準和應用: V.35、EIA/TIA-232

二、TCP/IP協議族常用協議

應用層: TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
傳輸層: TCP,UDP
網絡層: IP,ICMP,OSPF,EIGRP,IGMP
數據鏈路層: SLIP,CSLIP,PPP,MTU

三、What is TCP/IP?

互聯網協議族(英語:Internet Protocol Suite,縮寫爲IPS)[1],是一個網絡通信模型,以及一整個網絡傳輸協議家族,爲互聯網的基礎通信架構。它常被通稱爲TCP/IP協議族(英語:TCP/IP Protocol Suite,或TCP/IP Protocols),簡稱TCP/IP[2]。因爲這個協議家族的兩個核心協議,包括TCP(傳輸控制協議)和IP(網際協議),爲這個家族中最早通過的標準[3]。由於在網絡通訊協議普遍採用分層的結構,當多個層次的協議共同工作時,類似計算機科學中的堆棧,因此又被稱爲TCP/IP協議棧(英語:TCP/IP Protocol Stack)[4][5] 。這些協議最早發源於美國國防部(縮寫爲DoD)的ARPA網項目,因此也被稱作DoD模型(DoD Model)[6]。這個協議套組由互聯網工程任務組負責維護。

TCP/IP提供點對點的鏈接機制,將數據應該如何封裝、定址、傳輸、路由以及在目的地如何接收,都加以標準化。它將軟件通信過程抽象化爲四個抽象層,採取協議堆棧的方式,分別實現出不同通信協議。協議套組下的各種協議,依其功能不同,被分別歸屬到這四個層次結構之中[7][8],常被視爲是簡化的七層OSI模型。

1483069588

在建立TCP連接之前需要進行三次握手,以便於鏈接到服務器,如果要斷開服務器需要進行四次揮手,具體流程如下。

四、TCP/IP三次握手

1483069609

  1. 第一次握手: Client將標誌位syn設置爲1,隨機產生一個Number值seq=100,並將數據發送給Server,Client進入SYN_SENT狀態,等待Server確認;
  2. 第二次握手: Server收到數據包後Client設置的標誌位syn=1知道Client要求建立連接,Server將標誌位syn和ack都置爲1,並且發送一個確認序號ack=100+1,然後隨機產生一個值seq=130,並將該數據包發送給CLient以確認連接請求,Server進入SYN_RCVD狀態。
  3. 第三次握手: Client收到確認後,檢查ack狀態是否爲100+1,ACK是否爲1,如果正確則將標誌位ACK置爲1,ack=130+1,並將該數據包發送給Server,Server檢查ack是否爲130+1,ACK是否爲1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸數據了。

一個完整的三次握手也就是請求—應答—再次確認。

五、TCP/IP四次揮手

爲什麼要揮手,簡單點來說就是既然建立了鏈接,那麼肯定還要斷開連接吖,連接總不能一直佔用吧,這樣多浪費系統該資源,下面讓我們來看看四次揮手的流程。

  1. 第一次揮手: Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態。
  2. 第二次揮手: Server收到FIN後,發送一個ACK給Client,確認序號爲ack=100+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。
  3. 第三次揮手: Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。
  4. 第四次揮手: Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲131+1,Server進入CLOSED狀態,完成四次揮手。

六、Q/A

  • 爲什麼建立連接是三次握手,而關閉連接卻是四次揮手呢?

這是因爲服務端在 LISTEN 狀態下,收到建立連接請求的 SYN 報文後,把 ACK 和 SYN 放在一個報文裏發送給客戶端。而關閉連接時,當收到對方的 FIN 報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方也未必全部數據都發送給對方了,所以己方可以立即 Close,也可以發送一些數據給對方後,再發送 FIN 報文給對方來表示同意現在關閉連接,因此,己方 ACK 和 FIN一般都會分開發送。

  • 爲什麼建立連接要三次握手?

目的: 防止已經失效的連接請求到達服務端,創建無效的連接,浪費資源。

說明: 當客戶端發出的第一個連接請求在網絡上的某個節點被滯留了(網絡會存在許多不可靠的因素),過一段時間後突然又到達了服務端,服務端誤以爲這是一個新的建立連接的請求,於是就會向客戶端發出確認包並建立連接。

實際上客戶端當前並沒有發出創建連接的請求,就會丟棄服務端的確認包。而服務端卻創建了連接並等待客戶端發送數據,浪費了相關的資源。

  • SYN 攻擊

在三次握手過程中,服務器發送 SYN-ACK 之後,收到客戶端的 ACK 之前的 TCP 連接稱爲半連接 (half-open connect)。此時服務器處於 SYN_RECV 狀態,當收到 ACK 後,服務器轉入 ESTABLISHED 狀態.

SYN 攻擊就是:攻擊客戶端在短時間內僞造大量不存在的 IP 地址,向服務器不斷地發送 SYN 包,服務器回覆 ACK 確認包,並等待客戶的確認從而建立連接。由於源地址是不存在的,不會再發送 ACK 確認包,所以服務器需要不斷的重發直至超時,這些僞造的 SYN 包將長時間佔用未連接隊列,正常的 SYN 請求被丟棄,目標系統運行緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。

SYN 攻擊是一個典型的 DDOS 攻擊。檢測 SYN 攻擊非常的方便,當你在服務器上看到大量的半連接狀態時,特別是源 IP 地址是隨機的,基本上可以斷定這是一次 SYN 攻擊

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

雖然按道理,四個報文都發送完畢,我們可以直接進入 CLOSE 狀態了,但是我們必須假象網絡是不可靠的,有可以最後一個 ACK 丟失。所以 TIME_WAIT 狀態就是用來重發可能丟失的 ACK 報文。

========================================================

聲明:本文轉自:https://blog.ansheng.me/article/tcp-ip-three-handshakes-and-four-waving/

如需轉載請註明原文出處!!!

========================================================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章