論SCTP協議與TCP協議的區別

2021-10-06 15:56:47 字數 2238 閱讀 2802

sctp即流控制傳輸協議,它是乙個基於ip網的新的端到端傳輸控制協議,它最根本的目的是在ip網的基礎上傳輸源於傳統pstn網上的信令資料,通過在無連線的ip網路上傳送pstn信令訊息,從而可以在ip網上提供可靠的資料傳輸,它是一種新型的ip傳送協議,與tcp、udp處於同一層。

stcp是可以確保資料傳輸的,和tcp類似,也是通過確認機制來實現的。

tcp接收端確認的是位元組數,sctp接收端確認的是接收到的資料塊。sctp的這種資料塊(被稱為data chunk),通常會攜帶應用的乙個資料報,或者說是應用要傳送的乙個訊息。

在實際的應用中,tcp傳送方可以將應用程式需要傳送的多個訊息打包到乙個tcp包裡面傳送出去。比如,應用程式連續呼叫兩次sed()向對端傳送兩條訊息。tcp協議可能把這兩條訊息都打包放在同乙個tcp包中。接收端在收到這個tcp包時,回給對端的ack只是表明自己接收到了多少個位元組,tcp協議本身並不會把收到的資料重新拆散分成兩條應用層訊息並通知應用程式去接收。事實上,應用程式可能只需要呼叫一次receive(),就會把兩條訊息都收上來,然後應用需要根據應用程式自己定義的格式去拆成兩條訊息。

與tcp不同,sctp是將應用程式的每次呼叫sendmsg()傳送的資料當作乙個整體,放到乙個被稱為data chunk的資料塊裡面,接收端也是以data chunk為單位接收資料,並重新組包,通知應用程式接收。通常,應用程式每次呼叫recvmesg()都會收到一條完整的訊息。         在sctp的傳送端,多條短的應用層訊息可以被sctp協議打包放在同乙個sctp包中,此時在sctp包中可以看到多個data chunk。另一方面,一條太長(比如,超過了路徑mtu)的應用層訊息也可能被sctp協議拆分成多個片段,分別放在多個data chunk並通過不同的sctp包傳送給對端。這兩種情況下,sctp的接收端都能重新組包,並通知應用程式去接收。    

在sctp的傳送端,多條短的應用層訊息可以被sctp協議打包放在同乙個sctp包中,此時在sctp包中可以看到多個data chunk。另一方面,一條太長(比如,超過了路徑mtu)的應用層訊息也可能被sctp協議拆分成多個片段,分別放在多個data chunk並通過不同的sctp包傳送給對端。這兩種情況下,sctp的接收端都能重新組包,並通知應用程式去接收。

tcp的兩端都只能用乙個ip來建立連線,連線建立之後就只能用這一對ip來相互收發訊息了。如果這一對ip之間的路徑出了問題,那這條tcp連線就不可用了。

sctp不一樣的地方是,兩端都可以繫結到多個ip上,只要有其中一對ip能通,這條sctp連線就還可以用。

一條sctp連線裡面,可以區分多條不同的流(stream),不同的流之間的資料傳輸互不干擾。這樣做理論上的好處是,如果其中某一條流由於丟包阻塞了,那只會影響到這一條流,其他的流並不會被阻塞。但是實際上,如果某一條流由於丟包阻塞,其他的流通常也會丟包,被阻塞,最後導致所有的流都被阻塞,sctp連線中斷。

在同一條stream裡面,sctp支援有序/無序兩種傳輸方式,應用程式在呼叫sendmsg()的時候,需要指定用哪一條stream傳輸,以及指定這條要傳送的訊息是需要有序傳輸還是無序傳輸的。如果在傳輸過程中丟包,則有序傳遞模式可能會在接收端被阻塞,而無序傳輸模式不會在接收端被阻塞。

tcp連線建立過程,容易受到dos攻擊。在建立連線的時候,client端需要傳送syn給server端,server端需要將這些連線請求快取下來。通過這種機制,攻擊者可以傳送大量偽造的syn包到乙個server端,導致server端耗盡記憶體來快取這些連線請求,最終無法服務。

sctp的建立過程需要四步握手,server端在收到連線請求時,不會立即分配記憶體快取起來,而是返回乙個cookie。client端需要回送這個cookie,server端校驗之後,從cookie中重新獲取有效資訊(比如對端位址列表),才會最終建立這條連線。這樣,可以避免類似tcp的syn攻擊。

應用程式對此感知不到,對應用程式來說,不管是tcp還是sctp,都只需要在server端listen乙個socket,client呼叫connect()去連線到乙個server端。

sctp協議本身有heartbeat機制來監控連線/路徑的可用性。

前面說過,sctp兩端都可以bind多個ip,因此同一條sctp連線的資料可以採用不同的ip來傳輸。不同的ip傳輸路徑對應一條path,不同的path都可以由heartbeat或者是資料的傳輸/確認來監控其狀態。

如果heartbeat沒相應,或者是資料在某條path超時沒收到確認導致重傳,則認為該path有一次傳輸失敗。如果該path的連續傳輸失敗次數超過path的連續重傳次數,則認為該path不可用,並通知應用程式。如果一條連線的連續傳輸次數超過設定的「連線最大重傳次數」,則該連線被認為不可用,該連線會被關閉並通知應用程式。

python之udp協議與TCP協議的區別

簡言之 使用udp協議時,不需要建立連線,只需要知道對方的ip位址和埠號,就可以直接發資料報。但是,能不能到達就不知道了 速度比tcp傳送資料快 from socket import 1.建立udp 套接字udp socket socket af inet,sock dgram 2.準備接收 的位址...

TCP協議與UDP協議

tcp協議,全稱傳輸控制協議,處在傳輸層之中,下層為網路層,上層為應用層。udp協議,全稱使用者資料報協議,所處位置與tcp相同。而談到傳輸層,則必須談到埠號,埠號的名稱可能沒有ip位址那麼響亮,但是它仍然非常重要,在tcp ip協議中,用 源ip 源埠號 目的ip 目的埠號 協議號 這樣乙個五元組...

HTTP協議與TCP協議

http是乙個屬於應用層的物件導向的協議,由於其簡捷 快速的方式,適用於分布式超 資訊系統。http協議工作於客戶端 服務端架構為上。超文字傳輸協議 http,hypertext transfer protocol 是網際網路上應用最為廣泛的一種網路協議。它可以使瀏覽器更加高效,使網路傳輸減少,它不...