1

当通过 SLIP ping 一个 uip 设备时,我在 uart 中得到一个数据包,如下所示:

   uip_buf[0]   0x45    
   uip_buf[1]   0x0 
   uip_buf[2]   0x0 
   uip_buf[3]   0x3c    
   uip_buf[4]   0x1 
   uip_buf[5]   0x20    
   uip_buf[6]   0x0 
   uip_buf[7]   0x0 
   uip_buf[8]   0x80    
   uip_buf[9]   1   
   uip_buf[10]  0xb5    
   uip_buf[11]  0x51    
   uip_buf[12]  0xc0    
   uip_buf[13]  0xa8    
   uip_buf[14]  0x1 
   uip_buf[15]  0x1 
   uip_buf[16]  0xc0    
   uip_buf[17]  0xa8    

从代码来看,这个以太网头应该由一个dest addr、src addr和一个type组成。但是,为了处理数据包,类型必须是 0x0008,但显然是 0xa8c0(uip_buf [13:12] 或 uip_buf [17:16]。因此比较总是失败:

 if(BUF->type == HTONS(UIP_ETHTYPE_IP))  // 0xa8c0 != 0x0008

进行比较的行来自以太网实现......当通过 SLIP 传输时,类型字段是否可能不同?

4

1 回答 1

0

是的,有区别。SLIP 没有以太网头,因为串行线路没有总线架构:相反,正好有两个端点,所以每一端都知道它在与谁交谈。

IP 数据包仍然需要区分,因此有一些魔术字节值和替换可以做到这一点。维基百科页面上的详细信息:

https://en.wikipedia.org/wiki/Serial_Line_Internet_Protocol

于 2015-06-14T04:03:24.130 回答