LWIP2.1.2的UDP通信为什么需要对MAC信息做判断
时间: 2023-12-17 12:02:57 浏览: 122
在LWIP2.1.2的UDP通信中,需要对MAC信息做判断,是因为UDP是基于IP协议的,而IP协议是不可靠的,不能保证数据的可靠传输。因此,为了保证数据的可靠传输,需要使用UDP协议的可靠传输机制,例如使用确认应答机制和重传机制等。而这些机制需要对MAC信息进行判断,以确保数据的正确性和完整性。如果MAC信息不正确或者被篡改,可能会导致数据传输的失败或者数据被篡改,从而影响通信的可靠性和安全性。因此,在UDP通信中,对MAC信息进行判断是非常重要的。
相关问题
LWIP2.1.2的UDP通信接收过程中具体哪个函数及语句是对接收数据MAC信息做判断
在LWIP2.1.2的UDP通信接收过程中,判断接收数据MAC信息的函数是`ethernet_input()`。其代码实现如下:
```c
err_t ethernet_input(struct pbuf *p, struct netif *netif)
{
struct eth_hdr *ethhdr;
struct eth_addr *dest;
struct eth_addr *src;
u16_t type;
u16_t eth_len;
err_t err;
ethhdr = (struct eth_hdr *)p->payload;
dest = (struct eth_addr *)ethhdr->dest.addr;
src = (struct eth_addr *)ethhdr->src.addr;
type = lwip_htons(ethhdr->type);
/* 对于非IP数据包,直接返回 */
if (type != ETHTYPE_IP) {
pbuf_free(p);
return ERR_OK;
}
/* 对于广播数据包或者目的MAC地址为本地MAC地址的数据包,进行处理 */
if (eth_addr_cmp(dest, ðbroadcast) || eth_addr_cmp(dest, &(netif->hwaddr))) {
eth_len = p->tot_len;
err = netif->input(p, netif);
pbuf_free(p);
return err;
}
/* 不是广播包也不是本地MAC地址的数据包,直接返回 */
pbuf_free(p);
LINK_STATS_INC(link.drop);
MIB2_STATS_NETIF_INC(netif, ifindiscards);
return ERR_OK;
}
```
其中,`dest`是接收数据的目的MAC地址,`src`是接收数据的源MAC地址,通过调用`eth_addr_cmp()`函数来比较目的MAC地址是否为广播地址或者本地MAC地址。如果目的MAC地址为广播地址或者本地MAC地址,则调用`netif->input()`函数来处理接收到的数据。否则,直接返回。
阅读全文