L2 Header Caching
L2 headers tend to be the same on all packets sent from one host to another. This is in contrast to L3 headers, which usually have different IDs, different fragment offsets when fragmentation occurs, and other ways of changing from one packet to the next. Therefore, the kernel doesn't bother caching L3 headers, but it does cache L2 headers. Complex L2 protocols may not have consistent headers, but the most common ones, such as Ethernet, do. (See Chapter 13 for more details on Ethernet.) When caching is used, the device driver of the egress device has to support it.
After sending the first packet to a given destination, a driver saves the L2 header in
a dedicated structure named hh_cache. The next time a
packet is sent to the same neighbor, the sender does not need to fill in the L2 header
field by field, but simply copy it in one shot from the cache. The relationship of
hh_cache to other neighboring protocol structures was
introduced earlier in the section "Main Data
Structures," and in Figure 27-2
in that section. The structure is described in more detail in the section "hh_cache Structure" in Chapter 29.
Header caching at the L2 layer is tied to caching by the routing subsystem at the L3
layer, described in Chapter 33. As shown in
Figure 27-1, each dst_entry element of the IPv4 routing cache includes a pointer
to the neighbour structure associated with the next
hop, and that entry includes a list of hh_cache cached headers. While multiple headers could be cached ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access