系列(九)—TCP/UDP协议
1、計算機網絡協議模型
| 物理層 | 主要負責在物理線路上傳輸原始的二進制數據。兩臺計算機要通信,就得通過介質,比如光纖、電纜等,物理層就是干這些事情的,。 |
| 數據鏈路層 | 主要負責在通信的實體間建立數據鏈路連接。物理層它只是單純著負責在計算機之間傳輸0,1這樣的電信號。假如這些0,1組合的傳送毫無規則,計算機是解讀不了的。因此,我們需要制定一套規則來進行0,1的傳送。例如多少個電信號為一組啊,每一組信號應該如何標識才能讓計算機讀懂啊等。數據鏈路層就是在物理層之上,負責給這些0,1制定傳送的規則,然后另一方再按照相應的規則來進行解讀。 |
| 網絡層 | 要負責創建邏輯鏈路,以及實現數據包的分片和重組,實現擁塞控制、網絡互連等功能。假如網絡不進行細化,沒有子網的話,當一臺計算機發送信息時,其他所有的計算機都能收到的,然后再刪選舍棄這樣下去計算機是會崩潰的,網絡層就是負責解決這類問題的。建立主機到主機的通信。 |
| 傳輸層 | 負責向用戶提供端到端的通信服務,實現流量控制以及差錯控制。雖然我們已經把數據成功從計算機傳送到另一臺計算機了,可是另一臺計算機又怎么知道這些數據是給誰的, 這個時候,就產生了端口,也就是說,我們在從計算機A傳數據給計算表B的時候,還得指定一個端口,以供特定的應用程序來接受處理。傳輸層的功能就是建立端口到端口的通信。 |
| 應用層 | 應用層是最接近用戶的,用來規定應用程序的數據格式。為應用程序提供了網絡服務。 |
2、tcp與udp的區別
| 是否連接 | 無連接 | 面向連接 |
| 是否可靠 | 不可靠傳輸,不使用流量控制和擁塞控制 | 可靠傳輸,使用流量控制和擁塞控制 |
| 連接對象個數 | 支持一對一,一對多,多對一和多對多交互通信 | 只能是一對一通信 |
| 傳輸方式 | 面向報文 | 面向字節流 |
| 首部開銷 | 首部開銷小,僅8字節 | 首部最小20字節,最大60字節 |
| 適用場景 | 適用于實時應用(qq聊天、在線視頻、網絡語音電話、視頻會議、直播等即時通訊、廣播通信等) | 適用于要求可靠傳輸的應用,例如文件傳輸、收發郵件、遠程登錄 |
目前常見的直播方案都是上行采用rtmp;下行采用http-flv或者hls,底層都是tcp。UDP理論上更適合用于直播系統,但開發效率低,周期長。
做視頻直播,用UDP好還是TCP好?為什么?做視頻點播呢?
抖音底層用的什么傳輸協議TCP,還是UDP?:為適應弱網都基于UDP做可靠傳輸,本質上既不是TCP也不是UDP。
3、tcp如何實現連接
1)tcp三次握手
為了確認雙方各自的接受和發送能力是否正常(服務端需要確認服務端和客戶端、客戶端也需要確認服務端和客戶端的收發能力)
- 第一次握手:客戶端給服務器端發送一個SYN報文;
- 第二次握手:服務器收到SYN報文之后,會應答一個SYN+ACK報文。
- 第三次握手:客戶端收到SYN+ACK報文之后,會回應一個ACK報文。
- 服務器收到ACK報文之后,三次握手建立完成。
?
·第一次握手:客戶端發送網絡包,服務器收到了。服務器斷就能得到結論:客戶端的發送能力、服務端的接收能力是正常的。
·第二次握手:服務端發包,客戶端收到了。客戶端就能得出結論:服務端的接收能力、發送能力,客戶端的接收、發送能力是正常的。不過此時服務器并不能確認客戶端的接收能力是否正常。
·第三次握手:客戶端發包,服務器端收到了。服務端得出結論:服務器自己的發送能力,接收能力正常。
2)tcp四次揮手
?
?
3)為什么TIME_WAIT狀態需要經過2MSL才能返回到CLOSE狀態?
第一,為了保證A發送的最后一個ACK報文段能夠到達B。假設網絡是不可靠的,有可以最后一個ACK丟失。所以TIME_WAIT狀態就是用來重發可能丟失的ACK報文。在Client發送出最后的ACK回復,但該ACK可能丟失。Server如果沒有收到ACK,將不斷重復發送FIN片段。所以Client不能立即關閉,它必須確認Server接收到了該ACK。Client會在發送出ACK之后進入到TIME_WAIT狀態。Client會設置一個計時器,等待2MSL的時間。如果在該時間內再次收到FIN,那么Client會重發ACK并再次等待2MSL。所謂的2MSL是兩倍的MSL(Maximum Segment Lifetime)。MSL指一個片段在網絡中最大的存活時間,2MSL就是一個發送和一個回復所需的最大時間。如果直到2MSL,Client都沒有再次收到FIN,那么Client推斷ACK已經被Server成功接收,則結束TCP連接。
4)為什么連接的時候是三次握手,關閉的時候確實四次揮手?
為了防止客戶端沒有接受到服務器的數據包。當客戶端發送FIN報文后,服務器返回一個ACK報文,客戶端進入等待狀態,當服務端把所有報文發送完畢后,服務端向客戶端發送一個FIN報文,客戶端返回ACK后斷開連接
?
5、如果已經建立了連接,但是客戶端突然出現故障了怎么辦?
TCP還設有一個保活計時器,顯然,客戶端如果出現故障,服務器不能一直等下去,白白浪費資源。服務器每收到一次客戶端的請求后都會重新復位這個計時器,時間通常是設置為2小時,若兩小時還沒有收到客戶端的任何數據,服務器就會發送一個探測報文段,以后每隔75分鐘發送一次。若一連發送10個探測報文仍然沒反應,服務器就認為客戶端出了故障,接著就關閉連接。
6、TCP協議如何保證可靠傳輸
確認應答機制、超時重傳機制、流量控制機制、擁塞控制機制
TCP協議可靠性保證(確認應答機制,超時重傳機制,流量控制,擁塞窗口)
7、同步IO、異步IO、阻塞IO、非阻塞IO
如何區分是同步IO還是異步IO呢?
總結
以上是生活随笔為你收集整理的系列(九)—TCP/UDP协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系列(五)—MySql
- 下一篇: 什么是md5盐值