0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

網(wǎng)絡(luò)中發(fā)送長度小于64字節(jié)的報(bào)文時(shí)如何傳送

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-10-17 17:26 ? 次閱讀

電磁波在雙絞線上傳輸?shù)乃俣葹?.7倍光速,在1km電纜的傳播時(shí)延約為5us。傳統(tǒng)的網(wǎng)絡(luò)信道比較差,需要有重傳機(jī)制保障可靠性。于是,在節(jié)點(diǎn)A向節(jié)點(diǎn)B發(fā)送數(shù)據(jù)進(jìn)行通信的時(shí)候,要保證以太網(wǎng)的重傳,必須保證A收到碰撞信號的時(shí)候,數(shù)據(jù)包沒有傳完,要實(shí)現(xiàn)這一要求,A和B之間的距離很關(guān)鍵,也就是說信號在A和B之間傳輸?shù)膩砘貢r(shí)間必須控制在一定范圍之內(nèi)。IEEE定義了這個(gè)標(biāo)準(zhǔn),一個(gè)碰撞域內(nèi),最遠(yuǎn)的兩臺機(jī)器之間的round-trip time 要小于512bit 時(shí)間。(來回時(shí)間小于512位時(shí),所謂位時(shí)就是傳輸一個(gè)比特需要的時(shí)間)。因此,傳統(tǒng)以太網(wǎng)有如下特點(diǎn):

1、最大覆蓋距離(兩個(gè)站點(diǎn)最遠(yuǎn)的距離):2500m; 2、爭用期(即一個(gè)信號最遠(yuǎn)來回的傳播時(shí)間):51.2us;過來這個(gè)時(shí)間還未監(jiān)聽到?jīng)_突,則說明無沖突; 3、最小幀長:64字節(jié);因?yàn)閭鹘y(tǒng)以太網(wǎng)速率是10Mbps,爭用期是51.2us;即在這個(gè)時(shí)間內(nèi),幀的數(shù)據(jù)不能發(fā)完,否則將不能監(jiān)聽到?jīng)_突了(CSMA/CD協(xié)議是邊發(fā)邊聽、不發(fā)不聽;因?yàn)槿绻麕l(fā)完,則不在監(jiān)聽,這個(gè)時(shí)候即使來了有沖突的信號,不在監(jiān)聽,也不知道已經(jīng)沖突了),這樣的話CSMA/CD協(xié)議可靠性也就大大折扣了;即:B/10M >= 51.2us;即512bit,64個(gè)字節(jié); 4、幀間最小間隔:9.6us;相當(dāng)于發(fā)送96bit;即在CSDM/CD協(xié)議下,一個(gè)站點(diǎn)在監(jiān)測到信道空閑后,需要等待9.6us才能發(fā)送數(shù)據(jù);(主要目的是留給剛剛接收數(shù)據(jù)的站點(diǎn)清理接收緩存,做好接下一陣的準(zhǔn)備----------流量控制其實(shí)也是) 上述所說的以太網(wǎng)幀是針對以太網(wǎng)Ⅱ型幀進(jìn)行的描述。幀格式如下:

9486e7d8-4c25-11ed-a3b6-dac502259ad0.png

那么,現(xiàn)在互聯(lián)網(wǎng)中發(fā)送長度小于64字節(jié)的報(bào)文時(shí)如何傳送呢?比如ARP報(bào)文。有效長度如下: ARP報(bào)文:4字節(jié)+4字節(jié)+6字節(jié)+4字節(jié)+6字節(jié)+4字節(jié)=28字節(jié),遠(yuǎn)不夠64字節(jié)。 事實(shí)上,在傳送ARP報(bào)文時(shí),需要進(jìn)行填充。

948dd516-4c25-11ed-a3b6-dac502259ad0.png

arp程序代碼里,會增加一個(gè)填充程序,填充字段 18字節(jié), 這樣以太網(wǎng)數(shù)據(jù)部分=ARP28字節(jié)+填充18字節(jié)=46字節(jié)。這樣,Dmac 6字節(jié)+S mac 6字節(jié)+ type 2字節(jié)+ARP 46字節(jié)+FCS4字節(jié)=64字節(jié)。 從而保證了互聯(lián)網(wǎng)上可以有效的傳輸小于64字節(jié)的報(bào)文。上述內(nèi)容來源于網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系我刪除。網(wǎng)上有很多很多討論為什么以太網(wǎng)幀最短幀為64字節(jié)的文章,大家可以自行百度。我們關(guān)注的問題是,如果不填充,而是強(qiáng)行傳送小于64字節(jié)的報(bào)文呢?我們搭建了一個(gè)上板實(shí)驗(yàn)進(jìn)行了驗(yàn)證。

實(shí)驗(yàn)環(huán)境

開發(fā)板:Zedboard。 網(wǎng)絡(luò):雙絞線接Zedboard四端口擴(kuò)展板1口和3口并形成回環(huán)。 EDA工具:Vivado2018.2、ModelSim10.5。 真實(shí)硬件驗(yàn)證環(huán)境如下圖(請忽略圖中紙箱子等雜物):

949aae94-4c25-11ed-a3b6-dac502259ad0.png

回環(huán)結(jié)構(gòu)

實(shí)驗(yàn)?zāi)康模簽榱蓑?yàn)證,在實(shí)際鏈路中短于64字節(jié)的mac數(shù)據(jù)幀能否通過雙絞線在phy層之間傳輸,以及mac核對于長度不符合要求的數(shù)據(jù)幀的處理情況。

事實(shí)上,在上圖中,最短幀能否通過MAC1對應(yīng)的RJ45網(wǎng)口發(fā)出來的前提是能否順利的通過PHY芯片,FPGA芯片、PHY芯片以及RJ45接口的關(guān)系圖如下:

94b5c68e-4c25-11ed-a3b6-dac502259ad0.png

PHY與FPGA之間的接口為RGMII接口。在FPGA內(nèi)部構(gòu)建的長度小于64字節(jié)的以太網(wǎng)幀,通過FPGA芯片與PHY芯片之間的RGMII接口首先發(fā)給PHY芯片,如果能夠順利的通過PHY芯片,才能從RJ45接口(MAC1)通過雙絞線發(fā)送給MAC2的RJ45接口,進(jìn)而再經(jīng)過MAC2對應(yīng)的RJ45接口、PHY芯片,最后送回到FPGA芯片內(nèi)部。如下圖所示,左側(cè)MAC1采用自己寫的超短幀產(chǎn)生和接收模塊,右側(cè)MAC2采用Opencores上的開源MAC核。

94bdfc00-4c25-11ed-a3b6-dac502259ad0.png

數(shù)據(jù)流

Step1:通過data_gen模塊循環(huán)發(fā)送定長數(shù)據(jù)32’h12_34_56_78,通過8位數(shù)據(jù)端口傳給ephy_source模塊。

Step2:ephy_source模塊根據(jù)接收的數(shù)據(jù),以及長度進(jìn)行mac幀封裝,并填寫固定目的mac地址:48’h01_01_01_01_01_01以及源mac地址:48’h08_08_08_08_08_08之后依次按單字節(jié)發(fā)送數(shù)據(jù)域內(nèi)數(shù)據(jù),并進(jìn)行crc計(jì)算。

Step3:通過rgmii接口模塊進(jìn)行8位gmii接口數(shù)據(jù)到4位rgmii接口數(shù)據(jù)的轉(zhuǎn)換后接到phy層。

Step4:經(jīng)雙絞線傳輸后來到另一端的phy層,并依次經(jīng)過phy層、rgmii轉(zhuǎn)換送入mac處理。

Step5:mac接收的數(shù)據(jù),在去掉前導(dǎo)碼、crc校驗(yàn)后,以32位寬的形式將數(shù)據(jù)部分發(fā)送給用戶側(cè),這里直接將數(shù)據(jù)通過回環(huán)發(fā)送到mac2的用戶發(fā)送數(shù)據(jù)端口,再次通過mac2的組幀、crc計(jì)算、8位gmii到4位rgmii的轉(zhuǎn)換之后通過phy2的tx發(fā)送回phy1的接收端口。

超短幀長度設(shè)置為40字節(jié)。從MAC1發(fā)出,經(jīng)過PHY1芯片,經(jīng)過雙絞線和MAC2的PHY2芯片,可以在MAC2的RGMII接口處收到。

94c5573e-4c25-11ed-a3b6-dac502259ad0.png

仿真及上板結(jié)果如下:

94d468d2-4c25-11ed-a3b6-dac502259ad0.png

可以看到在數(shù)據(jù)幀長度不符合標(biāo)準(zhǔn)的時(shí)候,是沒有辦法通過MAC2的mac核的,但是能夠到達(dá)接收端的rgmii_rx部分。

經(jīng)檢查,發(fā)現(xiàn)開源IP核接收數(shù)據(jù)文件mac_rx_ctrl.v中對接收到的數(shù)據(jù)幀進(jìn)行了長度判斷,把不滿足64字節(jié)的數(shù)據(jù)幀給過濾掉了。

94e3bef4-4c25-11ed-a3b6-dac502259ad0.png

通過寄存器可以配置LTU MTU大小,默認(rèn)的LTU=64bytes MTU=1530bytes。

950a3624-4c25-11ed-a3b6-dac502259ad0.png

為了能接收到長度為40直接的數(shù)據(jù)幀,我們進(jìn)行了如下修改:

9515d7b8-4c25-11ed-a3b6-dac502259ad0.png

LTU限制改為34, payload=34-4=30,由于接收控制的最小幀長信號是在寄存器組里配置,所以對需要在reg_init中更改。

修改完之后,在MAC2處即能接收到40字節(jié)的以太網(wǎng)幀了。

95286b6c-4c25-11ed-a3b6-dac502259ad0.png

數(shù)據(jù)流可以在MAC2處回環(huán)了。但從MAC2的發(fā)送口收到的數(shù)據(jù)幀長度被自動填充到64字節(jié)了。如下圖中的打紅叉處。

95332868-4c25-11ed-a3b6-dac502259ad0.png

經(jīng)檢查,發(fā)現(xiàn)開源代碼的發(fā)送模塊部分會自動的填充補(bǔ)零。相關(guān)模塊代碼如下:

953b3c6a-4c25-11ed-a3b6-dac502259ad0.png

修改成支持傳輸40字節(jié)的超短幀,如下圖:

954cf55e-4c25-11ed-a3b6-dac502259ad0.png

修改過之后,超短幀數(shù)據(jù)即可形成回環(huán)。

955e7e1e-4c25-11ed-a3b6-dac502259ad0.png

上板抓取超短幀

MAC1超短幀發(fā)送端

9586e174-4c25-11ed-a3b6-dac502259ad0.png

ephy_send側(cè)的發(fā)送數(shù)據(jù),對應(yīng)抓取數(shù)據(jù)幀位置如下圖。

95ac2e3e-4c25-11ed-a3b6-dac502259ad0.png

注意:這里沒有抓發(fā)送側(cè)的rgmii_txd是因?yàn)樗莖ddr型的驅(qū)動,沒有辦法驅(qū)動寄存器,所以沒法打拍抓信號,更不能直接抓,所以抓了轉(zhuǎn)換前的8位數(shù)據(jù)。

MAC2超短幀接收端

95b22884-4c25-11ed-a3b6-dac502259ad0.png

值得注意的是,這里的rgmii_rx是buf型的驅(qū)動,所以是可以抓的信號,并且還未進(jìn)行4到8的轉(zhuǎn)換,所以這里只有上升沿采到的高半字節(jié)偶數(shù),而低半字節(jié)需要下降沿采樣。抓取位置對應(yīng)于下圖中的箭頭處。

95b855ba-4c25-11ed-a3b6-dac502259ad0.png

結(jié)論

通過以上實(shí)驗(yàn)可知,超短幀是可以經(jīng)過雙絞線傳輸?shù)?,PHY芯片不會對其進(jìn)行過濾。但沒有對商用的交換機(jī)進(jìn)行測試,也許會出現(xiàn)文中提到的MAC那樣,硬件芯片會自動補(bǔ)零到64字節(jié)了。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    40

    文章

    5455

    瀏覽量

    172272
  • 電磁波
    +關(guān)注

    關(guān)注

    21

    文章

    1459

    瀏覽量

    53896

原文標(biāo)題:【實(shí)測】網(wǎng)絡(luò)中可以傳小于64字節(jié)的數(shù)據(jù)包嗎?

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    百問MQTT協(xié)議分析 - MQTT簡述及協(xié)議報(bào)文格式組成

    )1字節(jié)固定報(bào)頭,2字節(jié)心跳報(bào)文,報(bào)文結(jié)構(gòu)緊湊 e)消息QoS支持,可靠傳輸保證 16.1.3 應(yīng)用 ?MQTT協(xié)議廣泛應(yīng)用于物聯(lián)網(wǎng)、移動互聯(lián)網(wǎng)、智能硬件、車聯(lián)網(wǎng)、電力能源等領(lǐng)域。 a
    發(fā)表于 12-13 09:29

    TL16C752D具有64字節(jié)FIFO的雙路UART數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《TL16C752D具有64字節(jié)FIFO的雙路UART數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-10 09:19 ?0次下載
    TL16C752D具有<b class='flag-5'>64</b><b class='flag-5'>字節(jié)</b>FIFO的雙路UART數(shù)據(jù)表

    TL16C752B-EP帶64字節(jié)FIFO的3.3 V雙通道UART數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《TL16C752B-EP帶64字節(jié)FIFO的3.3 V雙通道UART數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-03 12:53 ?0次下載
    TL16C752B-EP帶<b class='flag-5'>64</b><b class='flag-5'>字節(jié)</b>FIFO的3.3 V雙通道UART數(shù)據(jù)表

    請問ESP32 BLE如何發(fā)送大于20字節(jié)的數(shù)據(jù)?

    我在開發(fā)藍(lán)牙透傳數(shù)據(jù),目前只能發(fā)送20個(gè)字節(jié)大小的數(shù)據(jù)包,請問大家是如何實(shí)現(xiàn)發(fā)送大于20字節(jié)的數(shù)據(jù)包的。我嘗試過將數(shù)據(jù)包才開每隔80ms發(fā)送
    發(fā)表于 06-21 09:21

    ESP32 BLE如何才能接收大于20字節(jié)的數(shù)據(jù)?

    20字節(jié),起初我以為是app的問題,后來用sniffer 抓包發(fā)現(xiàn)app 確實(shí)寫下了42字節(jié),但是ESP32 沒有回應(yīng),最后重發(fā)N次后判斷超時(shí),斷開連接。 請問有哪位大神知道怎么設(shè)置接收數(shù)據(jù)也能接收大于20字節(jié)的辦法。
    發(fā)表于 06-20 06:44

    用ESP32發(fā)送數(shù)據(jù),串口最大接收120字節(jié)就進(jìn)入中斷了,如何才能接收2048字節(jié)的數(shù)據(jù)?

    請教一個(gè)問題,我現(xiàn)在用ESP32發(fā)送數(shù)據(jù),串口最大接收120字節(jié)就進(jìn)入中斷了,我更改了uart_driver_install中.rxfifo_full_thresh
    發(fā)表于 06-20 06:43

    esp32-C3如何才能連續(xù)發(fā)送261字節(jié)報(bào)文

    我們使用的芯片是esp32-C3 IDF版本版本:2.8.1 Build id:20230207-1119 我們嘗試連續(xù)發(fā)送261字節(jié)報(bào)文,發(fā)幾次后mesh_core/transport.c
    發(fā)表于 06-07 07:38

    EPS32-C3使用USB串口收發(fā)數(shù)據(jù),在發(fā)送長度64的數(shù)據(jù)時(shí),上位機(jī)串口工具無法接收到數(shù)據(jù)怎么解決?

    ticks_to_wait)函數(shù) 在發(fā)送長度64的數(shù)據(jù)時(shí),上位機(jī)串口工具無法接收到數(shù)據(jù), 然后再發(fā)送64
    發(fā)表于 06-06 06:12

    NB86-OpenCPU AT指令發(fā)送報(bào)文數(shù)據(jù)不到一百字節(jié)返回錯(cuò)誤怎么解決?

    NB86-OpenCPU AT指令發(fā)送報(bào)文數(shù)據(jù)不到一百字節(jié)返回錯(cuò)誤
    發(fā)表于 06-04 07:26

    STM32有沒有USB庫里面有變量記錄著每次發(fā)送的實(shí)際長度?

    ,USB_REPORT_BUFF_SIZE); return USBD_OK; } 假設(shè)USB_REPORT_BUFF_SIZE為64,主機(jī)有可能只發(fā)送32 23等等小于64
    發(fā)表于 04-28 07:25

    做STM32f103 USB雙緩存的時(shí)候,發(fā)送4K數(shù)據(jù)里面前64字節(jié)是0,為什么?

    機(jī)要的數(shù)據(jù),上位機(jī)取數(shù)據(jù)的時(shí)候,舍棄前64字節(jié)的0,才能正常使用,不知道這是為什么造成下位機(jī)(STM32)發(fā)送64字節(jié)的問題
    發(fā)表于 04-28 07:07

    一般DBC文件中包含哪些信息?

    MessageId 報(bào)文ID,是以10進(jìn)制數(shù)表示的 MessageName 報(bào)文的名字,命名規(guī)則和C語言變量相同 MessageSize 報(bào)文數(shù)據(jù)域字節(jié)數(shù),為無符號整型數(shù)據(jù)
    的頭像 發(fā)表于 04-17 10:54 ?1356次閱讀

    STM32F429以太網(wǎng)怎么接收小于60字節(jié)報(bào)文?

    硬件:NUCLE-F429ZI 軟件:lwip 現(xiàn)在遇到別的設(shè)備發(fā)過來的報(bào)文 只有56字節(jié),沒有填充到60字節(jié),STM32 的 ETH 沒有接收中斷,超過60字節(jié)的都有中斷,設(shè)置了ET
    發(fā)表于 04-10 07:03

    請問如何使用定時(shí)器的更新事件觸發(fā)DMA讀取6字節(jié)SPI數(shù)據(jù)?

    想用定時(shí)器的更新事件觸發(fā)DMA讀取SPI數(shù)據(jù),現(xiàn)在有個(gè)問題是一次更新事件只能觸發(fā)一次DMA傳輸,我想要定時(shí)器觸發(fā)一次,DMA能發(fā)送6字節(jié)到SPI的DR,從而讀取6字節(jié)的數(shù)據(jù)該如何設(shè)計(jì)?
    發(fā)表于 03-29 06:16

    如何使用I2C Reg模式發(fā)送1個(gè)從站地址和8字節(jié)命令并回讀信息?

    大家好 作為標(biāo)題,我需要向ADC設(shè)備發(fā)送1字節(jié)的從屬地址和8字節(jié)的命令(總共9字節(jié))。 然后從從站地址回讀 + 1 但是,i2c 前導(dǎo)緩沖區(qū)總共只有 8 個(gè)
    發(fā)表于 02-23 07:54