Aside from flowspec (Which incidentally was the cause of last week's internet outage), BGP communities are the primary means of adding information to routes for the purpose of traffic engineering, DDoS mitigation, or anything else that you might want to signal in a network. They're really very simple in theory; just add a few numbers along with the BGP update that are somehow meaningful. In practice however, things can get a bit more complicated.
There are 3 main types of BGP communities used today. Standard, Extended, and Large. They each have their advantages, but all are essentially a few numbers separated by a delimiter.
- Standard - 2 16-bit integers
- Large - 3 32-bit integers
- Extended - Lots of possibilities (see RFC 4360)
Many networks use standard communities since they were standardized first and are dead simple. Large communities are a relatively new addition to the internet, and come with the advantage of supporting networks that use a 32-bit ASN as well as having more space for information within the community. Extended communities have even more attributes that can be used for things like ROV signaling.
Some examples implemented by service providers offering BGP services include both actionable and informational communities include:
- NO_EXPORT - Don't advertise to any eBGP neighbors
- Blackhole - Drop traffic on the provider's router
- NO_ANNOUNCE - Don't advertise to any BGP session
- Prepend 1x, 2x, 3x
- No export to each transit provider and IXP at the PoP
- No export to region
- Local preference modification
- No export to specific ASN
- Origin information (region, IXP, private peering)