iOS開發(fā)進階-TCP/UDP

課程: 新浪微博資深大牛全方位剖析 iOS 高級面試

一、TCP

1.1特點

為了通過IP數(shù)據(jù)報實現(xiàn)可靠傳輸,需要考慮很多事情,例如數(shù)據(jù)的破壞、丟包、重復(fù)以及分片順序混亂等問題。如果不解決這些問題,也就無從談起可靠傳輸。所以TCP作為面向連接的可靠傳輸協(xié)議,就有以下特點:面向連接、可靠傳輸、面向字節(jié)流、流量控制、擁塞控制。

1.1.1 面向連接

TCP是面向連接的協(xié)議,建立和斷開連接需要經(jīng)過7步,三次握手建立連接,四次揮手?jǐn)嚅_連接。關(guān)于建立連接和斷開連接的在之前的文章HTTP協(xié)議已經(jīng)學(xué)習(xí)過了。另外兩個問題,

為什么是三次握手不是兩次?

為了解決超時導(dǎo)致重復(fù)建立的問題。如果是兩次握手會出現(xiàn)的問題??蛻舳税l(fā)送SYN請求建立連接時,如果網(wǎng)絡(luò)發(fā)生延遲超時后客戶端會重復(fù)發(fā)送SYN消息,服務(wù)器接收到第二次發(fā)送的建立連接請求,返回確認(rèn)信息,連接建立完成。第一次發(fā)送SYN建立連接請求經(jīng)過一段時間后到達服務(wù)器,服務(wù)器會認(rèn)為客戶端要建立新的連接,會重新發(fā)送應(yīng)答響應(yīng)。這就導(dǎo)致了重復(fù)建立連接的情況。

為什么是四次揮手?

關(guān)閉連接,需要雙向關(guān)閉才算真正的關(guān)閉??蛻舳税l(fā)送FIN請求切斷連接,服務(wù)器端發(fā)送ACK應(yīng)答切斷,當(dāng)前連接處于半關(guān)閉狀態(tài)。服務(wù)器端向客戶端發(fā)送FIN請求切斷連接,客戶端返回ACK應(yīng)答請求,此時連接才真正的關(guān)閉。

1.1.2 可靠傳輸

  1. 通過序列號和確認(rèn)應(yīng)答提高可靠性。

當(dāng)客戶端發(fā)送數(shù)據(jù)之后需等待對端的確認(rèn)信息。如果收到確認(rèn)應(yīng)答,表示數(shù)據(jù)成功發(fā)送到對端。如果在一定時間內(nèi)沒有收到確認(rèn)應(yīng)答,則認(rèn)為數(shù)據(jù)已丟失,需要重新發(fā)送。未收到應(yīng)答消息,兩種情況數(shù)據(jù)丟失,另一種是應(yīng)答消息丟失。應(yīng)答信號丟失,重新發(fā)送對端就會重復(fù)接收相同的數(shù)據(jù),為了解決目標(biāo)端重復(fù)接收相同數(shù)據(jù),可以通過為發(fā)送數(shù)據(jù)的每個字節(jié)標(biāo)上序號,接收端收到數(shù)據(jù)根據(jù)首部序號和長度,將下一次應(yīng)該的接收的序號作為應(yīng)答返回出去。這樣就可以通過序列號和確認(rèn)應(yīng)答,實現(xiàn)可靠傳輸。

  1. 重發(fā)超時如何確定

上面提到客戶端在超過一定時間沒有接收到應(yīng)答消息會進行數(shù)據(jù)重發(fā)。那么這個超時時長是多少呢?理想狀態(tài)下,找到一個小的時間,確保應(yīng)答消息在該時間段中可以返回,但是不同的網(wǎng)絡(luò)環(huán)境下這個時間會發(fā)生變化。TCP為了在不同網(wǎng)絡(luò)環(huán)境下都能提供高性能通信,為此每次發(fā)送數(shù)據(jù)都會計算往返時間及其偏差。超時時間比這個往返時間與偏差的和稍大一點的時間。

1.1.3 面向字節(jié)流

TCP在建立連接時,會確認(rèn)一次數(shù)據(jù)包傳輸?shù)膯挝?。稱之為“最大消息長度(MSS)”。建立連接客戶端SYN消息中攜帶一個MSS值,服務(wù)器的返回的SYN中也會攜帶一個MSS值,最終會選擇兩者中較小的按個作為數(shù)據(jù)包的傳輸單位。

1.1.4 滑動窗口流量控制

TCP以一個MSS大小傳輸數(shù)據(jù),往返時間越長,網(wǎng)絡(luò)的吞吐量也差。為了解決這個問題,引入了窗口的概念。發(fā)送端在發(fā)送一個段后不需要等待應(yīng)答信息進行發(fā)送數(shù)據(jù)。窗口大小是指無需等待應(yīng)答消息繼續(xù)發(fā)送數(shù)據(jù)的最大值。窗口提供了緩存機制,實現(xiàn)對多個段同時應(yīng)答的功能。

1.1.5 擁塞控制

為了解決大量數(shù)據(jù)對網(wǎng)絡(luò)的影響,通過慢啟動算法得出的值,對發(fā)送數(shù)據(jù)量進行控制。

TCP 慢啟動流程?
參考:TCP 擁塞控制問題

二、UDP

UDP面向無連接的通信服務(wù)協(xié)議。只提供了傳輸層協(xié)議的基本功能。

小結(jié)

本節(jié)重點學(xué)習(xí)了TCP的特點,梳理各特點的知識點。深入學(xué)習(xí)可以參考《圖解TCP/IP》。

參考

《圖解TCP/IP》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容