清掉eth的接收發送統計
A. ZYNQ+linux網口調試筆記(3)PL-ETH
在ZYNQ上使用gigE Vision協議的網路介面相機。
第一步:調通PS側網口GEM0(Xilinx BSP默認配好)。
第二步:調通PS側網口GEM1(見前一篇文檔:開發筆記(1))。
第三步:調通PL側網口(本文闡述)。
第四步:在PL側網口上驗證Jumbo Frame特性,並在應用層適配gigE Vision協議。
根據《xapp1082》可知,PL側的PHY支持1000Base-X和SGMII兩種配置,這兩種配置對應兩種不同的PHY引腳介面(連接到MAC)。而我們的hdf文件使用的是1000Base-X的配置。
關於網口的Linux驅動,我們在官網找到一份資料: Xilinx Wiki - Zynq PL Ethernet 。資料很長,我們只看與我們相關的2.4.1 PL Ethernet BSP installation for 1000Base-X」這一章節就可以了。
首先導入FPGA設計同事提供的hdf文件:
在彈出的圖形界面里,進入Subsystem AUTO Hardware Settings——Ethernet Settings——Primary Ethernet,確認可以看到PL側網路設備axi_ethernet_0,說明hdf文件里已包含了必要的網口硬體信息:
上圖中被選中的網口將成為Linux上的設備eth0。這里我們默認選擇ps7_ethernet_0,即使用GEM0作為首選網口。
啟用Xilinx AXI Ethernet驅動
進入Device Drivers -- Network device support – 選中Xilinx AXI Ethernet(以及Xilinx Ethernet GEM,這是PS側網口的驅動)
進入Networking support – 選中 Random ethaddr if unset
進入Device Drivers -- Network device support -- PHY Device support and infrastructure – 啟用Drivers for xilinx PHYs
進入~~~~Device Drivers -- DMA Engine Support -– 禁用~~~~Xilinx AXI DMAS Engine~~~ (對應的配置項名為 ~~ CONFIG_XILINX_DMA ~~~)
注意: Xilinx Wiki里對設備樹節點的引用有誤(&axi_ethernet),導致編譯報錯,應改為&axi_ethernet_0。
註:PL-ETH驅動所在路徑:<project>/build/tmp/work-shared/plnx_arm/kernel-source/drivers/net/ethernet/xilinx/xilinx_axienet_main.c和xilinx_axienet_mdio.c。對應的內核配置項為CONFIG_NET_VENDOR_XILINX和CONFIG_XILINX_AXI_EMAC。
啟用ethtool和tcpmp(調試用,非必須):
然後將生成的BOOT.BIN和image.ub拷貝到SD卡根目錄下,將SD卡插入板子上,上電運行。
上電後,使用ifconfig eth1查看網口信息,觀察MAC地址與設置的一致,且ifconfig eth1 192.168.1.11 up沒有報錯。
測試網路通路:ping PC是通的。說明網口工作正常。
Linux下eth1(即PL-ETH)的MAC地址有誤
問題描述:
開機列印:
注意:
MAC地址是錯的,驅動里解析出的是GEM0的MAC地址。
試驗發現,即使在system-user.dtsi里不寫local-mac-address,也照樣解析出的是GEM0的MAC。
而將system-user.dtsi里的local-mac-address改名為pl-mac-address,並將驅動里解析的字元串也對應更改為pl-mac-address,則可以正確解析出來:
Passing MAC address to kernel via Device Tree Blob and U-Boot:
http://zedboard.org/content/passing-mac-address-kernel-device-tree-blob
通過更改u-boot環境變數和設備樹,為每個板子設置一個獨特的MAC地址:
https://www.xilinx.com/support/answers/53476.html
U-Boot里的環境變數ethaddr會覆蓋掉設備樹里pl-eth的local-mac-addr欄位,從而影響Linux啟動後的網卡MAC地址;
但U-Boot里的環境變數ipaddr不會對Linux啟動後的配置產生任何影響。因為設備樹里根本就沒有關於IP地址的配置。
phy-mode怎麼會是sgmii?查了下官方的提供的BSP里,也是「sgmii」。說明這個沒問題。具體原因不清楚。
@TODO: 設備樹里的中斷號的順序如何影響功能?
為何讀出來的IRQ號不對呢?這是因為這里讀到的不是硬體的中斷號,而是經過系統映射之後的軟體IRQ number。兩者不具有線性關系。
關於中斷號的疑問:
Linux上的網口eth0、eth1的順序,似乎是按照phy地址從小到大來排布的。
Xilinx xapp1082-zynq-eth.pdf (v5.0) July 16, 2018
https://www.xilinx.com/support/documentation/application_notes/xapp1082-zynq-eth.pdf
Xilinx Wiki - Zynq PL Ethernet:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841633/Zynq+PL+Ethernet
Xilinx Wiki - Linux Drivers:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841873/Linux+Drivers
Xilinx Wiki - Linux Drivers - Macb Driver:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver
Xilinx Wiki - Zynq Ethernet Performance:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841743/Zynq+Ethernet+Performance
查到關於Jumbo frame MTU的定義,當前值為9000,可否改大一些?
驅動源碼里關於jumbo frame的說明:
設置MTU為9000,發現ping包最大長度只能設為ping 192.168.1.10 -s 1472
https://lore.kernel.org/patchwork/patch/939535/
【完】
B. 區塊鏈怎麼防止重復交易,區塊鏈交易如何避免收到黑
區塊鏈技術背景:比特幣誕生之後,發現該技術很先進,才發現了區塊鏈技術。比特幣和區塊鏈技術同時被發現。
1.1比特幣誕生的目的:
①貨幣交易就有記錄,即賬本;
②中心化機構記賬弊端——可篡改;易超發
比特幣解決第一個問題:防篡改——hash函數
1.2hash函數(加密方式)
①作用:將任意長度的字元串,轉換成固定長度(sha256)的輸出。輸出也被稱為hash值。
②特點:很難找到兩個不同的x和y,使得h(x)=h(y)。
③應用:md5文件加密
1.3區塊鏈
①定義
區塊:將總賬本拆分成區塊存儲
區塊鏈:在每個區塊上,增加區塊頭。其中記錄父區塊的hash值。通過每個區塊存儲父區塊的hash值,將所有的區塊按照順序連接起來,形成區塊鏈。
②區塊鏈如何防止交易記錄被篡改
形成區塊鏈後,篡改任一交易,會導致該交易區塊hash值和其子區塊中不同,發現篡改。
即使繼續篡改子區塊頭中hash值,會導致子區塊hash值和孫區塊中不同,發現篡改。
1.4區塊鏈本質
①比特幣和區塊鏈本質:一個人人可見的大賬本,只記錄交易。
②核心技術:通過密碼學hash函數+數據結構,保證賬本記錄不可篡改。
③核心功能:創造信任。法幣依靠政府公信力,比特幣依靠技術。
1.5如何交易
①進行交易,需要有賬號和密碼,對應公鑰和私鑰
私鑰:一串256位的二進制數字,獲取不需要申請,甚至不需要電腦,自己拋硬幣256次就生成了私鑰
地址由私鑰轉化而成。地址不能反推私鑰。
地址即身份,代表了在比特幣世界的ID。
一個地址產生之後,只有進入區塊鏈賬本,才能被大家知道。
②數字簽名技術
簽名函數sign(張三的私鑰,轉賬信息:張三轉10元給李四)=本次轉賬簽名
驗證韓式verify(張三的地址,轉賬信息:張三轉10元給李四,本次轉賬簽名)=True
張三通過簽名函數sign(),使用自己的私鑰對本次交易進行簽名。
任何人可以通過驗證韓式vertify(),來驗證此次簽名是否有由持有張三私鑰的張三本人發出。是返回true,反之為false。
sign()和verify()由密碼學保證不被破解。·
③完成交易
張三將轉賬信息和簽名在全網供內部。在賬戶有餘額的前提下,驗證簽名是true後,即會記錄到區塊鏈賬本中。一旦記錄,張三的賬戶減少10元,李四增加10元。
支持一對一,一對多,多對已,多對多的交易方式。
比特幣世界中,私鑰就是一切!!!
1.6中心化記賬
①中心化記賬優點:
a.不管哪個中心記賬,都不用太擔心
b.中心化記賬,效率高
②中心化記賬缺點:
a拒絕服務攻擊
b厭倦後停止服務
c中心機構易被攻擊。比如破壞伺服器、網路,監守自盜、法律終止、政府幹預等
歷史上所有有中心化機構的機密貨幣嘗試都失敗了。
比特幣解決第二個問題:如何去中心化
1.7去中心化記賬
①去中心化:人人都可以記賬。每個人都可以保留完整的賬本。
任何人都可以下載開源程序,參與P2P網路,監聽全世界發送的交易,成為記賬節點,參與記賬。
②去中心化記賬流程
某人發起一筆交易後,向全網廣播。
每個記賬節點,持續監聽、持續全網交易。收到一筆新交易,驗證准確性後,將其放入交易池並繼續向其它節點傳播。
因為網路傳播,同一時間不同記賬節點的交一次不一定相同。
每隔10分鍾,從所有記賬節點當中,按照某種方式抽取1名,將其交易池作為下一個區塊,並向全網廣播。
其它節點根據最新的區塊中的交易,刪除自己交易池中已經被記錄的交易,繼續記賬,等待下一次被選中。
③去中心化記賬特點
每隔10分鍾產生一個區塊,但不是所有在這10分鍾之內的交易都能記錄。
獲得記賬權的記賬節點,將得到50個比特幣的獎勵。每21萬個區塊(約4年)後,獎勵減半。總量約2100萬枚,預計2040年開采完。
記錄一個區塊的獎勵,也是比特幣唯一的發行方式。
④如何分配記賬權:POW(proofofwork)方式
記賬幾點通過計算一下數學題,來爭奪記賬權。
找到某隨即數,使得一下不等式成立:
除了從0開始遍歷隨機數碰運氣之外,沒有其它解法,解題的過程,又叫做挖礦。
誰先解對,誰就得到記賬權。
某記賬節點率先找到解,即向全網公布。其他節點驗證無誤之後,在新區塊之後重新開始新一輪的計算。這個方式被稱為POW。
⑤難度調整
每個區塊產生的時間並不是正好10分鍾
隨著比特幣發展,全網算力不算提升。
為了應對算力的變化,每隔2016個區塊(大約2周),會加大或者減少難度,使得每個區塊產生的平均時間是10分鍾。
#歐易OKEx##比特幣[超話]##數字貨幣#
以太坊區塊鏈之Bug--2020/05/19
為了防止交易重播,ETH(ETC)節點要求每筆交易必須有一個nonce數值。每一個賬戶從同一個節點發起交易時,這個nonce值從0開始計數,發送一筆nonce對應加1。當前面的nonce處理完成之後才會處理後面的nonce。注意這里的前提條件是相同的地址在相同的節點發送交易。
以下是nonce使用的幾條規則:
●當nonce太小(小於之前已經有交易使用的nonce值),交易會被直接拒絕。
●當nonce太大,交易會一直處於隊列之中,這也就是導致我們上面描述的問題的原因;
●當發送一個比較大的nonce值,然後補齊開始nonce到那個值之間的nonce,那麼交易依舊可以被執行。
●當交易處於queue中時停止geth客戶端,那麼交易queue中的交易會被清除掉。
?????第一個欄位AccountNonce,直譯就是賬戶隨機數。它是以太坊中很小但也很重要的一個細節。以太坊為每個賬戶和交易都創建了一個Nonce,當從賬戶發起交易的時候,當前賬戶的Nonce值就被作為交易的Nonce。這里,如果是普通賬戶那麼Nonce就是它發出的交易數,如果是合約賬戶就是從它的創建合約數。
為什麼要使用這個Nonce呢?其主要目的就是為了防止重復攻擊(ReplayAttack)。因為交易都是需要簽名的,假定沒有Nonce,那麼只要交易數據和發起人是確定的,簽名就一定是相同的,這樣攻擊者就能在收到一個交易數據後,重新生成一個完全相同的交易並再次提交,比如A給B發了個交易,因為交易是有簽名的,B雖然不能改動這個交易數據,但只要反復提交一模一樣的交易數據,就能把A賬戶的所有資金都轉到B手裡。
當使用賬戶Nonce之後,每次發起一個交易,A賬戶的Nonce值就會增加,當B重新提交時,因為Nonce對不上了,交易就會被拒絕。這樣就可以防止重復攻擊。當然,事情還沒有完,因為還能跨鏈實施攻擊,直到EIP-155引入了chainID,才實現了不同鏈之間的交易數據不兼容。事實上,Nonce並不能真正防止重復攻擊,比如A向B買東西,發起交易T1給B,緊接著又提交另一個交易T2,T2的Gas價格更高、優先順序更高將被優先處理,如果恰好T2處理完成後剩餘資金已經不足以支付T1,那麼T1就會被拒絕。這時如果B已經把東西給了A,那A也就攻擊成功了。所以說,就算交易被處理了也還要再等待一定時間,確保生成足夠深度的區塊,才能保證交易的不可逆。
Price指的是單位Gas的價格,所謂Gas就是交易的消耗,Price就是單位Gas要消耗多少以太幣(Ether),Gas*Price就是處理交易需要消耗多少以太幣,它就相當於比特幣中的交易手續費。
GasLimit限定了本次交易允許消耗資源的最高上限,換句話說,以太坊中的交易不可能無限制地消耗資源,這也是以太坊的安全策略之一,防止攻擊者惡意佔用資源。
Recipient是交易接收者,它是common.Address指針類型,代表一個地址。這個值也可以是空的,這時在交易執行時,會通過智能合約創建一個地址來完成交易。
Amount是交易額。這個簡單,不用解釋。
Payload比較重要,它是一個位元組數組,可以用來作為創建合約的指令數組,這時每個位元組都是一個單獨的指令;也可以作為數據數組,由合約指令來進行操作。合約由以太坊虛擬機(EthereumVirtualMachine,EVM)創建並執行。
V、R、S是交易的簽名數據。以太坊當中,交易經過數字簽名之後,生成的signature是一個長度65的位元組數組,它被截成三段,前32位元組被放進R,再32位元組放進S,最後1個位元組放進V。那麼為什麼要被截成3段呢?以太坊用的是ECDSA演算法,R和S就是ECSDA簽名輸出,V則是RecoveryID。
R,S,V是交易簽名後的值,它們可以被用來生成簽名者的公鑰;R,S是ECDSA橢圓加密演算法的輸出值,V是用於恢復結果的ID
區塊鏈安全性主要通過什麼來保證區塊鏈技術是一種分布式記錄技術,它通過對數據進行加密和分布式存儲,來保證數據的安全性和可靠性。
主要通過以下幾種方式來保證區塊鏈的安全性:
1.加密技術:區塊鏈採用的是對稱加密和非對稱加密演算法,可以有效保護數據的安全。
2.分布式存儲:區塊鏈的數據不是集中存儲在單一節點上,而是分散存儲在網路中的各個節點上,這有效防止了數據的篡改和丟失。
3.共識機制:區塊鏈通常採用共識機制來確認交易的合法性,這有助於防止惡意交易的發生。
4.合約機制:區塊鏈可以通過智能合約來自動執行交易,這有助於防止操縱交易的發生。
區塊鏈技術在實現安全性的同時,也帶來了一些挑戰。例如,區塊鏈的安全性可能受到漏洞的攻擊,或者因為私鑰泄露而導致資產被盜。因此,在使用區塊鏈技術時,還需要注意身份認證、密碼安全等方面的問題,以確保區塊鏈的安全性。
此外,區塊鏈技術的安全性也可能受到政策、法規等方面的影響。例如,在某些國家和地區,區塊鏈技術可能會受到審查和限制,這也可能會對區塊鏈的安全性產生影響。
總的來說,區塊鏈技術的安全性主要通過加密技術、分布式存儲、共識機制和合約機制等方式來保證,但是還需要注意其他方面的挑戰和影響因素。