UDP协议和TCP协议
UDP協(xié)議
UDP(User Datagram Protocol):用戶報(bào)文協(xié)議
沒有任何特點(diǎn)
和TCP對比:不可靠、無連接、面向報(bào)文
1. 網(wǎng)絡(luò)的基本情況就是不可靠的
2. UDP作為一種最簡單的傳輸層協(xié)議,基本上沒有做什么的操作來幫助用戶處理復(fù)雜的網(wǎng)絡(luò)環(huán)境,所以UDP保留下來這種不可靠的特性。
3. UDP報(bào)文的頭信息(定長的(8字節(jié)))
4. 校驗(yàn)和(checksum)的作用和工作機(jī)制
發(fā)送端:checksum(payload)=>校驗(yàn)和1 (把校驗(yàn)和1填寫到UDP的header 中)
接收端:checksum(payload)=>校驗(yàn)和2
比較校驗(yàn)和2和header 中的校驗(yàn)和1:如果不等,payload在傳輸過程中一定出現(xiàn)差錯(cuò)了;如果相等,大概率payload沒有出現(xiàn)出錯(cuò)
針對校驗(yàn)和對不上的情況,直接丟棄包: UDP不是特別可靠
5.UDP協(xié)議棧的作用
重點(diǎn):我們在應(yīng)用層調(diào)用send方法時(shí)send方法返回了,就意味著數(shù)據(jù)已經(jīng)到達(dá)網(wǎng)絡(luò)中
接收到數(shù)據(jù)之后
6. UDP有接收緩沖區(qū),沒有發(fā)送緩沖區(qū)
用戶發(fā)送多少數(shù)據(jù),UDP也會發(fā)送多少數(shù)據(jù),所以UDP是面向報(bào)文的
UDP發(fā)送數(shù)據(jù)無需任何準(zhǔn)備工作,隨時(shí)隨地可以發(fā)送:寄信vs打電話,所以UDP是無連接的
7. 面向數(shù)據(jù)報(bào)文導(dǎo)致的一個(gè)后果:
由于底層(物理層+網(wǎng)絡(luò)層))都對一次發(fā)送的數(shù)據(jù)有大小限制。如果強(qiáng)行發(fā)送大于限制的數(shù)據(jù),就會出現(xiàn)數(shù)據(jù)被截?cái)唷?br /> 全雙工:同一個(gè)信道是雙向的。
8. UDP協(xié)議的最適用場景
對實(shí)時(shí)性要求較高,對可靠性要求較低的場景
實(shí)時(shí)聊天(語音、視頻聊天)
UDP支持廣播。如果有廣播需求,也可以考慮用UDP。
TCP協(xié)議
TCP(Transmission Control Protocol):傳輸控制協(xié)議
目標(biāo):
什么是可靠性?
TCP只能保證盡自己最大的可能,把數(shù)據(jù)有序地發(fā)送給對方。但不能保證一定能發(fā)送給對方。
TCP使用什么樣的機(jī)制,來保證可靠性——確認(rèn)應(yīng)答機(jī)制
編號機(jī)制:發(fā)送方為發(fā)送的數(shù)據(jù)做編號,應(yīng)答的時(shí)候帶上對應(yīng)編號即可。
總之:發(fā)送方?jīng)]有收到對應(yīng)的應(yīng)答。則認(rèn)為對方?jīng)]有收到數(shù)據(jù)——超時(shí)重傳機(jī)制
TCP協(xié)議的header格式
4位header長度
那具體怎么區(qū)分本次segment是否有應(yīng)答的作用呢?
ack ==1時(shí)segment有應(yīng)答功能;ack == 0時(shí)segment沒有應(yīng)答功能
32位確認(rèn)序號:ASN(Acknowledge Sequence Number)
SN和ASN書寫規(guī)則
h: 108(隨便選的) ,e: 109 ,l: 110, l: 111, o: 112
[ hello ]
SN: 108
接收方是知道長度是5的,所以,接收方如果收到數(shù)據(jù),則表示108 - 112已經(jīng)全部收到了
上述例子中,接收方要應(yīng)答的話ASN應(yīng)該填寫113。隱含的意思就是113之前的所有數(shù)據(jù),已經(jīng)全部接收到了。
發(fā)送方的處理邏輯是一致的。超時(shí)之后,直接重傳即可(重傳的數(shù)據(jù)不會丟失),不需要區(qū)分情況
對于發(fā)送方,收到了一個(gè)應(yīng)答segASN = x時(shí),發(fā)送方是怎么理解這個(gè)信號的?
對方已經(jīng)收到收到了x-1之前的所有數(shù)據(jù)了。
TCP協(xié)議是有接收緩沖區(qū)的,保證對方接收是有序的(接收端可以重新整理數(shù)據(jù),接收過得數(shù)據(jù)不再接收)
如果超時(shí)之后,重傳對方仍然沒有收到,怎么辦?
繼續(xù)重傳,直到到達(dá)一個(gè)閾值(假設(shè)6次)。如果6次,我都沒有收到應(yīng)答。我就認(rèn)為不需要再努力的,放棄:
rst = 1,reset segment
rst = 0,不是reset segment
連接管理(Connection Message)
為什么需要連接(連接是什么抽象)?
(1)保證整理亂序到達(dá)的數(shù)據(jù)
(2)在數(shù)據(jù)暫時(shí)未被應(yīng)用層讀走之前,臨時(shí)保存數(shù)據(jù)
因?yàn)橐紤]重發(fā)的可能性,所以未應(yīng)答的數(shù)據(jù)不能直接扔掉,所以需要一個(gè)空間暫存
例:send(‘hello’)成功,代表數(shù)據(jù)被發(fā)送到OS的TCP協(xié)議棧的發(fā)送緩沖區(qū)中
發(fā)送方時(shí),需要維護(hù)已經(jīng)發(fā)送的SN
接收方時(shí),需要維護(hù)應(yīng)該應(yīng)答的SN
上述3點(diǎn),足以說明:TCР協(xié)議棧,為了保證之前的那些機(jī)制可用,必須為每個(gè)信道,維護(hù)一組相關(guān)的數(shù)據(jù)! !
建立連接階段的必要性
類比:寄信+電話
TCP的建立連接,需要雙方交換幾次信息——三 次——三 次握手
[常見面試題]為什么是三次?為什么不是兩次,為什么不是四次,為什么不是其他次?
4種segment:數(shù)據(jù)segment、應(yīng)答segment (ack= 1)、reset segment (rst= 1)、同步segment (syn= 1)
邏輯上對信道的抽象。物理上各自內(nèi)存中維護(hù)的信道相關(guān)的一組數(shù)據(jù)。
因?yàn)門CP為了追求可靠性引入一系列機(jī)制(確認(rèn)應(yīng)答機(jī)制,超時(shí)重傳機(jī)制),為了這些機(jī)制能正常的工作,使得TCP必須引入連接的概念。
總結(jié)
以上是生活随笔為你收集整理的UDP协议和TCP协议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数学系专业课参考书
- 下一篇: 单点登录 用友nc_用友NC与OA集成解