OSI七層模型&TCP/IP四層&面試高頻考點
1 OSI七層模型
1. 物理層:透明地傳輸比特流
在物理媒介上傳輸原始比特流,定義了連接主機的硬件設備和傳輸媒介的規范。它確保比特流能夠在網絡中準確地傳輸,例如通過以太網、光纖和無線電波等媒介。
- 通過光纖等媒介傳輸原始比特流
2. 數據鏈路層:幀編碼、誤差糾正控制
提供點對點的數據傳輸服務,負責將原始比特流轉換為數據幀,并檢測和糾正傳輸中出現的錯誤。它還控制訪問物理媒介的方式,以及數據幀的傳輸和接收。
- 將原始比特流轉換為數據幀
3. 網絡層:路由、尋址(決定數據在網絡的游走路徑)
負責數據包的路由和轉發,以及網絡中的尋址和擁塞控制。它選擇最佳的路徑來傳輸數據包,以確保它們能夠從源主機到目標主機進行傳輸。
- 數據包的路由和轉發
4. 傳輸層:兩臺主機進程之間通信提供通用的數據傳輸服務,TCP、UDP
為應用程序提供端到端的數據傳輸服務,負責數據的分段、傳輸控制、錯誤恢復和流量控制。它主要使用 TCP(傳輸控制協議)和 UDP(用戶數據報協議)來實現這些功能。
- 通過TCP、UDP實現端到端的數據傳輸
常見協議:
- TCP(Transmission Control Protocol):提供可靠的、面向連接的數據傳輸服務,確保數據的可靠性、順序性和完整性。TCP適用于對數據傳輸質量要求較高的場景,如文件傳輸、網頁瀏覽等
- UDP(User Datagram Protocol):提供無連接的數據傳輸服務,不保證數據的可靠性,也不保證數據的順序性和完整性。UDP適用于實時性要求較高、對數據傳輸質量要求不那么嚴格的場景,如音視頻傳輸、在線游戲等。
5. 會話層:管理(建立、維護、重連)應用程序之間的會話
管理應用程序之間的通信會話,負責建立、維護和終止會話。它還提供了數據的同步和檢查點恢復功能,以確保通信的完整性和持續性。
6. 表示層:數據處理(編解碼、加解密、壓縮解壓縮)
負責數據的格式化、加密和壓縮,以確保數據在不同系統之間的交換是有效的和安全的。它還提供了數據格式轉換和語法轉換的功能
- 數據編輯碼、加解密、壓縮解壓縮
7. 應用層:為計算機提供服務(email、文件傳輸等)
提供用戶接口和應用程序之間的通信服務。在這一層,用戶可以訪問各種網絡應用程序,如電子郵件、文件傳輸和遠程登錄
- 應用層常見協議:
- HTTP(HyperText Transfer Protocol):用于在客戶端和服務器之間傳輸超文本數據,通常用于 Web 瀏覽器和 Web 服務器之間的通信。
- FTP(File Transfer Protocol):用于在客戶端和服務器之間傳輸文件,支持上傳和下載文件的功能。
- SMTP(Simple Mail Transfer Protocol):用于在郵件服務器之間傳輸電子郵件,負責發送郵件。
- POP3(Post Office Protocol version 3):用于從郵件服務器上下載郵件到本地計算機,負責接收郵件。
- IMAP(Internet Message Access Protocol):也是用于接收郵件的協議,與 POP3 類似,但提供了更豐富的功能,如在服務器上管理郵件等。
- DNS(Domain Name System):用于將域名解析為對應的 IP 地址,從而實現域名和 IP 地址之間的映射。
- HTTPS(HyperText Transfer Protocol Secure):是 HTTP 的安全版本,通過 SSL/TLS 加密傳輸數據,保證通信過程中的安全性。
- SSH(Secure Shell):用于遠程登錄和執行命令,提供了加密的網絡連接,保證了通信的安全性。
- SNMP(Simple Network Management Protocol):用于網絡設備之間的管理和監控,可以實現對網絡設備的遠程配置和監控。
- Telnet:用于遠程登錄和執行命令,類似于 SSH,但不提供加密功能,通信數據不安全。
2 TCP/IP四層模型
TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協議/網際協議)是指能夠在多個不同網絡間實現信息傳輸的協議簇。TCP/IP協議不僅僅指的是TCP 和IP兩個協議,而是指一個由FTP、SMTP、TCP、UDP、IP等協議構成的協議簇, 只是因為在TCP/IP協議中TCP協議和IP協議最具代表性,所以被稱為TCP/IP協議
1. 網絡接口層(數據鏈路層)【物理+數據鏈路層,傳輸比特流+將比特流轉換為數據幀】
網絡接口層 Link Layer:OSI中的物理層+數據鏈路層,負責管理網絡硬件設備和物理媒介之間的通信。它包括以太網、Wi-Fi、藍牙等各種物理層和數據鏈路層協議。
- 通過光纖等透明傳送比特流+將原始比特流轉換為數據幀
常見協議:
- 以太網協議(Ethernet):是一種常見的局域網技術,使用MAC地址進行幀的傳輸和接收。
- 無線局域網協議(Wi-Fi):用于無線局域網的數據傳輸,通常基于IEEE 802.11標準。
- 點對點協議(P2P):用于建立點對點連接的協議,通常用于撥號連接和虛擬專用網(VPN)等場景。
- 數據鏈路層交換協議(DLC):用于在數據鏈路層進行數據交換和管理的協議,如HDLC、SLIP和PPP等。
2. 網絡層(數據包在網絡的路由和尋址)
網絡層(Internet Layer):相當于 OSI 模型中的網絡層,負責數據包的路由和轉發。它使用 IP(Internet Protocol)協議來定義數據包的傳輸路徑,并處理不同網絡之間的通信。
- 路由和尋址,決定數據包在網絡的游走路徑
常見協議:
- IP(Internet Protocol):是互聯網中最基本的協議,用于在網絡中傳輸數據包。IP協議定義了數據包的格式、尋址方式和路由選擇等信息,是整個互聯網的基礎。
- ICMP(Internet Control Message Protocol):用于在IP網絡中傳遞控制消息和錯誤信息。ICMP通常用于網絡設備之間的通信,如路由器和主機之間的通信,以及用于檢測網絡連通性和故障診斷。
- ARP(Address Resolution Protocol):用于將IP地址映射為MAC地址(物理地址)。ARP協議在局域網內部使用,通過發送ARP請求獲取目標設備的MAC地址,從而實現數據包的傳輸。
- RARP(Reverse Address Resolution Protocol):與ARP相反,用于將MAC地址映射為IP地址。RARP協議通常用于無盤工作站等設備,可以根據MAC地址獲取對應的IP地址。
- IPv6(Internet Protocol version 6):是IP協議的下一代版本,用于解決IPv4地址空間不足的問題。IPv6采用128位地址長度,提供了更大的地址空間,支持更多的設備連接到互聯網。
3. 傳輸層(通過TCP、UDP讓兩臺主機間的進程互相通信,傳輸數據)
傳輸層(Transport Layer):與 OSI 模型中的傳輸層相對應,提供端到端的數據傳輸服務。在 TCP/IP 模型中,主要有兩個協議:TCP(傳輸控制協議)和 UDP(用戶數據報協議),用于確保可靠的數據傳輸和簡單的數據傳輸。
- 通過TCP可靠慢速、UDP不可靠高速實現兩臺主機進程之間通信,傳輸數據
常見協議:
- TCP(Transmission Control Protocol):提供可靠的、面向連接的數據傳輸服務,確保數據的可靠性、順序性和完整性。TCP適用于對數據傳輸質量要求較高的場景,如文件傳輸、網頁瀏覽等。
- UDP(User Datagram Protocol):提供無連接的數據傳輸服務,不保證數據的可靠性,也不保證數據的順序性和完整性。UDP適用于實時性要求較高、對數據傳輸質量要求不那么嚴格的場景,如音視頻傳輸、在線游戲等。
4. 應用層【會話+表示+應用層】
應用層(Application Layer):OSI 模型中的會話層+表示層+應用層,負責處理用戶與網絡應用程序之間的通信。它包括諸如 HTTP、FTP、SMTP 等協議,用于實現不同類型的網絡服務和應用。
- 管理(建立、維護、重連)應用程序間的會話=》會話層
- 數據處理(編解碼、加解密、壓縮解壓縮)=》表示層
- 為用戶提供郵件服務、遠程登錄服務等 =》應用層
常見協議:
- HTTP(HyperText Transfer Protocol):用于在客戶端和服務器之間傳輸超文本數據,通常用于 Web 瀏覽器和 Web 服務器之間的通信。
- FTP(File Transfer Protocol):用于在客戶端和服務器之間傳輸文件,支持上傳和下載文件的功能。
- SMTP(Simple Mail Transfer Protocol):用于在郵件服務器之間傳輸電子郵件,負責發送郵件。
- POP3(Post Office Protocol version 3):用于從郵件服務器上下載郵件到本地計算機,負責接收郵件。
- IMAP(Internet Message Access Protocol):也是用于接收郵件的協議,與 POP3 類似,但提供了更豐富的功能,如在服務器上管理郵件等。
- DNS(Domain Name System):用于將域名解析為對應的 IP 地址,從而實現域名和 IP 地址之間的映射。
- HTTPS(HyperText Transfer Protocol Secure):是 HTTP 的安全版本,通過 SSL/TLS 加密傳輸數據,保證通信過程中的安全性。
- SSH(Secure Shell):用于遠程登錄和執行命令,提供了加密的網絡連接,保證了通信的安全性。
- SNMP(Simple Network Management Protocol):用于網絡設備之間的管理和監控,可以實現對網絡設備的遠程配置和監控。
- Telnet:用于遠程登錄和執行命令,類似于 SSH,但不提供加密功能,通信數據不安全。
面試高頻考點【TCP/IP四層】
1. 什么是TCP/IP網絡分層,分層有什么好處
TCP/IP模型是一個四層模型,包括應用層、傳輸層、網絡層和網絡接口層(數據鏈路層)。
- 網絡接口層則負責數據鏈路的具體操作。
- 網絡層負責數據包的路由,如IP協議;
- 傳輸層負責端到端的數據傳輸,如TCP和UDP;
- 應用層負責處理特定應用程序的數據,如HTTP、FTP等;
- 各層獨?:限制了依賴關系的范圍,各層之間使?標準化的接?,各層不需要知道上下層是如何?作的,增加或者修改?個應?層協議不會影響傳輸層協議
- 靈活性更好:?如路由器不需要應?層和傳輸層,分層以后路由器就可以只?加載更少的?個協議層
- 易于測試和維護:提?了可測試性,可以獨?的測試特定層,某?層有了更好的實現可以整體替換掉
- 能促進標準化:每?層職責清楚,?便進?標準化
2. TCP的三次握?中為什么是三次?為什么不是兩次、四次?
兩次不夠可靠。
- 如果只有兩次握手,服務器無法確認客戶端是否真的收到了它的確認響應,這樣服務器可能會誤以為連接已經建立,而實際上客戶端可能沒有收到服務器的響應,導致服務器空等資源浪費。
四次也可以,但是沒必要,“投資比不高,效益不高”。
- 三次握手就已經理論上最少可靠連接建立,所以不需要使用更多的通信次數
3. TCP的四次揮?為什么是四次?為什么不能是三次?[還有最后一波數據要傳]
- 關閉請求:當一方(比如客戶端)想要斷開連接時,它會發送一個FIN(Finish)標志,告訴對方它不再發送數據了。
- 確認收到關閉請求:另一方(服務器)接收到FIN后,會回復一個ACK,確認收到了關閉請求,但此時服務器可能還有數據需要發送給客戶端,所以連接并未立即關閉。
- 服務器也準備關閉:當服務器準備好關閉連接時,它也會發送一個FIN給客戶端,表明自己也沒有數據要發送了。
- 客戶端確認關閉:客戶端收到服務器的FIN后,發送最后一個ACK,確認收到了服務器的關閉請求,這時等待一段時間(確保所有數據包都已到達),連接正式關閉。
- 為什么不能是三次揮手? 主要是由于全雙工通信的特性,即連接雙方都可以同時發送和接收數據。在斷開連接時,必須確保雙方都沒有數據要發送了。兩次揮手(客戶端發送FIN,服務器發送FIN+ACK,客戶端ACK)不能解決這個問題,因為服務器在第一步的ACK中無法同時表達自己是否還有數據要發送。因此,需要額外的步驟來確保兩邊都完成了數據發送并且同意關閉連接,這就是為什么需要四次揮手。
4. 為什么 SYN/FIN 不包含數據卻要消耗?個序列號?
維護TCP連接的可靠性和有序性,
確保連接的建立與終止過程能夠被準確無誤地管理
。凡是需要對端確認的,?定消耗TCP報?的序列號。SYN 和FIN需要對端的確認,所以需要消耗?個序列號
- 在三次握手過程中,SYN段標志著客戶端或服務器希望建立連接的意愿。這個序列號初始化了該連接的傳輸序列,為后續的數據傳輸打下基礎。它需要被確認,以確保連接請求被對方正確接收,因此消耗一個序列號確保了這個控制信息能夠被可靠地處理和確認。
5. 什么是半連接隊列?什么是SYN Flood攻擊?[偽造IP+SYN]
客戶端?量偽造 IP 發送 SYN 包,服務端回復的 ACK+SYN 去到了?個「未知」的 IP 地址,勢必會造成服務端?量的連接處于 SYN_RCVD 狀態,?服務器的半連接隊列??也是有限的,如果半連接隊列滿,也會出現?法處理正常請求的情況。
6. 說說TCP快速打開(TFO)的原理【SYN包就帶數據】
TFO 是在原來 TCP 協議上的擴展協議,它的主要原理就在發送第?個 SYN 包的時候就開始傳數據了,不過它要求當前客戶端之前已經完成過「正常」的三次握?。
- 快速打開分兩個階段:請求 Fast Open Cookie 和 真正開始 TCP Fast Open
- Fast Open Cookie
- TCP Fast Open
- 好處:?個最顯著的優點是可以利?握?去除?個往返 RTT
可以防? SYN-Flood 攻擊之類的
普通TCP/IP連接與TFO(TCP Fast Open)對比:
7. TCP報?中的時間戳有什么作??[解決RTT、防止序列號回繞]
- 解決計算往返時延 RTT(Round-Trip Time)
- 在啟? Timestamps 選項以后,因為 ACK 包?包含了 TSval 和 TSecr,這樣?論是正常確認包,還是重傳確認包,都可以通過這兩個值計算出 RTT。
- 防?序列號的回繞問題(知道哪個包是什么時候發的,)
- TCP 的序列號? 32bit 來表示,因此在 2^32 字節的數據傳輸后序列號就會溢出回繞。TCP 的窗?經過窗?縮放可以最?到 1GB(2^30),在?速?絡中,序列號在很短的時間內就會被重復使?。
假設發送了 6 個數據包,每個數據包的??為 1GB,第 5 個包序列號發?回繞。
第 2 個包因為某些原因延遲導致重傳,但沒有丟失到時間 t7 才到達。
這個迷途數據包與后?要發送的第 6 個包序列號完全相同,如果沒有?些措施進?區分,將會造成數據的紊亂。
有 Timestamps 的存在,迷途數據包與第 6 個包可以區分
8. TCP 的超時重傳時間是如何計算的?【平滑因子】
TCP 具有超時重傳機制,即間隔?段時間沒有等到數據包的回復時,重傳這個數據包。
這個重傳間隔也叫做超時重傳時間(Retransmission TimeOut, 簡稱RTO)
經典算法:往返時延 RTT(Round-Trip Time)
- ?個最簡單的想法就是取平均值,?如第?次 RTT 為 500ms,第?次 RTT 為 800ms,那么第三次發送時,各讓?步取平均值 RTO 為 650ms。
經典算法引?了「平滑往返時間」(Smoothed round trip time,SRTT):經過平滑后的RTT的值,每測量?次 RTT 就對 SRTT 作?次更新計算。
9. 能不能說?說 TCP 的流量控制?【滑動窗口】
對于發送端和接收端??,TCP 需要把發送的數據放到發送緩存區, 將接收的數據放到接收緩存區。
- ?流量控制要做的事情,就是在通過接收緩存區的??,控制發送端的發送。如果對?的接收緩存區滿了,就不能再繼續發送了。
- 為了控制發送端的速率,接收端會告知客戶端??接收窗?(rwnd),也就是接收緩沖區中空閑的部分
- 首先雙方三次握手,初始化各自的窗口大小,如雙方均為 400 個字節。假如當前發送方給接收方發送了 200 個字節,那么,發送方的SND.NXT(下一個發送位置)會右移 200 個字節,也就是說當前的可用窗口減少了 200 個字節。
- 接受方收到后,放到緩沖隊列里面,窗口大小REV.WND =400-200=200 字節,所以 win=200 字節返回給發送方。接收方會在 ACK 的報文首部帶上縮小后的滑動窗口 200 字節
- 發送方又發送 200 字節過來,200 字節到達,繼續放到緩沖隊列。不過這時候,由于大量負載的原因,接受方處理不了這么多字節,只能處理 100 字節,剩余的 100 字節繼續放到緩沖隊列。這時候,REV.WND = 400-200-100=100 字節,即 win=100 返回發送方。
- 發送方繼續發送 100 字節過來,這時候,接收窗口 win 變為 0。
- 發送方停止發送,開啟一個定時任務,每隔一段時間,就去詢問接受方,直到 win 大于 0,才繼續開始發送。
注:窗口單位大小一般是MSS的整數倍。
滑動窗口:
- 初始化窗口:一開始,發送方會獲知接收方的窗口大小,這個大小代表了接收方當前能接受的數據量。比如,如果窗口大小是1000個字節,發送方就知道最多可以連續發送1000個字節的數據,而不會造成接收方處理不過來。
- 發送數據:發送方開始發送數據,每發送一個數據包(或一部分數據),它就會從自己的“待發送窗口”中移除相應數量的字節,這個窗口就像是可以左右滑動的門框,隨著數據的發送而向前移動。
- 接收確認:接收方接收到數據后,會發送一個ACK(Acknowledgment)確認報文,告訴發送方收到了哪些數據,并且更新自己還能接收多少數據(即新的窗口大小)。如果接收方處理數據的速度趕不上接收速度,它會減小窗口大小來減緩發送方的發送速率。
- 窗口調整:發送方根據接收方的ACK報文中的窗口大小信息,動態調整自己的發送窗口大小。如果接收方處理了一些數據,窗口大小變大,發送方就可以發送更多的數據;反之,如果接收方的緩沖區快滿了,窗口大小縮小,發送方就需要減慢發送速度。
- 滑動:這個過程中,“滑動”的概念體現在發送窗口隨著數據的發送和接收確認而向前滑動,同時也可能根據接收方的處理能力向后收縮或擴展,形象地模擬了數據傳輸的動態過程。
10. 如何理解 TCP 的keep-alive的原理?
?個 TCP 連接上,如果通信雙?都不向對?發送數據,那么 TCP 連接就不會有任何數據交換。
- 假設應?程序是?個 web 服務器,客戶端發出三次握?以后故障宕機或被踢掉?線,對于 web 服務器?已,下?個數據包將永遠?法到來,但是它??所知。
- TCP 協議的設計者考慮到了這種檢測?時間死連接的需求,于是乎設計了 keepalive 機制。它的作?就是探測對端的連接有沒有失效,通過定時發送探測包來探測連接的對端是否存活。不過默認情況下需要 7200s 沒有數據包交互才會發送 keepalive 探測包,往往這個時間太久了,我們熟知的很多組件都沒有開啟 keepalive 特性,?是選擇在應?層做?跳機制。
11. 聊?聊TCP中的端?號(端口號與網絡分層)
TCP ?兩字節的整數來表示端?,?臺主機最?允許 65536 個端?號。
- 熟知端?號:范圍0~1023
HTTP:80
HTTPS:443
SSH:22- 已登記的端?號:范圍1024~49151
MySQL:3306
Redis:6379
MongoDB:27017- 臨時端?號:范圍49152~65535
12. TCP場景題1:報文返回的確認號判斷
A B 兩個主機之間建?了?個 TCP 連接,A 主機發給 B 主機兩個 TCP 報?,??分別是 500 和 300,第?個報?的序列號是 200,那么 B 主機接收兩個報?后,返回的確認號是多少?
- 第一個報文處理:A發送的第一個報文序列號是200,含有500字節數據,因此該報文的序列號范圍是200到699(200 + 499)。
- B收到后,應確認收到的所有數據,所以確認號應該是下一個期待的序列號,即700。
- 第二個報文處理:緊接著,A發送的第二個報文序列號緊接著上一個報文,由于第一個報文是500字節,故第二個報文的序列號從700開始(實際上,TCP報文的序列號是連續的,但這里為了說明方便,我們直接按數據累加理解)。這個報文有300字節數據,因此序列號范圍是700到999(700 + 299)。
- B主機在接收到這兩個報文后,會合并確認,即確認收到第一個和第二個報文的所有數據。因此,B主機返回的確認號應當是第二個報文的數據結束后的下一個序列號,即1000。
- 結論:B主機返回的確認號是1000。
答:500+300+200
13. TCP場景題2:收到 IP 數據包解析以后,它怎么知道這個分組應該投遞到上層的哪?個協議(UDP 或 TCP)?
協議: 區分IP協議上的上層協議。在Linux系統的/etc/protocols?件中定義了所有上層協議對應的協議字段,ICMP為1,TCP為6,UDP為17
14. TCP場景題3:TCP 提供了?種字節流服務,?收發雙?都不保持記錄的邊界,應?程序應該如何提供他們??的記錄標識呢?
應?程序使???約定的規則來表示消息的邊界,?如有?些使?回?+換?(“\r\n”),?如 Redis的通信協議(RESP protocol)
- 定長消息:如果應用層的數據記錄長度固定,接收端可以每次讀取固定大小的數據塊,以此來區分不同的記錄。
- 前綴/長度字段:在每個數據記錄前添加一個字段來表示該記錄的長度或接下來數據的字節數。接收端先讀取長度信息,然后根據該長度讀取對應數量的字節作為一條完整記錄。
- 特殊分隔符:在數據記錄間使用特定的分隔符(如換行符\n),接收端通過查找這些分隔符來分割出不同的記錄。需要注意的是,如果數據內容中也可能包含分隔符,則需采用轉義機制避免混淆。
- 結束標記:在數據流的末尾添加一個特殊的結束標記,接收端識別到此標記即認為一個完整的消息結束。這種方式適用于一次性發送整個數據塊的場景。
- 協議封裝:設計應用層協議時,可以在協議頭部包含額外的信息字段,比如記錄計數或者記錄ID,幫助接收端理解和重組數據。
- 消息幀:將每個記錄封裝成帶有頭部和數據部分的幀結構,頭部中包含幀的長度或其他控制信息,接收端解析頭部后,按指定長度讀取數據部分。
15. telnet的用法:檢查端口是否打開、發送http請求
- 檢查端口是否打開
telnet 的?個最?作?就是檢查?個端?是否處于打開,使?的命令是 telnet [domainname or ip] [port],這條命令能告訴我們到遠端 server 指定端?的?連接是否可達- 發送http請求
16. tcpdump的用法:分析網絡流量,抓tcp包
tcpdump 則是?個命令?的?絡流量分析?具,功能?常強?,?般我們?來抓TCP的包
sudo apt-get install tcpdump
#執行命令開始抓包,ctrl+C,停止抓包
tcpdump
# 指定抓取2個數據包
tcpdump -c 2
# 將抓包數據寫入指定文件
tcpdump -c 10 -w tcpdump_test.log
# 打印出所有可用的網卡
tcpdump -D
# 監控指定eth0網卡
tcpdump -i eth0
# 抓包時顯示時間
tcpdump -tttt
# 抓取指定協議
tcpdump udp
tcpdump icmp
tcpdump tcp
tcpdump arp# 過濾源、目標
tcpdump src port 8080
tcpdump dst port 80# 抓取指定ip、指定端口數據
tcpdump tcp and src 192.168.1.112 and port 8080
tcpdump截取包默認顯示數據包的頭部。
- 普通情況下,直接啟動tcpdump將監視第一個網絡接口上所有流過的數據包。
- 基礎格式:時間 數據包類型 源IP 端口/協議 > 目標IP 端口/協議 協議詳細信息
17. TCP、UDP區別
- TCP是?個?向連接的、可靠的(三次握手)、基于字節流的傳輸層協議。UDP(沒有相應建立連接過程)是?個?向?連接的傳輸層協議。
- TCP有狀態:TCP 會精準記錄哪些數據發送了,哪些數據被對?接收了,哪些沒有被接收到,?且保證數據包按序到達,不允許半點差錯。
- TCP可控制:意識到丟包了或者?絡環境不佳,TCP 會根據具體情況調整??的?為,控制??的發送速度或者重發。
- TCP更可靠,常用于對數據完整性要求嚴格:文件傳輸、電子郵件等。UDP常用于對速度要求更高,對數據完整性要求較低的場景,如音視頻傳輸、在線游戲等。
18. 如要要你來設計QQ,在網絡協議上你會如何考慮
登陸采?TCP協議和HTTP協議,你和好友之間發送消息,主要采?UDP協議,內?傳?件采?了P2P技術。
總來的說:
- 登陸過程,客戶端client 采?TCP協議向服務器server發送信息,HTTP協議下載信息。登陸之后,會有?個TCP連接來保持在線狀態。
- 和好友發消息,客戶端client采?UDP協議,但是需要通過服務器轉發。騰訊為了確保傳輸消息的可靠,采?上層協議來保證可靠傳輸。如果消息發送失敗,客戶端會提示消息發送失敗,并可重新發送。
- 如果是在內???的兩個客戶端傳?件,QQ采?的是P2P技術,不需要服務器中轉。
參考文章:
https://blog.csdn.net/wwy0324/article/details/109310658
https://blog.csdn.net/weixin_44772566/article/details/136717134