今天看了謝希仁的《計算機網路》,看著看著突然想到乙個問題,我的stm32電路板傳送udp給電腦,那個wireshark包裡面有電腦的mac位址,那麼stm32電路板是如何知道電腦的mac位址的呢?
然後把電腦ip設定為192.168.1.100,把stm32的ip設定為192.168.1.10。讓stm32每1000ms傳送一幀到電腦。
然後開啟wireshark,然後把網線插上,抓包如下:
no1是 電腦問誰是路由器(192.168.1.1在一般網路裡都是路由器)
no2 0.0.0.0表示本網路,謝希仁的書的第5版的第114頁說 全是0代表本網路。
no3的02:00:00:00:00:00是stm32的mac位址,這個幀的含義我以前查過,是stm32的ip是192.168.1.10,所以想問問網上有沒有別的節點也是相同的ip,防止ip衝突。
no4是stm32問誰是電腦啊?告訴我啊!
no5是電腦說,我是啊,我的mac是00:21:cc:64:83:34
no6 於是stm32知道了電腦的mac,於是 stm32把幀發給了電腦
可以發現no3 no4 no5 no6這幾個時間點隔得特別近。當然這裡主要關心no4 no5 no6。要通過lwip的**看看如何執行的?
另外,可以把stm32的ip和電腦的ip設定為一樣的,看看會如何?
可見stm32板卡不斷發出gratuitous arp for 192.168.1.100(request)。而電腦也提示ip衝突。
這乙太網協議真是個好協議啊!如果我來設計別的協議,那麼乙太網是個很好的參考!!
還有可以把stm32的傳送的ip位址設定為不是電腦的ip,就是沒人接收。那麼stm32會如何?
如何獲取MAC位址
如何獲取mac位址 get the hardware address of the inte ce int sockfd struct ifreq req unsigned char hwaddr eth alen if sockfd socket af inet,sock stream,0 0 b...
linux 指定網絡卡獲取對方 對端 mac位址
注意 net card name為網絡卡的名稱,如圖一中 device下的即為各網絡卡暱稱。mac為十六進製制總共6個位元組,需要轉換成字串的可以用sprintf轉換一下就可以。int from socket get mac int sock fd,char mac,const char net c...
如何檢視電腦MAC位址 檢視電腦MAC位址的方法
如何檢視程式設計客棧電腦上面的mac位址?在路由器上設定mac位址過濾 i程式設計客棧p和mac位址繫結,或者其它一些安裝設定的時候,需要用到mac位址,因此必須要先獲取到電腦上的mac,才能夠進行下一步的操作,本文介紹了檢視電腦上mac位址的方法。在windows的計算機中,mac位址叫做實體地址...