多了一次 handshake 的主要差別在 Server 發送 segment 時,把 FIN segment 跟 ACK segment 分開傳送了,造成這種差別的主要原因是:
因為 Server 已經在處理資料的狀態了,無法立即的中斷,不然就會造成資料傳輸的遺失
這就好像身為前端工程師,我們會請後端幫忙處理資料傳送給我們,當下班時間到,我們告知後端說要收工下班回家時,後端卻說他還沒好,再等一下他把剩下的資料處理完給我們就下班
這時候我們就會等待後端等資料處理完給我們,等我們確定後端說沒有資料要處理後,我們再結束
用術語來說,我們等待的時候,我們不會發送訊息了,但是還可以接收後端給的資料,就是怕後端還有資料沒處理完,造成資料的遺失,我們就處在一種 半接收 的狀態,已經不會發送訊息了,但是還是可以接收資訊的狀態,讓後端可以完成他的工作,把資料處理完給我們,最後再結束
如果我們直接關閉的話,Server 有可能還有沒處理完的資料,這樣就會造成資料的遺失
如果立馬 Closed 的話,假設 Client 的 ACK 都沒有傳成功,那 Server 就會一直重發 FIN + ACK segment
這時,因為 Client 已經 Closed,有可能一經開了新的 connection,但因為又收到 Server 的 FIN + ACK segment,就又會被中止了