DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T b

⟦e99d705dc⟧ TextFile

    Length: 16264 (0x3f88)
    Types: TextFile
    Names: »broadcast«

Derivation

└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
    └─⟦3b20aab50⟧ »EurOpenD3/network/snmp/kip-snmp.91.tar.Z« 
        └─⟦b503a39fe⟧ 
            └─⟦this⟧ »kip/doc/broadcast« 

TextFile

IP BROADCASTING ISSUES

This note attempts to explain some of the peculiarities of internet (IP)
broadcast addressing, and how these relate to the setup of the KIP
code.  Topics covered include:

	Broadcasts and 'directed' broadcasts.
	Appletalk broadcast addresses.
	Appletalk NBP use of broadcast.
	IP address formats.
	IP broadcast formats.
	Sample atalkatab database files.


BROADCASTS AND DIRECTED BROADCASTS

For every protocol family (IP, Appletalk, ISO, etc.) the basic packet
datagram contains source and destination address fields.  The source
address is always set to the address of the machine (host) sending the
packet.  The destination address is usually set to the address of a
specific single host that is to receive the packet.

However there are a limited number of cases in which we wish ALL hosts
on a given cable to receive a copy of the packet.  For example one may
not know the address on which a particular service resides, so a
request packet can be sent to all hosts on that cable;  then only those
service hosts which want to, will reply.

The addresses used in the packet datagram for source and destination
always contains a 'net number' field (or part) and a host number field
or part.  The host number field has a special distinguished value to
indicate that this is a broadcast address.  Typically this value is all
ones (e.g. hex FF...) or (less prefered) all zeros.

When sending a broadcast packet, if the net number of the sender is the
same as the net number in the destination address field, then this
broadcast is a 'local' broadcast where the sender and receivers are on
the same physical cable.  In this case the sender will pass the packet
to the physical layer driver with an indication that it is to be
broadcast on the local cable.

But these protocol families operate in an 'internetworked' environment
where each physical cable has different net number in the address.
It may be that we wish to perform a broadcast, not to the local cable 
(network number), but to a network several bridge hops away.  In this
case the destination net number field will differ from the source
net number.  This is called a directed broadcast.

The original sender of a directed broadcast recognizes that the net
number of the destination address differs from its own local net
number.  So it forwards this packet to the 'bridge' (router or gateway)
on the local cable.  The bridges will then forward the packet to each
other until it reaches a bridge on the destination cable.  That bridge
will then pass the packet to the physical layer driver with an
indication that it is to be broadcast on the cable.


APPLETALK BROADCAST ADDRESSES

Appletalk addresses are very simple.  There is a 16 bit net number
and an 8 bit host number.  The host number 'all ones' (hex FF) indicates
a broadcast address.


APPLETALK NBP USE OF BROADCAST

The appletalk protocol family contains a protocol 'NBP', Name Binding
Protocol.  Appletalk 'names' are ascii strings used to locate a named
resource, such as a LaserWriter or file server.  An appletalk name
consists of three parts, written as 'object:type@zone'.  The 'type'
might be 'LaserWriter' or 'fileserver'.  'Object' is used to
differentiate a particular instance of that resource type.  'Zone' is a
concept used to limit the name search to only a subset of all the
cables that makeup an Appletalk internetwork.

When an appletalk client wishes to perform a name to address lookup
operation, it formats a request packet containing the name string and
then sends this to the closest bridge on the local cable.  The bridge
has an internal table (routing table) showing the net number, zone name,
and next hop address for each cable in the appletalk internetwork.

The bridge takes the client lookup request and sends a copy, a directed
broadcast, to each net (cable) in the referenced zone.  Thus each
client NBP lookup turns into a flurry of directed broadcasts reaching
every host in that zone.  The destination host who has internally
registered the name being looked up, will reply to the lookup client,
and the transaction will be complete.


IP ADDRESS FORMATS

Internet protocol (IP) addresses are 32 bits in length (4 bytes) and
are typically written in 'dot notation', with each byte of the address
in decimal (0 to 255) separated by dots.  For example, '36.44.0.123'.

IP addresses do not contain a fixed size net number part and a fixed
size host number part, thus they are not as simple to parse as
appletalk addresses.  Rather the size of the net number part of the
address depends on the upper bits of the first byte of the IP address.
The net number part can be one, two or three bytes in length.  This
corresponds to IP 'address class' A, B, and C, respectively.   The
table below (from RFC791, Internet Protocol Specification) shows the
class types based on the high order bits of the first byte.

	Class	High bits	Format
	A	0		7 bits of net, 24 bits of host
	B	10		14 bits of net, 16 bits of host
	C	110		21 bits of net, 8 bits of host


IP BROADCAST FORMATS (THE 'PROBLEM')

It is most straightforward in implementing the appletalk NBP services
to map the appletalk directed broadcasts into corresponding IP directed
broadcasts.  Ah.  Now we come to the problem.  A standard for IP
broadcasting was written in 1984:  RFC919, Broadcasting Internet
Datagrams;  and RFC922, Broadcasting Internet Datagrams in the Presence
of Subnets;  both by Jeff Mogul.  However only a few of the many IP
'vendors' in the real world are in compliance with this spec.  (4.3 BSD
UNIX does comply).

  Basically RFC919/922 says that a broadcast address consists of the
  normal 'net part' plus 'all ones' in the 'host part'.  So a class B
  broadcast address might be 128.111.255.255 (two bytes of net number
  and two bytes of host number); a class C might be 192.22.3.255 (three
  bytes net number and one byte host number).

  When 'subnets' are involved (with a class B or A net number) some
  subsection of the 'host part' becomes the 'subnet number'.  For
  example 128.111.2.67 could be refering to net 128.111, subnet 2, host
  67.  For situations like this, the broadcast version just replaces
  the final host part with all ones.  So the broadcast address for
  cable (subnet) 2 would be 128.111.2.255.

  Finally RFC919/922 allows the use of a 'local broadcast only' address
  (255.255.255.255), when the sending machine does not know its own
  network number and simply wishes to send to all hosts on the local
  cable.

Unfortunately 4.2 BSD was released prior to RFC919/922.  4.2 BSD
arbitrarily chose 'all zeros' for the host part as indicative of a
broadcast address.  And 4.2 BSD had no provision for generating or
recognizing subnet broadcast addresses.  Since a number of 'vendor'
products were adaptations of the 4.2 code, this convention is more
widespread than one would imagine.

As long as all the hosts on your ethernet use the same IP broadcasting
conventions, you are ok.  But during the next year or so, you may end
up with a mix of the old (4.2) and new (4.3) conventions.  The problem
is that the host receiving a 'wrong' broadcast does not recognize it as
such.  This means (1) processes on that host can not receive
broadcasts.  (2) if the host is silly enough to try 'forwarding' this
broadcast packet, it will in turn initiate an ARP broadcast request
(address resolution protocol) packet searching for this address.  Of
course no one will respond, but this generates extra needless traffic.
If several hosts are misbehaving like this, pileups and collisions can
occur on your ethernet cable.  (3) Some hosts even generate ICMP error
packets if they receive an unrecognized broadcast.

The answer for #1 and 3 is to convince your vendors to come into
compliance with RFC919/922 ASAP.  We also give some 'temporary'
solutions in the next section below.  For case #2, we suggest turning
off 'forwarding' in workstations that only have one network interface.
For example this can easily be done in 4.2/4.3 BSD by patching the
'ipforwarding' kernel variable to zero, using adb.

As you can imagine, this lack of IP broadcasting standards is causing
grief in other communities as well.  Below we reprint some recent
traffic on the 'tcp-ip' bboard.  Phil Karn suggests an even easier
criterion for recognizing broadcast packets.

> Date: Tue, 3 Feb 87 20:10:24 EST
> From: karn@jupiter.bellcore.com (Phil R. Karn)
> To: tcp-ip@nic.sri.com
> Subject: Inappropriate responses to broadcasts
> 
> Some time ago, there was discussion about IP implementations which
> respond inappropriately to broadcast packets.  A number of solutions
> were offered, the best one (in my opinion) being a flag to tell IP when
> a packet was received on a hardware broadcast address so that it would
> not try to forward it or respond to it with an ICMP message.
> 
> Since then, there seems to have been virtually no progress among the
> vendors in implementing these fixes. Here at Bellcore we run a rather
> large network consisting of Ethernets at several locations bridged
> together with DEC LanBridge 100's and Vitalink Translan-3s.  With so
> many hosts on the same "virtual Ethernet", from time to time broadcast
> packets with bogus IP addresses are bound to appear.  Right now there
> is one Microvax running Ultrix 1.2 that has its netmask set improperly.
> A single rwho packet from that machine triggers literally HUNDREDS (as
> counted with my Excelan Lanalyzer) of ARP requests.  This represents
> practically every host on the network!!  I cringe to think that before
> long many more of our machines will be running 4.3 BSD-derived code
> that allows the setting of the IP broadcast address to any bogus value
> the heart desires.
> 
> At Uniforum in DC the other week I played with the Lanalyzer at the
> Excelan booth. Guess what? Most of the packets on the net were ARP
> requests because of one machine that didn't have its IP broadcast
> address set right!  I felt right at home.  At least I now know what to
> say the next time a vendor tells me "get our latest release and then
> call me back".
> 
> If something more formal than the TCP-IP archives is needed to get the
> vendors to act, I hereby volunteer to write the RFC.  I would require
> that the link or subnet pass a "multicast" bit to IP indicating when an
> incoming packet is received on a hardware broadcast or multicast
> address.  If this bit is set, IP must refuse to forward the packet or
> answer it with an ICMP message.  It should also refuse to pass the
> packet up to TCP, should its protocol ID appear in the header.
> Naturally, the multicast bit would always be zero for packets received
> on non-broadcast and point-to-point subnets.
> 
> Since there are so many incompatible conventions for IP broadcast
> addresses, I suggest that they be done away with altogether.  Since
> gateways never forward broadcasts, the IP destination address in a
> broadcast UDP packet has no real meaning and should be ignored.  The
> fact that the packet was sent to the hardware broadcast address should
> be enough to say "this is a broadcast packet".
> 
> Phil
> 
> Date:     Sat, 7 Feb 87 23:02:16 EST
> From: Mills@UDEL.EDU
> To: "Phil R. Karn" <karn%jupiter.bellcore.com@UDEL.EDU>
> Cc: tcp-ip@sri-nic.arpa
> Subject:  Re:  Inappropriate responses to broadcasts
> 
> Phil,
> 
> The fuzzball gateways used on the NSFNET Backbone, among other places,
> incorporate a "martian filter" that grounds packets for the various IP
> braodcast addresses, as well as other reserved addresses (see RFC-990).
> At least one other gateway system (cisco) allegedly does the same. As
> you know from my previous messages to this list, gateways that forward
> IP broadcast packets can creat astonishing mischief in quite surprising
> places.
> 
> Your suggestion on a mechanism to prevent forwarding of multicast
> packets was suggested to the INENG Task Force some time back; however,
> implementation in the various Unix bsd's hasn't happened yet. See also
> the appendix to RFC-985 for further suggestions. Your comments and
> advice on the issues raised there would be welcome.
> 
> Dave


SAMPLE ATALKATAB DATABASE FILES

Below we list several common cases that may arise in setting up your
/etc/atalkatab file.

(1) If all your hosts comply with RFC919/922, you simply use the N1, N2 or
N3 flags to setup the appropriate broadcast address used by your site.
This example shows class C addresses and the N1 flag.  Dots '..' show
uninteresting fields.

	1.33	N1	192.22.33.0	ZZ	#ether cable, west
	2.1	KC	192.22.33.12	ZZ	#appletalk, chemlab
		I192.22.33.255	..		#ipbroad
		..
		S2.1	S1.33	"ZZ"		#atneta atnete zone

The next example is similar to the above but shows a subnetted class B net,
where '33' is the subnet number.  Above, '33' was just the third byte
of the three byte class C net number.  Here the net number is only
two bytes (128.22) and 33.xx is actually the host part.  However this
campus adopts the convention that the third byte is a subnet number.
Additionally some other ether cables are shown.

	1.34	N1	128.22.34.0	ZZ	#ether cable, south
	1.33	N1	128.22.33.0	ZZ	#ether cable, west
	2.1	KC	128.22.33.12	ZZ	#appletalk, chemlab
		I128.22.33.255	..		#ipbroad
		..
		S2.1	S1.33	"ZZ"		#atneta atnete zone

(2) If all your hosts are using 4.2 conventions, then here is a class C
example that would be similar to yours.

	1.33	N0	192.22.33.0	ZZ	#ether cable, west
	2.1	KC	192.22.33.12	ZZ	#appletalk, chemlab
		I192.22.33.0	..		#ipbroad
		..
		S2.1	S1.33	"ZZ"		#atneta atnete zone

Here is an unusual case.  This is a class B site with subnets, but with
only 4.2 hosts.  I.e. these 4.2 hosts can only recognize a class B
broadcast address of the form 128.X.0.0;  the host (subnet number) must
be zero.  The solution is to use the 'H' flag for the ether cables, and
to point those nets to kboxes on the same cable.  The 'ipbroad' value
in the kbox config can then be setup to use any arbitrary broadcast
address on the local ether cable.

	1.33	H	128.22.33.12	ZZ	#ether cable, west
	2.1	KC	128.22.33.12	ZZ	#appletalk, chemlab
		I128.22.0.0	..		#ipbroad
		..
		S2.1	S1.33	"ZZ"		#atneta atnete zone

	1.34	H	128.22.34.66	ZZ	#ether cable, south
	2.2	K	128.22.34.66	ZZ	#appletalk, chemlab
		I128.22.0.0	..		#ipbroad
		..
		S2.2	S1.34	"ZZ"		#atneta atnete zone

The 'H' flag for appletalk nets on ether cables is useful in a number
of cases when your IP internetwork is not in compliance with
RFC919/922.  The way it works is as follows:

  (a) When a kbox wishes to send a directed broadcast to that net, it
  sends the packet to the IP address (following the H), wrapped in a
  UDP header with the destination port set to a certain 'magic' socket
  number.  When the kbox (or UNIX atalkrd server) receives this UDP
  packet, it rebroadcasts it (or resends it to an arbitrary list of
  addresses) on that cable.  A basic requirement is that the IP address
  used with H must be on the SAME CABLE as the net being refered to.
  This is because a kbox, when used as a redirect server, simply
  broadcasts the packet to the 'ipbroad' configured address.

  (b) When a kbox wishes to send a plain packet (NOT a directed
  broadcast) to that net, it forms the IP address by stripping the low
  byte from the H IP address, and ORing in the appletalk node number.
  This is another reason that the IP address must be on the same
  cable as the net being refered to.

  (c) So, if the ether cable you are refering to with the H flag does
  not happen to have a kbox also on the same cable, you must point the
  H net to a UNIX host running atalkrd on that cable.

Examples of when you might need to use the H flag could be:

  (a) Your main campus IP gateways can't pass IP directed broadcasts.
  Here you should be able to use kboxes or atalkrd as rebroadcasters.
  If you need to use atalkrd, you can just give it the appropriate
  broadcast address for the local cable.

  (b) You have a mix of old and new format broadcast addresses.  Here
  you have a choice.  If you have MOSTLY one format, you can just
  choose to ignore the other format (not all your UNIX hosts need to be
  running CAP/EFS/PAPIF).  Or you can use the atalkrd daemon and give
  it a specific list of hosts on that cable to reforward to.