為什么TCP需要三次握手而不是兩次?

《Computer Networking: A Top-Down Approach》講解TCP那章里有個疑問:為什么TCP需要三次握手而不是兩次?網上看的答案不太符合我的想法,而我的答案是:性能!

首先看下經典的TCP三次握手圖解:

我之前疑惑的一點就是在第1次握手(Client發送連接請求)和第2次握手(Server返回確認信息)后,第3次不就可以直接傳數據了嗎,何必有第3次握手確認?其實從性能方面考慮就能把2次握手排除了:

1.TCP不同于UDP,除了監聽的主socket進程外,對于每個client,Server還會生成各自獨立的socket來通信,而一個socket進程的建立很耗CPU的

2.假如TCP被設計成前2次握手建立連接、第3次就用來傳數據;那么第一次握手時Server就需要建立一個對應此client的socket進程,等第2次握手被client處理完畢,client就直接連接此socket通信了

3.但第一次握手就建立監聽socket進程是很冒險的:假如網絡不好,一個client發送的第一次握手請求很久才到達Server,然后Server在建立了socket通信進城后發送第二次握手回應client,但因為timeout,此時這個握手請求肯定無效,但Server還是為此建立了個socket通信進程,而一個socket進程的建立很耗CPU的,實在是很浪費~甚至黑客發起SYN flood攻擊時,Server這種一次握手建立socket方式會死的更快~

因此,我認為TCP3次握手后才建立socket通信是一種考慮到性能的設計方式

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容