I'm a wee bit exhausted from searching, but after digging around the web I think I can answer some of my questions.
How does [our local primary/master] ns1 notify the root servers of changes?
There is no notification. The primary notifies only those servers configured to be notified, which for most people will only be secondary/slave servers. The root servers provide domain lookups only for the root zone. Otherwise the root servers reply only with the respective TLD name server, which replies with the names of authoritative servers for the requested domain.
How do the caching servers get notified of local name server changes?
They don't -- at least not directly like the secondary/slave servers. A caching server requests domain name information from a root server. The root server replies with the respective TLD server, which replies with the names of our authoritative local name servers, ns1, ns2, and ns3. The caching server then requests the information from one of those servers. In a way this seems inefficient to make this long round trip when the final authoritative servers are in the same infrastructure, but the process is remarkably fast. Possibly there is a way to configure local caching servers to contact local authoritative servers directly without the longer round trip.
Side notes.
Originally I thought caching server requests are always made to a primary authoritative server. Reading around the web indicates the respective name server is chosen randomly. I notice when I use
dig or
nslookup to request our domain name server information, the three name servers are listed in a different order much of the time. The ns1 server is not always listed first. From that list the caching server begins requesting information and times out if the first selected name server fails to respond timely. I don't know the length of the timeout.
My speculation is the root servers return the list of authoritative name servers in a random order to help prevent overloading the primary name server.
What is a reasonable expectation for local name server changes to propagate throughout the global DNS infrastructure?
I got sidetracked here. My reference point was not changing the registration of a site, which might take 24-48 hours to propagate, but only local zone changes. Those changes are immediate because of the way lookups are performed. If I change a zone file (and the respective serial number), the changes will be updated to the secondary/slave systems immediately. Concurrently when I make such local changes, I will restart the named service on the caching servers, which is done to force flush the cache. With the cache flushed, the next local domain lookup goes through the usual steps through the upstream root servers and the returned information is the list of local name servers. The caching server requests the information from the local name servers, and the caching server is updated.
Around the global DNS system, the same steps are used to discover the changes. Some caching servers might not perform a fresh lookup immediately, but TTL values eventually force other caching servers to request updated information. A few hours or so probably is a reasonable expectation for other servers to show the new information. I'm guessing worst case is 24 hours.
My head hurts a little.