# 7. TCP 與 SCTP 通訊協定比較

TCP通訊協定於初始連線時，透過三向交握的方式進行初始連線的建立，然而，三向交握因具有DoS攻擊之弱點，於是在SCTP通訊協定的設計，初始連線則是採用四向交握的策略，SCTP通訊協定先天上的設計可避免DoS攻擊的發生。在終止連線的處理上，TCP通訊協定是以四向交握的方式結束連線，一方之端點可先關閉連線，另一方則可繼續接收資料，這樣的情況又稱為半開放狀態（half-open state）；SCTP通訊協定則是使用三向交握的方式終止連線。在資料傳遞的方面，TCP通訊協定因必須嚴格依序傳輸而會有HOL blocking之問題存在，而SCTP通訊協定僅在同一串流中為絕對依序傳輸，當有封包遺失的情況發生時，順序在該遺失封包之後的資料可以透過其他的串流進行傳輸，而能夠避免HoL Blocking之發生。

在Chang 等人 \[5] 之研究中，於Linux作業系統中將開放原始碼之FTP客戶端與伺服端應用程式由TCP通訊協定移植至SCTP通訊協定，並於Linux作業系統中以LKSCTP將FTP應用程式以透過TCP與SCTP通訊協定進行資料傳輸與比較傳輸效能。實驗之目的在於比較於不同的網路壅塞情況中，SCTP通訊協定、未採用SACK \[11] 機制之TCP通訊協定（TCP without SACK）與啟動SACK機制之TCP通訊協定（TCP with SACK）分別進行資料傳輸，藉此觀察與分析封包遺失率對於平均傳輸率的影響。

由於TCP通訊協定之設計是基於單一串流傳輸，而且沒有路徑多宿的設計，因此作者實驗時將SCTP通訊協定設定限制為僅使用單一串流，並且關閉SCTP通訊協定路徑多宿之功能，限制SCTP通訊協定以單一串流及依序傳遞與TCP通訊協定進行比較。實驗測量分析的方法是使用FTP客戶端下載FTP伺服端的檔案，並以Wireshark \[18] 網路協定分析程式觀察封包了解實際資料傳輸情形，並且於Linux router中隨機丟棄封包，造成封包遺失的效果。他們所測量的傳輸效能沒有包含控制連線之指令傳輸時間，而是僅有初始化資料連線至資料連線結束的這段時間。實驗的每條連線都是獨立且不會互相競爭，因此所呈現的平均傳輸率則是表達在該封包遺失率的網路環境中，該傳輸協定的效能表現。

首先作者於 0 % \~ 10 % 封包遺失率中傳輸1 KB檔案，實驗結果顯示當傳輸1 KB的小檔案時，TCP通訊協定的傳輸效率會比SCTP通訊協定要高，主要是因為SCTP通訊協定連線的建立需要四向交握，與TCP通訊協定的三向交握相較之下，SCTP通訊協定增加了COOKIE認證機制，而於MTU為1500 bytes之路徑中，傳輸1 KB的資料僅需一個封包的傳送即能夠將資料傳輸完成，因此四向交握所增加的負載（overhead）使得SCTP通訊協定在傳輸1 KB小資料時平均傳輸率會比TCP通訊協定低。

而在0 % \~ 10 % 封包遺失率環境傳輸512 KB的資料，由於總資料量足以使SCTP四向交握之負載僅佔據微量比例並不足影響整體效能時， 依據作者的實驗結果，在沒有封包遺失的情況下，SCTP通訊協定與TCP通訊協定的傳輸效能是並駕齊驅的，然而隨著封包遺失率的增加，傳輸效能比為SCTP > TCP with SACK > TCP without SACK，以SCTP的表現為最佳，因為單個SACK封包就能夠攜帶多筆回報訊息，可減少ACK封包的數目，所以TCP with SACK與SCTP通訊協定在傳輸效能比TCP without SACK協定為佳。

然而，比較SCTP與TCP with SACK，作者觀察於8 % 封包遺失率時傳輸512 KB資料量的結果，SCTP通訊協定之平均傳輸率為3566 KB/sec，而TCP with SACK僅有696 KB/sec，傳輸率的效能比甚至高達五倍之多。於是作者追蹤Linux kernel 2.6.17原始碼 \[19] ，以了解Linux系統SCTP通訊協定實作之細節，經由程式碼發現在Linux kernel中，SCTP通訊協定之初始壅塞視窗是依循RFC 3390 \[3] 提出的方式實作，將壅塞視窗（cwnd）之初始值設定為min (4\*PMTU, max(2\*PMTU, 4380 bytes))並將ssthresh設定為65535 bytes，而TCP通訊協定之壅塞視窗初始值僅使用兩個MSS（max segment size）的大小 \[1] 與100 bytes之ssthresh初值（標準TCP通訊協定ssthresh則沒有限制），因此使得SCTP通訊協定在起初就能夠擁有較大的壅塞視窗，可以比TCP通訊協定傳輸較多的資料。

而在快速重送（fast retransmission）機制上，重複的ACK或SACK會觸發快速重送的發生並導致壅塞視窗的減半，觸發TCP通訊協定快速重送的條件是收到三個重複的ACK訊息，而觸發SCTP通訊協定之快速重送機制則需要四次重複之SACK訊息，這使得TCP通訊協定在封包遺失率高的環境中，壅塞視窗降低的機率會比SCTP通訊協定還大，也是導致TCP平均傳輸率降低的其中原因。TCP通訊協定之SACK封包僅能攜帶三個區塊（blocks）回報資訊，而SCTP通訊協定並沒有特別限制，因此SCTP通訊協定所能攜帶之訊息僅受限於SACK封包格式制定的欄位數。

SCTP通訊協定之四向交握初始連線過程可防禦傳統TCP通訊協定初始連線時的弱點，並有以上的學者研究分析證實了SCTP通訊協定之多重串流與路徑多宿的功能是可以改善傳輸效能與降低傳輸延遲的。即使限制SCTP通訊協定僅使用單一串流傳輸，在傳輸效能方面也能夠與TCP並駕齊驅，甚至於網路壅塞環境中SCTP之效能表現更為優良，因此，SCTP通訊協定也適合應用於目前普遍使用的TCP網路環境。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://applezulab.netdpi.net/network/sctp_introduction/tcp-sctp-comparison.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
