摘要:所以,事實(shí)上這個字節(jié)就是網(wǎng)絡(luò)層數(shù)據(jù)報(bào)的長度限制。因?yàn)閿?shù)據(jù)報(bào)的首部為字節(jié),所以數(shù)據(jù)報(bào)的數(shù)據(jù)區(qū)長度最大為字節(jié)。這個字節(jié)就是我們可以使用的字節(jié)數(shù)當(dāng)我們發(fā)送的數(shù)據(jù)大于的時候會怎樣呢這也就是說數(shù)據(jù)報(bào)大于字節(jié),大于,這個時候發(fā)送方層就需要分片。
前言
因?yàn)閁DP數(shù)據(jù)傳輸?shù)臒o連接特性,最簡單的UDP數(shù)據(jù)傳輸就是一次數(shù)據(jù)交互一個UDP包搞定,這樣就不用管分包問題(因?yàn)椴幌馮CP,UDP傳輸時如果分包則是不能保證順序的,這會帶來很多問題)。
所以你一次交互的數(shù)據(jù)如果太多的話,用UDP實(shí)現(xiàn)就很可能并不優(yōu)雅。
思考在進(jìn)行UDP編程的時候,我們最容易想到的問題就是,一次發(fā)送多少bytes好?
當(dāng)然,這個沒有唯一答案,相對于不同的系統(tǒng),不同的要求,其得到的答案是不一樣的,我這里僅對像ICQ一類的發(fā)送聊天消息的情況作分析,對于其他情況,你或許也能得到一點(diǎn)幫助。
首先,我們知道,TCP/IP通常被認(rèn)為是一個四層協(xié)議系統(tǒng):包括鏈路層、網(wǎng)絡(luò)層、運(yùn)輸層、應(yīng)用層 。
UDP屬于運(yùn)輸層,下面我們由下至上一步一步來看。
結(jié)論1:局域網(wǎng)環(huán)境下,建議將UDP數(shù)據(jù)控制在1472字節(jié)以下以太網(wǎng)(Ethernet)數(shù)據(jù)幀的長度必須在46-1500字節(jié)之間,這是由以太網(wǎng)的物理特性決定的,這個1500字節(jié)被稱為鏈路層的MTU(最大傳輸單元)。 但這并不是指鏈路層的長度被限制在1500字節(jié),其實(shí)這這個MTU指的是鏈路層的數(shù)據(jù)區(qū),并不包括鏈路層的首部和尾部的18個字節(jié)。
所以,事實(shí)上這個1500字節(jié)就是網(wǎng)絡(luò)層IP數(shù)據(jù)報(bào)的長度限制。因?yàn)镮P數(shù)據(jù)報(bào)的首部為20字節(jié),所以IP數(shù)據(jù)報(bào)的數(shù)據(jù)區(qū)長度最大為1480字節(jié)。而這個1480字節(jié)就是用來放TCP傳來的TCP報(bào)文段或UDP傳來的UDP數(shù)據(jù)報(bào)的。
又因?yàn)閁DP數(shù)據(jù)報(bào)的首部8字節(jié),所以UDP數(shù)據(jù)報(bào)的數(shù)據(jù)區(qū)最大長度為1472字節(jié)。這個1472字節(jié)就是我們可以使用的字節(jié)數(shù)
當(dāng)我們發(fā)送的UDP數(shù)據(jù)大于1472的時候會怎樣呢?這也就是說IP數(shù)據(jù)報(bào)大于1500字節(jié),大于MTU,這個時候發(fā)送方IP層就需要分片(fragmentation)。把數(shù)據(jù)報(bào)分成若干片,使每一片都小于MTU,而接收方IP層則需要進(jìn)行數(shù)據(jù)報(bào)的重組。這樣就會多做許多事情,而更嚴(yán)重的是,由于UDP的特性,當(dāng)某一片數(shù)據(jù)傳送中丟失時,接收方無法重組數(shù)據(jù)報(bào),將導(dǎo)致丟棄整個UDP數(shù)據(jù)報(bào)。
因此,在普通的局域網(wǎng)環(huán)境下,我建議將UDP的數(shù)據(jù)控制在1472字節(jié)以下為好。
結(jié)論2:Internet編程時,建議將UDP數(shù)據(jù)控制在548字節(jié)以下進(jìn)行Internet編程時則不同,因?yàn)镮nternet上的路由器可能會將MTU設(shè)為不同的值。如果我們假定MTU為1500來發(fā)送數(shù)據(jù),而途經(jīng)的某個網(wǎng)絡(luò)的MTU值小于1500字節(jié),那么系統(tǒng)將會使用一系列的機(jī)制來調(diào)整MTU值,使數(shù)據(jù)報(bào)能夠順利到達(dá)目的地,這樣就會做許多不必要的操作。
鑒于Internet上的標(biāo)準(zhǔn)MTU值為576字節(jié),所以我建議在進(jìn)行Internet的UDP編程時, 最好將UDP的數(shù)據(jù)長度控件在548字節(jié)(576-8-20)以內(nèi)。
這句話貌似有問題,unix網(wǎng)絡(luò)編程第一卷里說:ipv4協(xié)議規(guī)定ip層的最小重組緩沖區(qū)大小為576!所以,建議udp包不要超過這個大小,而不是因?yàn)閕nternet的標(biāo)準(zhǔn)MTU是576!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/73087.html
摘要:由于本身發(fā)送的就是一份一份的數(shù)據(jù)報(bào),所以自然而然的就有一個上限的大小。并且由于本身的不可靠性以及無序性,如果發(fā)送了這三個數(shù)據(jù)報(bào)過來,端接收到的可能是任意順序任意個數(shù)三個數(shù)據(jù)報(bào)的排列組合。 前言 最頭疼的問題莫過于到底該選TCP還是UDP作為傳輸層協(xié)議。通過快速對比分析 TCP 和 UDP 的區(qū)別,來幫助即時通訊初學(xué)者快速了解這些基礎(chǔ)的知識點(diǎn),從而在IM、消息推送等網(wǎng)絡(luò)通信應(yīng)用場景中能準(zhǔn)...
摘要:控制,進(jìn)程收到該信號退出時會產(chǎn)生文件,類似于程序錯誤信號。執(zhí)行了非法指令。調(diào)用函數(shù)產(chǎn)生,將會使程序非正常結(jié)束。它與的區(qū)別在于后者是由于對合法地址的非法訪問觸發(fā)編程中過程中遇到不慌,下面列舉一些網(wǎng)絡(luò)傳輸層知識。下面列舉一些Linux中常見的信號,平時做開發(fā)經(jīng)常遇到的。SIGINT:程序終止信號。當(dāng)用戶按下CRTL+C時通知前臺進(jìn)程組終止進(jìn)程。 SIGQUIT:Ctrl+控制,進(jìn)程收到該信號退出...
摘要:協(xié)議族的構(gòu)成數(shù)據(jù)鏈路層網(wǎng)絡(luò)層傳輸層應(yīng)用層和是網(wǎng)絡(luò)層的協(xié)議,但是它所工作的內(nèi)容是鏈路層的。。。發(fā)送的時候,協(xié)議為每個包編號,簡稱,以便接收的一方按照順序還原。并沒有提供任何機(jī)制,表示原始文件的大小,這由應(yīng)用層的協(xié)議來規(guī)定。 TCP/IP協(xié)議族的構(gòu)成 * 數(shù)據(jù)鏈路層:ARP,RARP * 網(wǎng)絡(luò)層: IP,ICMP,IGMP * 傳輸層:TCP ,UDP,UGP * 應(yīng)用層:Telnet,F...
摘要:擁塞控制算法包含三種擁塞控制算法,和。在早期的實(shí)現(xiàn)當(dāng)中,這兩個擁塞控制算法分別是在發(fā)送端和接收端實(shí)現(xiàn)的。音頻算法音頻算法指的是在發(fā)送端對發(fā)送信號依次進(jìn)行回聲消除降噪以及音量均衡操作,它包含三個算法回聲消除,噪聲抑制和自動增益控制。 1、背景 RTC(Real-time Communica...
閱讀 3054·2021-11-25 09:43
閱讀 1650·2021-11-24 11:15
閱讀 2370·2021-11-22 15:25
閱讀 3515·2021-11-11 16:55
閱讀 3253·2021-11-04 16:10
閱讀 2785·2021-09-14 18:02
閱讀 1697·2021-09-10 10:50
閱讀 1081·2019-08-29 15:39