[ih] GOSIP & compliance

Karl Auerbach karl at cavebear.com
Sat Mar 26 01:22:00 PDT 2022


On 3/24/22 5:03 PM, Dave Crocker wrote:
>> I think the IETF's hostile attitude towards ISO/OSI created an 
>> atmosphere of auto-rejection in which those ideas were too often 
>> ignored.
>
> This is silliness.

Yes, the OSI people wrote impenetrable documents and did their best to 
hinder dissemination.  And they never explained the "why" only the 
"how".  It took real effort to read between the lines to understand.  
But some of us did.  And sometimes we found valuable nuggets.

(By-the-way, the IETF has slid into a similar mode, expressing only the 
"how" of a specification without much, if any, note of alternative 
approaches that were examined and rejected, and why they were rejected.  
The patent attorney in me shakes my head in bewilderment at that 
seemingly intentional erasure of potential "prior art" and the 
opportunities that creates for patent trolls to cause expensive mischief.)

Examples of useful concepts in ISO/OSI that we missed (or ignored) to 
our detriment.  (Some recent designs, such as QUIC, have rediscovered 
some of these things.)

   - In IPv6 we had a choice to rethink the IP checksum, but we didn't.  
The Fletcher checksum used in OSI is significantly stronger than the IP 
checksum and not subject to the implementation complexity of thinking in 
ones-complement arithmetic that exists on no present computer 
architecture.  (If I remember correctly there are two or three RFCs 
dealing with issues with the existing IP checksum.)  The Fletcher 
checksum looks scary - a first glance makes one think it is full of 
expensive multiplications - but there are quite fast algorithms for 
doing full and incremental calculations.  (There may have been good 
arguments against such a change, such as the pseudo headers for TCP and 
UDP, but I do not remember these ever coming up.)

   - The IETF never inquired why ISO/OSI had a session layer. Turns out 
that it is an important concept that we've had to re-invent in different 
forms, such as web cookies.

    - Similarly in the development of IPv6 the IETF never really 
considered connection-time data.  This was a universal concept 
throughout ISO/OSI.  So we ended up kinda kludging it together for 
things like TLS/SNI for HTTPS. (QUIC improves this considerably.)

    - ISO/OSI also had "application entity titles" which were names that 
could be used to rebind associations/sessions if the logical entity (we 
call these cloud base applications these days) disconnected (due to 
transport failure caused by noise, congestion, or network address 
change), moved, split, or merged. OSI didn't fully solve these problems, 
but it had an architectural hook to latch onto.  We're wrestling with 
these concepts in the TCP world.

Yes, the ISO/OSI people never put on an engineering hat and trimmed and 
reshaped their stuff into something that could actually be built.  And 
their mode of expression was horrid (and just getting the documents was 
expensive).

BTW, I thought the use of ASN.1/BER for SNMP was far from the best 
choice (indeed, from an implementation quality and interoperability 
point of view would be hard to find one that was worse.)  I preferred 
the HEMS proposal as the most elegant, even if it did use XML.

CMIP had some really good ideas (most particularly with regard to 
selecting and filtering data at the server for highly efficient bulk 
fetches.)  Marshall Rose's rehosting CMIP onto TCP (thus creating CMOT) 
was very inventive and clever.  That kinda demonstrated the potential 
viability, rather than the impossibility, of things like CMIP/T, even in 
its bloated form.

Diverting from the main points here:

About a dozen years ago I decided to rework SNMP, throwing out ASN.1/BER 
and using JSON, throwing out UDP and using TCP (optionally with TLS), 
and adding in some of the filtering concepts from CMIP.  I preserved 
most MIB names and instrumentation variable semantics (and thus 
preserving a lot of existing instrumentation code in devices.)

The resulting running code (in Python) is quite small - on par with the 
12kbytes (machine code) of the core of my Epilogue SNMP engine.  And it 
runs several decimal orders of magnitude faster than SNMP (in terms of 
compute cycles, network activity, and start-to-finish time.)  Plus I can 
do things like "give me all data on all interfaces with a received 
packet error rate greater than 0.1%".  I can even safely issue complex 
control commands to devices, something that SNMP can't do very well.  I 
considered doing commercial grade, perhaps open-source, version but it 
could have ended up disturbing the then nascent Netconf effort.

         --karl--





More information about the Internet-history mailing list