TCP協議與sctp

TCP協議與sctp

OSI : 開放式系統互聯
在這裏插入圖片描述
OSI模型裏最重要的一點就是分層。OSI模型按層次分別爲應用層,表示層,會話層,傳輸層,網絡層,數據鏈路層,物理層。上三層爲控制層面,下四層爲數據層面。當然也有按不同的模型分爲5層的。
應用層:接收用戶的數據,人機交互的接口,面向的應用程序。
表示層:將邏輯語言(軟件語言)轉換爲機器語言(二進制語言),翻譯
會話層:針對傳輸的每一種建立(管理:維持、終止)一條虛連接(爲了防止不同類型的數據互相影響)
傳輸層該層爲兩臺主機上的應用程序提供端到端的通信。傳輸層有兩個傳輸協議:TCP(傳輸控制協議)和 UDP(用戶數據報協議)。其中,TCP是一個可靠的面向連接的協議,udp是不可靠的或者說無連接的協議
網絡層:決定如何將數據從發送方路由到接收方。網絡層通過綜合考慮發送優先權,網絡擁塞程度,服務質量以及可選路由的花費等來決定從網絡中的A節點到B節點的最佳途徑。即建立主機到主機的通信
數據鏈路層:控制網絡層與物理層之間的通信,主要功能是保證物理線路上進行可靠的數據傳遞。爲了保證傳輸,從網絡層接收到的數據被分割成特定的可被物理層傳輸的幀。幀是用來移動數據結構的結構包,他不僅包含原始數據,還包含發送方和接收方的物理地址以及糾錯和控制信息。其中的地址確定了幀將發送到何處,而糾錯和控制信息則確保幀無差錯到達。如果在傳達數據時,接收點檢測到所傳數據中有差錯,就要通知發送方重發這一幀。
物理層:該層負責 比特流在節點之間的傳輸,即負責物理傳輸,這一層的協議既與鏈路有關,也與傳輸的介質有關。通俗來說就是把計算機連接起來的物理手段。
TCP報頭:
在這裏插入圖片描述

●源、目標端口號字段:佔16比特。TCP協議通過使用”端口”來標識源端和目標端的應用進程。端口號可以使用0到65535之間的任何數字。在收到服務請求時,操作系統動態地爲客戶端的應用程序分配端口號。在服務器端,每種服務在”衆所周知的端口”(Well-KnowPort)爲用戶提供服務。
●順序號字段:佔32比特。用來標識從TCP源端向TCP目標端發送的數據字節流,它表示在這個報文段中的第一個數據字節。
●確認號字段:佔32比特。只有ACK標誌爲1時,確認號字段纔有效。它包含目標端所期望收到源端的下一個數據字節。
●頭部長度字段:佔4比特。給出頭部佔32比特的數目。沒有任何選項字段的TCP頭部長度爲20字節;最多可以有60字節的TCP頭部。
●標誌位字段(U、A、P、R、S、F):佔6比特。各比特的含義如下:  ◆URG:緊急指針(urgent pointer)有效。
◆ACK:爲1時,確認序號有效。  ◆PSH:爲1時,接收方應該儘快將這個報文段交給應用層。  ◆RST:爲1時,重建連接。
◆SYN:爲1時,同步程序,發起一個連接。  ◆FIN:爲1時,發送端完成任務,釋放一個連接。
●窗口大小字段:佔16比特。此字段用來進行流量控制。單位爲字節數,這個值是本機期望一次接收的字節數。
●TCP校驗和字段:佔16比特。對整個TCP報文段,即TCP頭部和TCP數據進行校驗和計算,並由目標端進行驗證。
●緊急指針字段:佔16比特。它是一個偏移量,和序號字段中的值相加表示緊急數據最後一個字節的序號。
●選項字段:佔32比特。可能包括”窗口擴大因子”、”時間戳”等選項。

TCP

與UDP

在這裏插入圖片描述
三次握手與四次斷開在這裏插入圖片描述

  • 第一次握手
    建立連接。客戶端發送連接請求報文段,並將syn(標記位)設置爲1,Squence Number(數據包序號)(seq)爲x,接下來等待服務端確認,客戶端進入SYN_SENT狀態(請求連接);
  • 第二次握手
    服務端收到客戶端的 SYN 報文段,對 SYN 報文段進行確認,設置 ack(確認號)爲 x+1(即seq+1 ;同時自己還要發送 SYN 請求信息,將 SYN 設置爲1, seq爲 y。服務端將上述所有信息放到 SYN+ACK報文段中,一併發送給客戶端,此時服務器進入 SYN_RECV狀態。
  • 第三次握手
    客戶端收到服務端的 SYN+ACK(確認符) 報文段;然後將 ACK 設置爲y+1,向服務端發送ACK報文段,這個報文段發送完畢後,客戶端和服務端都進入ESTABLISHED(連接成功)狀態,完成TCP 的三次握手

SYN 同步序列號請求
序列號:記錄發送的次數
seq+1 代表 ACK

在這裏插入圖片描述

  • 第一次揮手
    客戶端設置seq和 ACK ,向服務器發送一個 FIN(終結)報文段。此時,客戶端進入 FIN_WAIT_1狀態,表示客戶端沒有數據要發送給服務端了。
  • 第二次揮手
    服務端收到了客戶端發送的 FIN 報文段,向客戶端回了一個 ACK 報文段。
  • 第三次揮手
    服務端向客戶端發送FIN 報文段,請求關閉連接,同時服務端進入 LAST_ACK 狀態。
  • 第四次揮手
  • 客戶端收到服務端發送的 FIN 報文段後,向服務端發送 ACK 報文段,然後客戶端進入 TIME_WAIT狀態。服務端收到客戶端的 ACK 報文段以後,就關閉連接。此時,客戶端等2MSL(指一個片段在網絡中最大的存活時間)後依然沒有收到回覆,則說明服務端已經正常關閉,這樣客戶端就可以關閉連接了。

爲什麼要三次握手?

爲了防止已失效的連接請求報文突然又傳送到了服務端,因此產生錯誤。 具體解釋: “已失效的連接請求報文段”產生情況: client發出的第一個連接請求報文段並沒有丟失,而是在某個網絡節點長時間滯留,因此導致延誤到連接釋放以後的某個時間纔到達 service。如果沒有三次握手,那麼此時server收到此失效的連接請求報文段,就誤認爲是 client再次發出的一個新的連接請求,於是向client 發出確認報文段,同意建立連接,而此時 client並沒有發出建立連接的情況,因此並不會理會服務端的響應,而service將會一直等待client發送數據,因此就會導致這條連接線路白白浪費。

如果此時變成兩次揮手行不行?

這個時候需要明白全雙工與半雙工,再進行回答。比如:
第一次握手: A給B打電話說,你可以聽到我說話嗎?
第二次握手:B收到了A的信息,然後對A說: 我可以聽得到你說話啊,你能聽得到我說話嗎? 第三次握手: A收到了B的信息,然後說可以的,我要給你發信息啦!
在三次握手之後,A和B都能確定這麼一件事: 我說的話,你能聽到; 你說的話,我也能聽到。
這樣,就可以開始正常通信了,如果是兩次,那將無法確定。

爲什麼要四次揮手?

TCP 協議是一種面向連接,可靠,基於字節流的傳輸層通信協議。TCP 是全雙工模式(同一時刻可以同時發送和接收),這就意味着,當主機1發出FIN報文段時,只是表示主機1已結沒有數據要發送了,主機1告訴主機2,它的數據已經全部發送完畢;但是,這個時候主機1還是可以接受來自主機2的數據;當主機2返回ACK報文段時,這個時候就表示主機2也沒有數據要發送了,就會告訴主機1,我也沒有數據要發送了,之後彼此就會中斷這次TCP連接

SCTP介紹

SCTP (Stream Control Transmission Protocol)是一種傳輸協議,在TCP/IP協議棧中所處的位置和TCP、UDP類似,兼有TCP/UDP兩者特徵。
SCTP是可以確保數據傳輸的,和TCP類似,也是通過確認機制來實現的。
SCTP和TCP的區別
1、 TCP是以字節爲單位傳輸的,SCTP是以數據塊爲單位傳輸的
TCP接收端確認的是收到的字節數,SCTP接收端確認的是接收到的數據塊。SCTP的這種數據塊(被稱爲DATA CHUNK)通常會攜帶應用的一個數據包,或者說是應用要發送的一個消息。
2、TCP通常是單路徑傳輸,SCTP可以多路徑傳輸
TCP的兩端都只能用一個IP來建立連接,連接建立之後就只能用這一對IP來相互收發消息了。如果這一對IP之間的路徑出了問題,那這條TCP連接就不可用了。
SCTP不一樣的地方是,兩端都可以綁定到多個IP上,只要有其中一對IP能通,這條SCTP連接就還可以用。
3、TCP是單流有序傳輸,SCTP可以多流獨立有序/無序傳輸
SCTP可以在一個聯合中支持多流機制,每個流(stream)都是獨立的。

每個流都有各自的編號,編碼在SCTP報文中
阻塞的流不會影響同一聯合中的其他流,可以並行進行傳輸
4、TCP連接的建立過程需要三步握手,SCTP連接的建立過程需要四步握手
TCP連接建立過程,容易受到DoS攻擊。在建立連接的時候,client端需要發送SYN給server端,server端需要將這些連接請求緩存下來。通過這種機制,攻擊者可以發送大量僞造的SYN包到一個server端,導致server端耗盡內存來緩存這些連接請求,最終無法服務。
SCTP的建立過程需要四步握手,server端在收到連接請求時,不會立即分配內存緩存起來,而是返回一個COOKIE。client端需要回送這個COOKIE,server端校驗之後,從cookie中重新獲取有效信息(比如對端地址列表),纔會最終建立這條連接。這樣,可以避免類似TCP的SYN攻擊。
5、SCTP有heartbeat機制來管理路徑的可用性
SCTP協議本身有heartbeat機制來監控連接/路徑的可用性。
SCTP兩端都可以bind多個IP,因此同一條SCTP連接的數據可以採用不同的IP來傳輸。不同的IP傳輸路徑對應一條path,不同的path都可以由heartbeat或者是數據的傳輸/確認來監控其狀態。
如果heartbeat沒相應,或者是數據在某條path超時沒收到確認導致重傳,則認爲該path有一次傳輸失敗。如果該path的連續傳輸失敗次數超過path的連續重傳次數,則認爲該path不可用,並通知應用程序。如果一條連接的連續傳輸次數超過設定的“連接最大重傳次數”,則該連接被認爲不可用,該連接會被關閉並通知應用程序。

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