Correct Names for BACnet MAC Layers

I fielded a question today that contained a lot of misunderstandings about terminology for BACnet MAC Layers, in particular what the difference between BACnet 8802-3 and BACnet/IP is all about. It made reference to an article by FieldServer that also contains some misleading information:

http://www.fieldserver.com/products/appnotes/009_bacnetprotocols.asp

http://www.fieldserver.com/docs/pdf/AN009.pdf

Here’s the real story.

BACnet/IP is the correct term, NOT BACnet IP.

BACnet/IP has nothing to do with TCP/IP and does not make use of TCP/IP in any way. BACnet/IP uses UDP/IP for its transport. When using BACnet/IP although it is overwhelmingly most common to use an Ethernet MAC layer it is not required. There are many examples such as 802.11, VPN technology and other types of WAN that are not Ethernet but work just fine with BACnet/IP. The whole point of BACnet/IP is to isolate BACnet from such dependency.

Other “correct” terms:

  • BACnet over 8802-3 Ethernet or more simply BACnet 8802-3
  • BACnet over ARCNET or ARC156K
  • BACnet over MS/TP

The slashes and capitalization are important

MS/TP means “Master-Slave / Token Passing”<

There is no good vs. bad issue regarding BACnet/IP and BACnet 8802-3. These are just different approaches for different circumstances and in many cases one is just as good as the other. BACnet 8802-3 makes use of a "raw Ethernet" MAC layer using the 8802-3 form of Ethernet packet rather than the older but widely used "DIX or Ethernet II" form. The 8802-3 form used with BACnet includes an ISO8802-2 UI frame that adds 3 octets of overhead. This is where the magic number 1497 octets comes from: 1500 octet Ethernet payload minus 3 octets of 8802-2 UI frame header. The remainder of the message is a BACnet NPDU. When IP (as in TCP/IP and UDP/IP) transports are used on Ethernet it is possible to also use 8802-3/8802-2 to transport them. However, this is rarely done and most systems instead use the older DIX frame with 0x0800 frame type (IP). The payload is an IP header and its payload. In the case of BACnet/IP the IP header is followed by a UDP header, then a BACnet BVLL header THEN the very same NPDU that would appear in a BACnet 8802-3 frame. So BACnet/IP is considerably larger overhead than BACnet 8802-3, although this doesn't really have a speed impact. The IP header (20 octets) and UDP header (8 octets) and BVLL header (4 octets) take away 32 octets from the 1500 available leaving actually 1468 octets. BACnet/IP allows the NPDU to be as large as 1497 though which will cause fragmentation and actually generate two packets although this is invisible to the sending software.

If the whole Ethernet network is one logical segment connected by Ethernet hubs and/or switches, then BACnet 8802-3 is preferable because it is lower overhead and can make full use of the maximum packet sizes without fragmenting.

If you are also using IP based devices on the same infrastructure AND they share the same IP subnet, or ALL of the BACnet/IP devices share the same IP subnet, then BACnet/IP is nearly as good but slightly slower.

If there are any IP routers in place that divide the infrastructure into two or more IP subnets AND ANY of the BACnet devices are separated from the other BACnet devices by an IP router AND the IP router doesn't have Ethernet bridging capability, then BACnet/IP is preferable because of the need to bridge BACnet 8802-3 segments together which is not necessary with BACnet/IP, However, when there are multiple IP subnets AND there are BACnet/IP devices on more than one of those subnets, there is a need for broadcast management across the subnets.

This can be solved one of two ways:

1. Have a BBMD on each BACnet/IP subnet
or
2. Have at least one BBMD (on one of the subnets) that supports Foreign Device Registration AND use BACnet/IP devices on the other subnets that can register as Foreign Devices. This can be tricky because:

  • Not all subnets necessarily have BBMDs
  • Not all BBMDs support Foreign Device registration, and may be limited in number if they do
  • Not all BACnet/IP devices support registering as Foreign Devices

Bottom line:
BACnet 8802-3 is simpler and more efficient for “non-IP router” infrastructures

BACnet/IP is better when there are any IP routers in the infrastructure

but, using BACnet/IP with multiple subnets has more complex configuration and BBMD requirements.