home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / ien / ien-120 < prev    next >
Text File  |  1988-12-02  |  29KB  |  651 lines

  1.  IEN 120
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.        INTERNET ROUTING AND THE NETWORK PARTITION PROBLEM
  9.                             IEN #120
  10.                             PRTN #279
  11.                           Radia Perlman
  12.                   Bolt Beranek and Newman, Inc.
  13.                           October, 1979
  14.  
  15.  
  16. I. INTRODUCTION
  17.  
  18. As described in IEN 110, "Internet Addressing and Naming in a
  19. Tactical Environment", a network can become partitioned into two
  20. or more pieces.  Assuming some of these pieces are still
  21. connected to the catenet, we would like the catenet to be able to
  22. efficiently deliver packets to a host in any such piece.  Such a
  23. capability in the catenet could additionally be utilized by a
  24. scheme for delivering intranet traffic across partitions in a
  25. partitioned network.
  26.  
  27. There are four parts to the solution:
  28. 1) detecting that a network is partitioned
  29. 2) deriving a name for each partition
  30. 3) figuring out which partition a host is in
  31. 4) routing packets to the correct partition
  32.  
  33. The currently implemented gateway routing algorithm is based on
  34. the original ARPANET algorithm.  To efficiently provide for
  35. routing to network partitions, routing must be based on a link
  36. state routing scheme.  I will demonstrate this after first
  37. presenting the design (parts II-VIII), then showing what would be
  38. involved in modifying the original ARPANET algorithm for that
  39. purpose (part IX), and then comparing the two approaches (part
  40. X).
  41.  
  42.  
  43. II. TERMINOLOGY
  44.  
  45. 1) neighbor gateways--two gateways attached to the same network
  46.  
  47. 2) functioning neighbor gateways--neighbor gateways able to
  48. communicate with each other over their common network
  49.  
  50. 3) attached network--a network physically attached to a gateway,
  51. and with which the gateway can communicate directly (not through
  52. another gateway)
  53.  
  54. 4) neighbor network of gateway G--an attached network of a
  55. functioning neighbor gateway of G, excluding attached networks of
  56. G.
  57.  
  58.  
  59.                               - 1 -
  60.  
  61.  
  62.  
  63. III. TABLES TO BE MAINTAINED BY EACH GATEWAY
  64.  
  65. 1) a list of attached networks--This list is relatively constant
  66. and is updated by a gateway when it notices a network interface
  67. is down or for some other reason the gateway is incapable of
  68. communicating with an attached network.  Keeping this table
  69. updated is solely the responsibility of each gateway, and does
  70. not require intergateway communication.
  71.  
  72. 2) a table of all gateways and their attached networks--This
  73. table is maintained by intergateway communication -- gateways
  74. give copies of their table 1 to all other gateways.  The table of
  75. all gateways never shrinks (a down gateway is assumed to exist
  76. but be unreachable).
  77.  
  78. 3) a table of link states to neighbor gateways--This table in
  79. gateway G specifies, for each neighbor gateway G1, over which
  80. common networks G and G1 can communicate.  This table is updated
  81. by G periodically bouncing packets off each neighbor gateway from
  82. which it has not recently received traffic.  Note that I refer to
  83. two gateways as neighbor gateways even if they cannot
  84. (temporarily, hopefully) communicate with each other.
  85.  
  86. 4) a list of neighbor networks--This list is derived from the
  87. table of link states to neighbor gateways and the list of
  88. gateways with attached networks (tables 3 and 2).
  89.  
  90. 5) total link state--This is a table of all gateways and the
  91. state of their links to their neighbor gateways.  This table is
  92. compiled from intergateway communication.  When a gateway notices
  93. that its table of attached networks, or its table of link states
  94. to neighbor gateways (tables 2 and 3) changes, that gateway
  95. efficiently broadcasts this information to all other gateways in
  96. the catenet.  To minimize numbers of reports when a link is
  97. flaky, a link on an attached network must be up continuously for
  98. some amount of time before its state is considered to change from
  99. down to up and trigger a link state report.
  100.  
  101. 6) shortest distance matrix--This is a data structure from which
  102. routing decisions can be made directly.  It is computed from the
  103. other tables.  It is described more fully in part IV.
  104.  
  105.  
  106. IV. ROUTING COMPUTATION
  107.  
  108. A gateway, using the tables described above, constructs a
  109. connectivity matrix whose rows and columns represent networks,
  110. and whose entries are 1 if any gateways claim to be attached to
  111. both networks, and infinity otherwise.  Then the gateway *'s that
  112. matrix to construct a shortest distance matrix.  (The operation
  113. "*" consists of "multiplying" a matrix by itself, using the
  114. operations min and plus instead of plus and times, until the
  115. result stabilizes.  This is a well-known algorithm.)  The gateway
  116.  
  117.  
  118.                               - 2 -
  119.  
  120.  
  121.  
  122. then looks in the shortest distance matrix for the neighbor
  123. network (or set of such) closest to the destination network, and
  124. chooses a functioning neighbor gateway (or set of such) attached
  125. to that neighbor network, to forward packets to for that
  126. destination network.
  127.  
  128. When a link state report changes the state of an entry in the
  129. connectivity matrix (remember, all gateways connecting two
  130. networks have to go down before a 1 changes to infinity), a
  131. gateway must recompute the distance matrix.
  132.  
  133. This design is a slight modification of the design presented in
  134. "Gateway Routing", by Radia Perlman (PRTN #242, PSPWN #99).  The
  135. modification is that the indices of the matrix are networks, not
  136. gateways.  The purpose of this modification is to make the size
  137. of the matrix smaller, an important modification given that in
  138. the catenet there are many more gateways than networks.  There
  139. are aspects to the scheme that are irrelevant to a discussion of
  140. how to solve the network partition problem, such as sequence
  141. numbers for link state reports, etc.  The purpose of this paper
  142. is to direct a correct approach to the design, and not to present
  143. an implementation specification.  Thus an implementer should read
  144. PRTN 242 to discover the details of a link state algorithm that
  145. were not relevant for presentation here.
  146.  
  147. Note that an alternative to *'ing the matrix is to use the scheme
  148. that the ARPANET has switched over to, which is a link state
  149. scheme in which a shortest path routing tree is constructed from
  150. the connectivity information.  The new ARPANET scheme is less
  151. costly to maintain as links change state.  Its disadvantages are
  152. that it precludes load splitting, probably a very important
  153. problem in the case of the catenet, and is probably a little
  154. harder to implement.  Since links will not change state very
  155. often, the author favors the overhead of the matrix *'ing scheme
  156. over the disadvantages of the ARPANET scheme.  However, this
  157. decision is separable from the rest of the design and can be
  158. decided either way at a later time.
  159.  
  160.  
  161. V. DETECTING THAT A NETWORK HAS PARTITIONED
  162.  
  163. Now we look at the problem of network partitions.  In the design
  164. presented so far there is enough information for any gateway to
  165. detect a partitioned network and to isolate groups of gateways on
  166. each partition:  A gateway G knows that network N is partitioned
  167. if there are two sets of gateways, set Q and set R, such that all
  168. gateways in both sets report they are attached to network N, but
  169. there are no two-way links between a member of set Q and a member
  170. of set R via network N.  This information is derived
  171. independently by each gateway from the table of all gateways and
  172. their attached networks, and from the table of total link state
  173. (tables 2 and 5).
  174.  
  175.  
  176.  
  177.                               - 3 -
  178.  
  179.  
  180.  
  181. VI. DERIVING A NAME FOR EACH PARTITION
  182.  
  183. It is necessary to expand the internet header to allow a field
  184. for identifying a network partition.  The reason for this is to
  185. avoid the necessity for every gateway on a packet's route to
  186. discover to which partition the packet should be sent.
  187.  
  188. The partition name must give sufficient information so that every
  189. gateway can make the proper routing decisions to send a packet to
  190. that partition, based on its tables of total link state and
  191. gateways/attached nets (tables 5 and 2).
  192.  
  193. The following schemes for naming a partition are all done
  194. independently by all gateways, as opposed to having some central
  195. authority choose a name and inform all gateways, or having a
  196. group of gateways decide on a name "by committee".
  197.  
  198. One method of identifying a partition is to use the name of any
  199. member gateway of the partition.  It will not matter if two
  200. gateways choose different names for the same partition.  Since
  201. the sets of gateways involved in the network partitions are
  202. disjoint, any member of the set identifies the set.
  203.  
  204. Another method is to list (either by an explicit list or a bit
  205. table) the set of gateways that make up that partition.  This is
  206. unnecessarily descriptive, since the list of gateways is
  207. derivable from a single member of the set.  And it is a less
  208. robust scheme, because any change to the partition (a gateway
  209. going down, coming up, or the net partitioning into more pieces)
  210. can confuse a gateway trying to route to that set of gateways.
  211. In the first method, if the partition changes, the packet will be
  212. routed unambiguously to whatever partition the named gateway is
  213. in.  Of course, if the named gateway goes down, the packet
  214. becomes undeliverable, but that is easier to deal with than
  215. trying to deliver a packet to a set of gateways that overlaps two
  216. partitions.
  217.  
  218. A third method is for each gateway to number partitions from 1 to
  219. the number of partitions, ordered by, say, the highest numbered
  220. gateway in each partition.  This method uses fewer bits in the
  221. packet header but is a much less robust scheme.  With gateways
  222. having slightly differing information, partition names have
  223. different meanings.  Also, partitions can switch names suddenly.
  224. For instance, a net can be partitioned into 2 pieces, numbered 1
  225. and 2, and, assuming the highest numbered gateway was down, and
  226. comes up in partition 2, partitions 1 and 2 now switch
  227. identities.
  228.  
  229. Thus the recommended method of identifying a partition is the
  230. first method.
  231.  
  232.  
  233.  
  234.  
  235.  
  236.                               - 4 -
  237.  
  238.  
  239.  
  240. VII. FIGURING OUT WHICH PARTITION A HOST IS IN
  241.  
  242. Now we will examine several schemes for having the correct
  243. partition identified in a packet.  It is the responsibility of
  244. either the source host or first gateway to do this.  By examining
  245. the alternative schemes we can also determine whose
  246. responsibility it should be.
  247.  
  248. a) Source host determines correct partition by trial and error --
  249. The source host does not know about the structure of the catenet
  250. and does not know that the destination net is partitioned.  When
  251. it sends a packet to that net with no partition name filled in,
  252. the first gateway to receive the packet sends back a message that
  253. that network is partitioned, and lists the partition names.
  254. Assuming there are k partitions, the source host sends k packets
  255. requiring ACKs to the destination, each packet addressed to a
  256. different partition.  The packet that receives an ACK is the one
  257. addressed to the correct partition.
  258.  
  259. If a gateway receives a packet with an incorrectly filled in
  260. partition name field, that gateway will send back the same kind
  261. of notification as for a packet with a blank field -- it will
  262. notify the host that the net is partitioned and list the
  263. partition names, or if the net is no longer partitioned, give
  264. that information.
  265.  
  266. If the source host is sending packets that require
  267. acknowledgments, it will notice quickly if its packets stop
  268. getting successfully delivered to the destination.  Then it can
  269. redetermine the host's partition.
  270.  
  271. b) The first gateway, using trial and error -- If it is the first
  272. gateway that has the responsibility, it can do the same thing as
  273. the source host in scheme a, sending packets to the destination
  274. addressed to each partition to discover from which partition it
  275. receives an ACK.  Since a network is unlikely to be partitioned
  276. into very many pieces, it is not costly to try all partitions.
  277. Either the correct partition will be found or no ACK will return
  278. (in which case presumably the host is down or the network is
  279. partitioned in such a way that some hosts are unreachable from
  280. all gateways).  The disadvantage of having the first gateway do
  281. the work in this scheme is that a gateway does not know whether
  282. packets it is forwarding successfully reach their destination.
  283. Thus it must either keep a cache of host/partition
  284. correspondence, which can be out of date for some amount of time
  285. during which the gateway will misaddress packets to a
  286. destination, or the gateway must rediscover the correct partition
  287. on a packet by packet basis, which is of course unacceptably
  288. expensive.  Also, assuming it is common for a source host to
  289. split its traffic among several gateways on the source net, after
  290. a gateway discovers the correct partition for a destination host
  291. it should inform all other gateways on the source net of the
  292. correct partition, to prevent the necessity of them rediscovering
  293. that fact.
  294.  
  295.                               - 5 -
  296.  
  297.  
  298.  
  299. c) gateways on a partitioned net could keep track of
  300. host/partition correspondence for their net -- Another method is
  301. for gateways on a partitioned net to find out which hosts they
  302. can reach, and exchange that information with the other gateways
  303. on that partitioned network.  Then a gateway could respond more
  304. intelligently to a packet addressed to the incorrect partition by
  305. sending back a message giving the correct partition (to the
  306. packet source if that is who fills in the partition field in the
  307. packet header, or to all gateways on the source net otherwise).
  308. In addition, a gateway on the partitioned network can forward the
  309. misaddressed packet to the correct partition.
  310.  
  311. This method requires gateways on the partitioned network either
  312. to keep a complete list of the hosts on the net, marked as to
  313. partition, or to keep a cache of hosts, adding hosts to the cache
  314. by querying the gateways on other partitions at the time the
  315. necessity of locating that host arises.  In the complete list
  316. case, gateways on a partitioned net would periodically send
  317. packets requiring ACKs to all hosts on that net in order to keep
  318. their lists up-to-date.  In the cache case, gateways would poke a
  319. host only when the need to know its location arose (when the
  320. gateway received a packet for that host, and the host was not
  321. already in its cache, or when a query from a gateway on a
  322. different partition of the net arrived, asking for that host's
  323. location).
  324.  
  325. This method suffers from the same problem as method b, with the
  326. first gateway having responsibility for determining
  327. host/partition correspondence -- the tables in the gateways on
  328. the partitioned net can become out of date, during which time
  329. they will misdirect traffic, and they cannot constantly be
  330. checking their tables.
  331.  
  332. Thus I recommend method a, having the source host fill in the
  333. partition field using the trial and error method of discovering
  334. host/partition correspondence.
  335.  
  336.  
  337. VIII. ROUTING PACKETS TO THE CORRECT PARTITION
  338.  
  339. As stated above, a gateway G, distant from partitioned network N,
  340. must know which gateways are involved in a partition before G can
  341. correctly route a packet -- it might have to make a different
  342. routing decision for one partition than for another one.
  343.  
  344. When G detects a network has become partitioned into n pieces, G
  345. must add n-1 rows and columns to its shortest distance matrix,
  346. i.e., it treats each partition as a separate network.  It is an
  347. implementation detail, and not a difficult one, to ensure that
  348. the gateway understands the meaning of each row and column.  And
  349. given that the gateway understands the meaning of each row and
  350. column, it is easy for it to fill in the connectivity matrix from
  351. its table of total link state.  The computation is done exactly
  352. as in the nonpartitioned case.
  353.  
  354.                               - 6 -
  355.  
  356.  
  357.  
  358. IX. MODIFYING THE ORIGINAL ARPANET ROUTING FOR PARTITIONS
  359.  
  360. The original ARPANET routing is the currently implemented routing
  361. algorithm in the gateways.  The basic design is that gateways
  362. report their distance vector to all their neighbor gateways
  363. (their distance vector gives their distance to all destination
  364. nets).  They derive their distance vector from their neighbors'
  365. distance vectors. (A gateway's distance to a destination net is 0
  366. if the gateway is directly attached to the destination net.
  367. Otherwise, it is 1 hop further than the neighbor closest to the
  368. destination.)
  369.  
  370. The major modifications that are necessary to handle partitioning
  371. are:
  372.  
  373. 1) Currently distance vectors are just a list of numbers, and
  374. gateways have an assembled-in offset/net number correspondence.
  375. Thus the vectors do not need labels for each entry.  If networks
  376. became partitioned, more destinations would need to be reported
  377. in the distance vector.  Either some (very complicated)
  378. negotiation process would need to be carried out so that all
  379. gateways would agree, when nets became more or less partitioned,
  380. on a new offset/net number correspondence, or the distance
  381. vectors would need labels identifying the destination whose
  382. distance is being reported.  The problems associated with a
  383. negotiation process make that scheme unworkable.  Thus we can
  384. assume the vectors would be expanded to have an identifying label
  385. for each destination.  The label would include net number and
  386. partition name.
  387.  
  388. 2) Gateways do not have global knowledge of the structure of the
  389. catenet, in contrast to a link state scheme.  Thus it is the
  390. responsibility of the gateways on a partitioned network to notice
  391. that the net has become partitioned and start a routing update.
  392.  
  393. In the current implementation, there is no way for gateways on a
  394. partitioned net to tell the difference between having their net
  395. partitioned and having several gateways on their net go down,
  396. since they do not receive information about individual gateways
  397. -- they only receive distance vectors from their neighbors.  They
  398. will no longer receive distance vectors from their neighbors on a
  399. partitioned net, or from neighbors who have gone down, so lack of
  400. response from neighbors does not distinguish between dead
  401. neighbors and a partitioned network.
  402.  
  403. Thus either distance vectors would have to contain information
  404. about all catenet gateways (which adds a great deal of overhead
  405. since there are many more gateways than nets, and the only
  406. purpose of doing that is to detect partitions) or gateways on a
  407. network would report that the network has become partitioned
  408. every time a gateway goes down.
  409.  
  410.  
  411.  
  412.  
  413.                               - 7 -
  414.  
  415.  
  416.  
  417. 3) Gateways in a partition must agree on a partition name, since
  418. if two of them started a routing update with two different names
  419. for the same partition, the rest of the catenet can draw no
  420. conclusion except that the two partition names refer to distinct
  421. destination partitions.  Agreeing on a name is not that easy.  If
  422. some simple algorithm is chosen, such as highest numbered gateway
  423. in that partition, the name of a partition can change.  Suppose
  424. the old partition name was 5 and it changes to 12.  A source host
  425. (or distant gateway) has gone through the overhead of determining
  426. that the proper partition for a destination host was 5.  When the
  427. name of the partition changes, this overhead must be repeated.
  428. Also, when the name of a partition changes, the rest of the
  429. gateways on the catenet must be informed of that fact so that
  430. they will stop reporting about obsolete partition names in their
  431. distance vectors.
  432.  
  433.  
  434. X. COMPARISON OF LINK STATE AND ORIGINAL ARPANET SCHEMES
  435.  
  436. The link state scheme is far more robust.  Because gateways have
  437. global knowledge, routing is more likely to proceed calmly while
  438. routing updates are percolating throughout the catenet.
  439. Partition names are not as important in the link state scheme --
  440. gateways do not have to agree on a single name for a partition.
  441.  
  442. As stated above, because in the currently implemented scheme
  443. gateways report only their distances to destination networks, and
  444. not to individual gateways, either gateways would report network
  445. partitions whenever gateways went down, or the distance vectors
  446. would have to be expanded to include reports about all gateways.
  447. This is a further disadvantage of the original ARPANET scheme to
  448. this application.
  449.  
  450. Another disadvantage of the original ARPANET routing, not related
  451. to partitioning, is that, because nodes do not have global
  452. knowledge of network connectivity, there are types of routing
  453. loops which they cannot distinguish from degradation of best
  454. routes due to connectivity changes.  As currently implemented in
  455. the catenet, nodes report their distance to a destination as
  456. "infinity" (a number higher than the maximum possible distance in
  457. the catenet) when reporting to downstream neighbors.  This fixes
  458. many kinds of routing loops.  However, neither this scheme nor
  459. any variant (such as hold-down, the scheme chosen by the ARPANET
  460. as a modification of the original algorithm) can distinguish all
  461. kinds of routing loops from connectivity changes.  Thus there are
  462. cases when a group of nodes will have to count up their distance
  463. to a destination until it reaches "infinity" before discovering
  464. the destination is unreachable.  This does not make the scheme
  465. unworkable for the current catenet, since the longest possible
  466. path in the catenet is less than 10 hops.  However, it is again a
  467. further disadvantage of the original ARPANET scheme.
  468.  
  469.  
  470.  
  471.  
  472.                               - 8 -
  473.  
  474.  
  475.  
  476. Another important consideration is the link state scheme's
  477. flexibility.  There are new features that the catenet is
  478. scheduled to provide, most notably extended routing, in which the
  479. functional differences between links are recognized and accounted
  480. for.  As described in IEN #86 "Extended Internet Routing", by
  481. Radia Perlman, a link state scheme must be adopted eventually in
  482. order for the catenet to provide this service.
  483.  
  484. Thus the link state approach should be adopted to provide for
  485. network partitioning.
  486.  
  487.  
  488. XI. CONCLUSIONS
  489.  
  490. A link state scheme, as originally presented in PRTN 242,
  491. modified as presented in part IV of this paper should be the
  492. basis of internet routing.
  493.  
  494. The internet header should include a field long enough for a
  495. gateway ID, for the purpose of specifying a partition name.  A
  496. partition name is the ID of any member gateway on that partition.
  497.  
  498. The first gateway that handles a packet checks to see if it is
  499. addressed to a partitioned network.  If so, and if the partition
  500. name field in the internet header is blank, the gateway sends
  501. back a special packet to the source host informing it that the
  502. network is partitioned and giving it a name for each partition of
  503. that network.  When a gateway on the source net handles a packet
  504. for an unpartitioned network in which the partition name field is
  505. not blank, it erases that field and informs the source that that
  506. network is no longer partitioned.
  507.  
  508. When a source host receives notice that a network is partitioned,
  509. it stores the partition names for that network, and when it
  510. wishes to send a packet to a host on that net, it first tries all
  511. partitions to determine the correct one.  It keeps a cache of
  512. host/partition correspondence.  When packets for a host in its
  513. cache no longer reach the destination, the source host should
  514. again attempt to determine the correct partition for that host.
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.                               - 9 -
  532.  
  533.  
  534.  
  535.                             APPENDIX
  536.                COMBINING USUALLY SEPARATE NETWORKS
  537.  
  538. In IEN 110, Dr. Vinton Cerf raises the possibility of combining
  539. nets, given that the catenet could handle a partitioned network.
  540. In general if the networks in question are usually partitioned,
  541. this is a bad idea, since there is overhead involved in having a
  542. partitioned network.  Every time a source wishes to send a packet
  543. to a destination, someone must discover which partition to send
  544. the packet to.
  545.  
  546. However, the specific example discussed in IEN 110 is an example
  547. where there is also a cost associated with not combining
  548. networks.  In the example there are two ground PR nets, A and B.
  549. There are also a number of PRs on airplanes, call them P1, P2,
  550. ... Pn.  When Pi is within range of a PR in net A, Pi
  551. automatically becomes a part of network A.  When Pi is within
  552. range of both PR nets, the nets become a single PR net.
  553.  
  554. Keeping the two nets separate leads to problems of addressing the
  555. airplane PRs, since the net on which they reside changes.
  556. Combining the two nets into a single network has the overhead of
  557. introducing a usually partitioned network into the catenet.
  558.  
  559. There is a third solution to the particular case involved here.
  560. That is to keep networks A and B as separate logical networks,
  561. and to have P1, P2, ... Pn also as separate logical networks on
  562. the internet level.  On the packet radio level there might be
  563. only one net, because one of the Pi connects nets A and B.  But
  564. on the internet level there will be n+2 nets.
  565.  
  566. A gateway on net A, called G1, will have a half gateway
  567. associated with each of the nets it might be "directly connected
  568. to" in the internet sense.  In other words, it will have a half
  569. gateway for A, P1, ... Pn.  The half gateway associated with
  570. network A determines whether its interface to net A is up or down
  571. depending on the state of the hardware ready line, etc., as is
  572. now done.  The half gateway associated with "network" Pi must
  573. determine whether it is "connected" to its "network" by some
  574. other means.  One method is to have a special querying packet
  575. containing the number i.  The packet would be addressed, with a
  576. local header only, to Pi, and sent out the interface to network
  577. A.  Pi's responsibility, upon seeing this querying packet, is to
  578. send back a special answering packet, also containing the number
  579. i.  The half gateway associated with network A, upon receiving
  580. one of these special answering packets, uses the number contained
  581. in the packet to dispatch the packet to the half gateway
  582. associated with Pi.  The half gateway associated with Pi, upon
  583. receiving this special answering packet, knows that its "network"
  584. is up.
  585.  
  586. G1's list of neighbor gateways will include, besides all the
  587. gateways on net A, all the gateways on net B, since a gateway on
  588.  
  589.  
  590.                              - 10 -
  591.  
  592.  
  593.  
  594. net B also has the Pi as potential attached networks.  If some Pi
  595. connects nets A and B, then the gateways on A and B will all
  596. consider each other functional neighbors, and A, B, and the
  597. connected Pi, which have formed themselves into a single
  598. functional PR net, will function as a single net on the internet
  599. level, too.  If one of the Pi is not within reach of either net A
  600. or net B, then all the gateways on nets A and B will report that
  601. they are not attached to net Pi, and all the gateways in the
  602. catenet will know Pi is unreachable.  If A and B have not merged
  603. into one net (none of the Pi are in both nets), then the gateways
  604. on each will report which Pi are reachable from them, so the
  605. catenet will automatically route packets for Pi to the correct
  606. ground PR net.
  607.  
  608. [It would be reasonable to include, in gateway G1, a half gateway
  609. for net B also, since if nets A and B merged, G1 would be
  610. connected to net B.  However, it is not necessary to and is
  611. slightly more efficient not to, since even if nets A and B are
  612. merged, PRs in B are probably physically closer to the gateways
  613. on net B, so the catenet should route packets for PRs in B to the
  614. gateways that "really" are on ground net B.  The advantage of
  615. including a half gateway for B in G1 is that net B could
  616. potentially partition in such a way that some partition included
  617. no gateways from B, but was reachable in the catenet via net A
  618. and some Pi.  It is not obvious, however, what algorithm a half
  619. gateway for B should use to determine whether its "network" is
  620. up.]
  621.  
  622. The airplane PR Pi does not think of itself as a network.  From
  623. its point of view it is an ordinary PR.  The only difference
  624. between Pi and an ordinary PR on net A is that Pi (or the TIU
  625. attached to Pi, if we want to strictly adhere to packet radio
  626. terminology) has stored as its internet address, Pi for its net
  627. number.  It also has a list of possible gateways to use for
  628. internet packets.  This list includes all the gateways on nets A
  629. and B.  In the current PR net there is only one gateway, and all
  630. PRs know the ID of the gateway.  This will change such that there
  631. will either be a special ID for an information service that will
  632. give out the ID of a gateway on the net (so that Pi, instead of
  633. keeping a list of gateways, could ask for a gateway address, as
  634. would the rest of the PRs on nets A and B) or all PRs will have
  635. assembled in a list of gateways, and they will need to probe each
  636. in turn until they find one that responds.  Thus the only
  637. difference in Pi's finding a gateway and in an ordinary PR on net
  638. A finding a gateway, is that (assuming the assembled-in gateway
  639. list scheme is used) Pi's list will be longer, since it will also
  640. include the gateways on net B.
  641.  
  642. There is obviously a cost associated with this solution, too.  If
  643. the number of Pi are small, then this is a reasonable solution.
  644. If there are enough Pi, then the cost of having all those logical
  645. nets becomes greater than the cost of having an often partitioned
  646. network, so the solution of combining A, B, and all the Pi into
  647. one logical net in the catenet is a more practical solution.
  648.  
  649.                              - 11 -
  650.  
  651.