- 博主簡(jiǎn)介:想進(jìn)大廠(chǎng)的打工人
- 博主主頁(yè):@xyk:
- 所屬專(zhuān)欄:?JavaEE初階
本篇文章將為大家介紹應(yīng)用層中UDP協(xié)議~~
在應(yīng)用層這里,雖然存在一些現(xiàn)有的協(xié)議(HTTP),但是也有很多情況,需要程序猿自定制協(xié)議,對(duì)于自定制協(xié)議來(lái)說(shuō),就是個(gè)很簡(jiǎn)單的事情~~那么怎么理解這件事情?
目錄
文章目錄
一、應(yīng)用層協(xié)議(自定義組織格式)
1.1 如何約定自定義協(xié)議
二、UDP格式
2.1 UDP報(bào)文的格式
一、應(yīng)用層協(xié)議(自定義組織格式)
應(yīng)用層在大多數(shù)情況下,可能需要程序猿自定義協(xié)議來(lái)約定~
什么是自定義組織協(xié)議?
比如說(shuō):qq發(fā)一個(gè)消息,構(gòu)成一個(gè)應(yīng)用層的數(shù)據(jù)報(bào)
此處只是模擬一下qq的數(shù)據(jù)報(bào)格式,真實(shí)的qq采取的數(shù)據(jù)報(bào)可能更加復(fù)雜
約定應(yīng)用層數(shù)據(jù)報(bào),數(shù)據(jù)格式,就是在自定義協(xié)議
1.1 如何約定自定義協(xié)議
約定:
1.要傳輸哪些信息(根據(jù)需求走的)
2.確定數(shù)據(jù)按照啥樣的格式來(lái)組織(隨意約定的)
網(wǎng)絡(luò)上傳輸?shù)?,本質(zhì)上都是 0101,視為二進(jìn)制的字符串~~
需要把上述這些信息整合成一個(gè)字符串~~
?只要發(fā)送方按照這套格式來(lái)組織數(shù)據(jù),接收方按照這套格式來(lái)解析數(shù)據(jù),兩者能對(duì)上,這樣的格式就是可行的~~~
常見(jiàn)組織格式:
- 分隔符
- 以空格、回車(chē)…分割
- 以分號(hào)…表示結(jié)束
實(shí)際開(kāi)發(fā)會(huì)使用一些現(xiàn)成的格式:
- xml
- html是特殊的xml格式
- html標(biāo)簽名和含義都是固定的,是我們需要遵守的
標(biāo)簽的形式:< XXX > … </ XXX>
2.json
-
以{ }作為標(biāo)識(shí)
-
內(nèi)部有多個(gè)鍵值對(duì),每個(gè)鍵值對(duì)之間用逗號(hào)分割
-
key與值之間使用冒號(hào)分割
- key必須是字符串,
- 值可以是數(shù)組,字符串,數(shù)字甚至是另一個(gè)json
二、UDP格式
2.1 UDP報(bào)文的格式
?實(shí)際的格式不是這樣子的,這樣只是為了計(jì)算機(jī)網(wǎng)絡(luò)的教材方便印刷~~~
載荷中存儲(chǔ)的是一個(gè)完整的應(yīng)用層數(shù)據(jù)報(bào)~
每個(gè)端口號(hào) 在UDP報(bào)文里,占兩個(gè)字節(jié)~~
其實(shí)端口號(hào)的取值范圍 0 -> 65535
< 1024 的端口號(hào),稱(chēng)為“知名端口號(hào)”,給一些名氣大的服務(wù)器預(yù)留的端口~~
比如:http :80,ssh : 22,ftp:21,
- “端口0”并不正式存在。 它被定義為無(wú)效的端口號(hào)。
至于“專(zhuān)屬座位”有什么用
- 服務(wù)器一般端口號(hào)不需要怎么改變,所以保持在一個(gè)端口號(hào)是個(gè)正常的抉擇
- 不然每次你都要去查這個(gè)常用的服務(wù)器端口號(hào)是多少~
2字節(jié) 表示的范圍 0 -> 65535 => 64KB(64KB - 1B),表示一個(gè)UDP報(bào)文最大長(zhǎng)度就是 64 KB?。。。ń疲?/p>
- 代表UDP正文最大就是64KB大而已
- 不是說(shuō)只能傳一個(gè)“65535”大小的整數(shù)~
- 而是65535字節(jié)的數(shù)據(jù)量!
時(shí)代不同,現(xiàn)在64KB很小了,一個(gè)表情包都能幾MB了~
- 但是如果要擴(kuò)大這個(gè)限制,那么我們就要升級(jí)UDP系統(tǒng),全世界主機(jī)太多了,用的都不是一樣的操作系統(tǒng),有windows,linux,mac
- 只有都升級(jí),才能通訊,這不現(xiàn)實(shí)~
要傳輸大數(shù)據(jù)
- 把一個(gè)大的數(shù)據(jù)拆分為多個(gè)數(shù)據(jù)部分,使用多個(gè)UDP數(shù)據(jù)報(bào)來(lái)傳輸~~
- 不用UDP,直接用TCP去傳輸 ,TCP就沒(méi)有限制~
2.2 校驗(yàn)和:
網(wǎng)絡(luò)傳輸并非那么穩(wěn)定,可能會(huì)出現(xiàn)誤差
- 我們傳遞的數(shù)據(jù)本質(zhì)是01…,而我們用高低電平表示01
難免會(huì)有一些干擾,例如強(qiáng)磁場(chǎng)(太陽(yáng)黑子)
這樣就會(huì)導(dǎo)致一些高電平轉(zhuǎn)變?yōu)榈碗娖剑碗娖睫D(zhuǎn)變?yōu)楦唠娖?/p>
-
那么校驗(yàn)和的存在,就相當(dāng)于定下了一個(gè)標(biāo)準(zhǔn)
- 滿(mǎn)足這個(gè)標(biāo)準(zhǔn),數(shù)據(jù)不一定對(duì);但是不滿(mǎn)足這個(gè)標(biāo)準(zhǔn),這個(gè)數(shù)據(jù)肯定錯(cuò)
- 而這個(gè)校驗(yàn)和,要是中間數(shù)據(jù)發(fā)生01轉(zhuǎn)變,大概率是對(duì)不上的
- 可能校驗(yàn)和跟數(shù)據(jù)發(fā)生突變后,還對(duì)上了。很極端的情況
比如:去市場(chǎng)買(mǎi)菜
需要買(mǎi)西紅柿,雞蛋,茄子,芹菜,一共四樣
如果買(mǎi)到的菜少于或者多于四樣,100%是錯(cuò)的!
但是如果手里的菜是四樣,也不一定是對(duì)的,可能是錯(cuò)誤的~
為了讓校驗(yàn)和能夠識(shí)別率更高一些,計(jì)算的時(shí)候通常會(huì)以數(shù)據(jù)內(nèi)容作為參數(shù)來(lái)進(jìn)行計(jì)算.
數(shù)據(jù)內(nèi)容發(fā)生變化,校驗(yàn)和也會(huì)變化~~
?帶有內(nèi)容的校驗(yàn)和:
發(fā)送方把這一串?dāng)?shù)據(jù)發(fā)給接收方,接收方收到的數(shù)據(jù),既有載荷,也有校驗(yàn)和sum1
接受方就可以按照載荷按照同樣的算法,再計(jì)算一邊校驗(yàn)和,得到了sum2
對(duì)于sum1和sum2是否相同,如果不相同,數(shù)據(jù)一定出現(xiàn)了問(wèn)題?。?/p>
udp這里使用的是CRC算法,是一個(gè)簡(jiǎn)單粗暴的算法,大家可以自行了解~~文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-459563.html
UDP協(xié)議還是相對(duì)簡(jiǎn)單,下一篇我們介紹TCP協(xié)議~~~~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-459563.html
到了這里,關(guān)于【JavaEE】應(yīng)用層自定義協(xié)議及UDP協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!