SCTP ( Stream Control Transmission Protocol ),即流媒體控制傳輸協(xié)議,是一種可靠的基于無連接數(shù)據(jù)包網(wǎng)絡(luò)如IP網(wǎng)絡(luò)之上傳輸協(xié)議。他被設(shè)計(jì)用來在IP網(wǎng)絡(luò)上傳輸PSTN在窄帶信令消息,同時(shí)也能支持寬帶信令消息的傳輸。
SCTP可以看作OSI層次結(jié)構(gòu)中的傳輸層,它的上層作為SCTP用戶應(yīng)用,下層為分組網(wǎng)絡(luò)IP層。\
TCP的兩端都只能用一個(gè)IP來建立連接,連接建立之后就只能用這一對(duì)IP來相互收發(fā)消息了。如果這一對(duì)IP之間的路徑出了問題,那這條TCP連接就不可用了。
SCTP不一樣的地方是,兩端都可以綁定到多個(gè)IP上,只要有其中一對(duì)IP能通,這條SCTP連接就還可以用。
一條SCTP連接里面,可以區(qū)分多條不同的流(stream),不同的流之間的數(shù)據(jù)傳輸互不干擾。這樣做理論上的好處是,如果其中某一條流由于丟包阻塞了,那只會(huì)影響到這一條流,其他的流并不會(huì)被阻塞。但是實(shí)際上,如果某一條流由于丟包阻塞,其他的流通常也會(huì)丟包,被阻塞,最后導(dǎo)致所有的流都被阻塞,SCTP連接中斷。
一條SCTP連接里面,可以區(qū)分多條不同的流(stream),不同的流之間的數(shù)據(jù)傳輸互不干擾。這樣做理論上的好處是,如果其中某一條流由于丟包阻塞了,那只會(huì)影響到這一條流,其他的流并不會(huì)被阻塞。但是實(shí)際上,如果某一條流由于丟包阻塞,其他的流通常也會(huì)丟包,被阻塞,最后導(dǎo)致所有的流都被阻塞,SCTP連接中斷。
TCP連接建立過程,容易受到DoS攻擊。在建立連接的時(shí)候,client端需要發(fā)送SYN給server端,server端需要將這些連接請(qǐng)求緩存下來。通過這種機(jī)制,攻擊者可以發(fā)送大量偽造的SYN包到一個(gè)server端,導(dǎo)致server端耗盡內(nèi)存來緩存這些連接請(qǐng)求,最終無法服務(wù)。
SCTP的建立過程需要四步握手,server端在收到連接請(qǐng)求時(shí),不會(huì)立即分配內(nèi)存緩存起來,而是返回一個(gè)COOKIE。client端需要回送這個(gè)COOKIE,server端校驗(yàn)之后,從cookie中重新獲取有效信息(比如對(duì)端地址列表),才會(huì)最終建立這條連接。這樣,可以避免類似TCP的SYN攻擊。
應(yīng)用程序?qū)Υ烁兄坏?,?duì)應(yīng)用程序來說,不管是TCP還是SCTP,都只需要在server端listen一個(gè)socket,client調(diào)用connect()去連接到一個(gè)server端。
更多建議: