home *** CD-ROM | disk | FTP | other *** search
/ Handbook of Infosec Terms 2.0 / Handbook_of_Infosec_Terms_Version_2.0_ISSO.iso / text / rfcs / rfc0814.txt < prev    next >
Text File  |  1996-05-07  |  26KB  |  703 lines

  1.  RFC:  814 
  2.  
  3.  
  4.  
  5.                    NAME, ADDRESSES, PORTS, AND ROUTES 
  6.  
  7.                              David D. Clark                   MIT Laboratory for Computer Science                Computer Systems and Communications Group                                July, 1982 
  8.  
  9.       1.  Introduction 
  10.  
  11.       It has been said that the principal function of an operating system 
  12.  
  13. is to define a number of different names for the same object, so that it 
  14.  
  15. can  busy  itself  keeping  track of the relationship between all of the 
  16.  
  17. different names.  Network protocols  seem  to  have  somewhat  the  same 
  18.  
  19. characteristic.    In  TCP/IP,  there  are  several ways of referring to 
  20.  
  21. things.  At the human visible  interface,  there  are  character  string 
  22.  
  23. "names"  to  identify  networks,  hosts,  and  services.  Host names are 
  24.  
  25. translated into network "addresses", 32-bit  values  that  identify  the 
  26.  
  27. network  to  which  a  host is attached, and the location of the host on 
  28.  
  29. that net.  Service names are translated into a "port identifier",  which 
  30.  
  31. in  TCP  is  a  16-bit  value.    Finally, addresses are translated into 
  32.  
  33. "routes", which are the sequence of steps a packet must  take  to  reach 
  34.  
  35. the  specified  addresses.  Routes show up explicitly in the form of the 
  36.  
  37. internet routing options, and also implicitly in the  address  to  route 
  38.  
  39. translation tables which all hosts and gateways maintain. 
  40.  
  41.       This  RFC  gives  suggestions  and  guidance  for the design of the 
  42.  
  43. tables and algorithms necessary to keep track of these various sorts  of 
  44.  
  45. identifiers inside a host implementation of TCP/IP. 
  46.                                     2 
  47.  
  48.       2.  The Scope of the Problem 
  49.  
  50.       One  of the first questions one can ask about a naming mechanism is 
  51.  
  52. how many names one can expect to encounter.  In order to answer this, it 
  53.  
  54. is necessary to know something about the expected maximum  size  of  the 
  55.  
  56. internet.  Currently, the internet is fairly small.  It contains no more 
  57.  
  58. than  25  active  networks,  and no more than a few hundred hosts.  This 
  59.  
  60. makes it possible to install tables which exhaustively list all of these 
  61.  
  62. elements.  However, any implementation undertaken now should be based on 
  63.  
  64. an assumption of a much  larger  internet.    The  guidelines  currently 
  65.  
  66. recommended  are  an upper limit of about 1,000 networks.  If we imagine 
  67.  
  68. an average number of 25 hosts per net,  this  would  suggest  a  maximum 
  69.  
  70. number  of 25,000 hosts.  It is quite unclear whether this host estimate 
  71.  
  72. is high or low, but even if it is off by several  factors  of  two,  the 
  73.  
  74. resulting  number  is  still  large enough to suggest that current table 
  75.  
  76. management strategies are unacceptable.  Some fresh techniques  will  be 
  77.  
  78. required to deal with the internet of the future. 
  79.  
  80.       3.  Names 
  81.  
  82.       As the previous section suggests, the internet will eventually have 
  83.  
  84. a  sufficient  number  of  names  that a host cannot have a static table 
  85.  
  86. which provides a translation from every name to its associated  address. 
  87.  
  88. There  are  several  reasons  other than sheer size why a host would not 
  89.  
  90. wish to have such a table.  First, with that many names, we  can  expect 
  91.  
  92. names  to  be  added  and deleted at such a rate that an installer might 
  93.  
  94. spend all his time just revising the table.  Second, most of  the  names 
  95.  
  96. will  refer  to  addresses  of  machines with which nothing will ever be 
  97.                                     3 
  98.  
  99.  exchanged.  In fact, there may be whole networks with which a particular 
  100.  
  101. host will never have any traffic. 
  102.  
  103.       To  cope  with  this  large  and  somewhat dynamic environment, the 
  104.  
  105. internet is moving from its current position  in  which  a  single  name 
  106.  
  107. table  is  maintained  by  the  NIC  and  distributed to all hosts, to a 
  108.  
  109. distributed approach in which each network (or  group  of  networks)  is 
  110.  
  111. responsible  for maintaining its own names and providing a "name server" 
  112.  
  113. to translate between the names and the addresses in that network.   Each 
  114.  
  115. host   is   assumed   to  store  not  a  complete  set  of  name-address 
  116.  
  117. translations, but only a cache of recently used names.  When a  name  is 
  118.  
  119. provided  by  a  user for translation to an address, the host will first 
  120.  
  121. examine its local cache, and if  the  name  is  not  found  there,  will 
  122.  
  123. communicate  with  an appropriate name server to obtain the information, 
  124.  
  125. which it may then insert into its cache for future reference. 
  126.  
  127.       Unfortunately, the name server mechanism is not totally in place in 
  128.  
  129. the internet yet, so for the moment, it is necessary to continue to  use 
  130.  
  131. the  old  strategy of maintaining a complete table of all names in every 
  132.  
  133. host.  Implementors, however, should structure this table in such a  way 
  134.  
  135. that  it  is  easy  to  convert  later  to  a  name server approach.  In 
  136.  
  137. particular, a reasonable programming strategy would be to make the  name 
  138.  
  139. table  accessible  only  through  a subroutine interface, rather than by 
  140.  
  141. scattering direct references to the table all through the code.  In this 
  142.  
  143. way, it will be possible, at a later date,  to  replace  the  subroutine 
  144.  
  145. with one capable of making calls on remote name servers. 
  146.  
  147.       A  problem  which  occasionally arises in the ARPANET today is that 
  148.                                     4 
  149.  
  150.  the information in a local host table is out of date, because a host has 
  151.  
  152. moved,  and a revision of the host table has not yet been installed from 
  153.  
  154. the NIC.  In this case, one attempts to connect to a particular host and 
  155.  
  156. discovers an unexpected machine at the address obtained from  the  local 
  157.  
  158. table.    If  a  human is directly observing the connection attempt, the 
  159.  
  160. error  is  usually  detected  immediately.    However,  for   unattended 
  161.  
  162. operations  such as the sending of queued mail, this sort of problem can 
  163.  
  164. lead to a great deal of confusion. 
  165.  
  166.       The nameserver scheme will only make this problem worse,  if  hosts 
  167.  
  168. cache  locally  the  address associated with names that have been looked 
  169.  
  170. up, because the host has no way of knowing when the address has  changed 
  171.  
  172. and the cache entry should be removed.  To solve this problem, plans are 
  173.  
  174. currently  under  way  to  define  a simple facility by which a host can 
  175.  
  176. query a foreign address to determine what name  is  actually  associated 
  177.  
  178. with  it.    SMTP already defines a verification technique based on this 
  179.  
  180. approach. 
  181.  
  182.       4.  Addresses 
  183.  
  184.       The IP layer must know something about addresses.   In  particular, 
  185.  
  186. when  a datagram is being sent out from a host, the IP layer must decide 
  187.  
  188. where to send it on the immediately  connected  network,  based  on  the 
  189.  
  190. internet address.  Mechanically, the IP first tests the internet address 
  191.  
  192. to  see  whether  the network number of the recipient is the same as the 
  193.  
  194. network number of the sender.  If so, the packet can be sent directly to 
  195.  
  196. the final recipient.  If not, the datagram must be sent to a gateway for 
  197.  
  198. further forwarding.  In this latter case,  a  second  decision  must  be 
  199.                                     5 
  200.  
  201.  made, as there may be more than one gateway available on the immediately 
  202.  
  203. attached network. 
  204.  
  205.       When  the  internet address format was first specified, 8 bits were 
  206.  
  207. reserved  to  identify  the  network.     Early   implementations   thus 
  208.  
  209. implemented  the  above  algorithm by means of a table with 256 entries, 
  210.  
  211. one for each possible net, that specified the gateway of choice for that 
  212.  
  213. net, with a special case entry for those nets  to  which  the  host  was 
  214.  
  215. immediately connected.  Such tables were sometimes statically filled in, 
  216.  
  217. which caused confusion and malfunctions when gateways and networks moved 
  218.  
  219. (or crashed). 
  220.  
  221.       The  current  definition  of  the  internet  address provides three 
  222.  
  223. different options for network numbering, with the  goal  of  allowing  a 
  224.  
  225. very  large  number of networks to be part of the internet.  Thus, it is 
  226.  
  227. no longer possible to imagine having an exhaustive  table  to  select  a 
  228.  
  229. gateway  for any foreign net.  Again, current implementations must use a 
  230.  
  231. strategy based on a local cache of  routing  information  for  addresses 
  232.  
  233. currently being used. 
  234.  
  235.       The  recommended  strategy  for  address to route translation is as 
  236.  
  237. follows.    When  the  IP  layer  receives  an  outbound  datagram   for 
  238.  
  239. transmission,  it  extracts  the  network  number  from  the destination 
  240.  
  241. address, and queries its local table to determine  whether  it  knows  a 
  242.  
  243. suitable  gateway to which to send the datagram.  If it does, the job is 
  244.  
  245. done.    (But  see  RFC  816  on  Fault  Isolation  and  Recovery,   for 
  246.  
  247. recommendations  on  how  to  deal  with  the  possible  failure  of the 
  248.  
  249. gateway.)  If there is no such entry in the local table, then select any 
  250.                                     6 
  251.  
  252.  accessible  gateway at random, insert that as an entry in the table, and 
  253.  
  254. use it to send the packet.  Either the guess will be right or wrong.  If 
  255.  
  256. it is wrong, the gateway to which the packet was  sent  will  return  an 
  257.  
  258. ICMP  redirect message to report that there is a better gateway to reach 
  259.  
  260. the net in question.  The arrival  of  this  redirect  should  cause  an 
  261.  
  262. update of the local table. 
  263.  
  264.       The  number  of  entries in the local table should be determined by 
  265.  
  266. the maximum number of active connections which this particular host  can 
  267.  
  268. support  at  any  one  time.  For a large time sharing system, one might 
  269.  
  270. imagine a table with 100 or more entries.  For a personal computer being 
  271.  
  272. used to support a single user telnet connection,  only  one  address  to 
  273.  
  274. gateway association need be maintained at once. 
  275.  
  276.       The  above strategy actually does not completely solve the problem, 
  277.  
  278. but only pushes it down one level, where the problem then arises of  how 
  279.  
  280. a  new  host,  freshly  arriving  on  the  internet,  finds  all  of its 
  281.  
  282. accessible gateways.  Intentionally, this problem is not  solved  within 
  283.  
  284. the  internetwork  architecture.   The reason is that different networks 
  285.  
  286. have drastically different strategies for allowing a host  to  find  out 
  287.  
  288. about  other  hosts  on  its  immediate  network.    Some  nets permit a 
  289.  
  290. broadcast mechanism.  In this case, a host can send out  a  message  and 
  291.  
  292. expect  an  answer  back  from  all  of the attached gateways.  In other 
  293.  
  294. cases, where a particular network  is  richly  provided  with  tools  to 
  295.  
  296. support  the  internet, there may be a special network mechanism which a 
  297.  
  298. host can invoke to determine where the gateways are.  In other cases, it 
  299.  
  300. may be necessary for an installer to manually provide  the  name  of  at 
  301.                                     7 
  302.  
  303.  least  one  accessible  gateway.  Once a host has discovered the name of 
  304.  
  305. one gateway, it can build up a table of all other available gateways, by 
  306.  
  307. keeping track of every gateway that has been reported back to it  in  an 
  308.  
  309. ICMP message. 
  310.  
  311.       5.  Advanced Topics in Addressing and Routing 
  312.  
  313.       The  preceding  discussion  describes  the  mechanism required in a 
  314.  
  315. minimal implementation,  an  implementation  intended  only  to  provide 
  316.  
  317. operational  service  access  today to the various networks that make up 
  318.  
  319. the internet.  For any host which will participate in  future  research, 
  320.  
  321. as  contrasted  with  service,  some  additional  features are required. 
  322.  
  323. These features will also be helpful for service hosts if  they  wish  to 
  324.  
  325. obtain access to some of the more exotic networks which will become part 
  326.  
  327. of  the internet over the next few years.  All implementors are urged to 
  328.  
  329. at least provide a structure into which these features  could  be  later 
  330.  
  331. integrated. 
  332.  
  333.       There   are   several  features,  either  already  a  part  of  the 
  334.  
  335. architecture or now under development,  which  are  used  to  modify  or 
  336.  
  337. expand  the  relationships  between addresses and routes.  The IP source 
  338.  
  339. route options allow a host to explicitly direct  a  datagram  through  a 
  340.  
  341. series of gateways to its foreign host.  An alternative form of the ICMP 
  342.  
  343. redirect  packet  has  been  proposed,  which  would  return information 
  344.  
  345. specific to a  particular  destination  host,  not  a  destination  net. 
  346.  
  347. Finally, additional IP options have been proposed to identify particular 
  348.  
  349. routes  within  the internet that are unacceptable.  The difficulty with 
  350.  
  351. implementing these new features  is  that  the  mechanisms  do  not  lie 
  352.                                     8 
  353.  
  354.  entirely within the bounds of IP.  All the mechanisms above are designed 
  355.  
  356. to apply to a particular connection, so that their use must be specified 
  357.  
  358. at  the  TCP level.  Thus, the interface between IP and the layers above 
  359.  
  360. it must include mechanisms to allow passing this  information  back  and 
  361.  
  362. forth,  and TCP (or any other protocol at this level, such as UDP), must 
  363.  
  364. be prepared to store this  information.    The  passing  of  information 
  365.  
  366. between IP and TCP is made more complicated by the fact that some of the 
  367.  
  368. information,  in  particular  ICMP packets, may arrive at any time.  The 
  369.  
  370. normal interface envisioned between TCP  and  IP  is  one  across  which 
  371.  
  372. packets  can  be  sent  or received.  The existence of asynchronous ICMP 
  373.  
  374. messages implies that there must be an additional  channel  between  the 
  375.  
  376. two,  unrelated  to the actual sending and receiving of data.  (In fact, 
  377.  
  378. there are many other ICMP messages which arrive asynchronously and which 
  379.  
  380. must be passed from IP  up  to  higher  layers.    See  RFC  816,  Fault 
  381.  
  382. Isolation and Recovery.) 
  383.  
  384.       Source  routes  are  already  in  use  in  the  internet,  and many 
  385.  
  386. implementations will wish to be able to take advantage  of  them.    The 
  387.  
  388. following  sorts  of  usages  should  be permitted.  First, a user, when 
  389.  
  390. initiating a TCP connection, should be able to hand a source route  into 
  391.  
  392. TCP,  which in turn must hand the source route to IP with every outgoing 
  393.  
  394. datagram.  The user might initially obtain the source route by  querying 
  395.  
  396. a  different  sort  of  name  server,  which would return a source route 
  397.  
  398. instead of an address, or the user may have fabricated the source  route 
  399.  
  400. manually.    A  TCP  which  is  listening  for a connection, rather than 
  401.  
  402. attempting to open one, must be prepared to  receive  a  datagram  which 
  403.  
  404. contains  a  IP return route, in which case it must remember this return 
  405.  
  406. route, and use it as a source route on all returning datagrams. 
  407.                                     9 
  408.  
  409.       6.  Ports and Service Identifiers 
  410.  
  411.       The  IP  layer of the architecture contains the address information 
  412.  
  413. which specifies the destination host to  which  the  datagram  is  being 
  414.  
  415. sent.    In  fact, datagrams are not intended just for particular hosts, 
  416.  
  417. but for particular agents within a host,  processes  or  other  entities 
  418.  
  419. that  are  the  actual  source and sink of the data.  IP performs only a 
  420.  
  421. very simple dispatching once the datagram  has  arrived  at  the  target 
  422.  
  423. host,   it   dispatches  it  to  a  particular  protocol.    It  is  the 
  424.  
  425. responsibility of that protocol handler,  for  example  TCP,  to  finish 
  426.  
  427. dispatching  the  datagram  to the particular connection for which it is 
  428.  
  429. destined.    This  next  layer  of  dispatching  is  done  using   "port 
  430.  
  431. identifiers",  which  are  a  part  of  the  header  of the higher level 
  432.  
  433. protocol, and not the IP layer. 
  434.  
  435.       This two-layer dispatching architecture has caused  a  problem  for 
  436.  
  437. certain  implementations.    In  particular,  some  implementations have 
  438.  
  439. wished to put the IP layer within the kernel of  the  operating  system, 
  440.  
  441. and  the  TCP  layer  as  a  user  domain  application  program.  Strict 
  442.  
  443. adherence to this partitioning can lead to grave  performance  problems, 
  444.  
  445. for  the  datagram  must  first  be  dispatched from the kernel to a TCP 
  446.  
  447. process, which then dispatches the datagram  to  its  final  destination 
  448.  
  449. process.   The overhead of scheduling this dispatch process can severely 
  450.  
  451. limit the achievable throughput of the implementation. 
  452.  
  453.       As is discussed in RFC 817, Modularity and Efficiency  in  Protocol 
  454.  
  455. Implementations,  this  particular  separation  between  kernel and user 
  456.  
  457. leads to other performance problems, even ignoring  the  issue  of  port 
  458.                                     10 
  459.  
  460.  level  dispatching.   However, there is an acceptable shortcut which can 
  461.  
  462. be taken to move the higher  level  dispatching  function  into  the  IP 
  463.  
  464. layer, if this makes the implementation substantially easier. 
  465.  
  466.       In  principle,  every  higher level protocol could have a different 
  467.  
  468. dispatching  algorithm.    The  reason  for  this  is  discussed  below. 
  469.  
  470. However,  for  the  protocols  involved  in  the  service offering being 
  471.  
  472. implemented today, TCP and UDP, the dispatching algorithm is exactly the 
  473.  
  474. same, and the port field is located in precisely the same place  in  the 
  475.  
  476. header.  Therefore, unless one is interested in participating in further 
  477.  
  478. protocol  research,  there  is only one higher level dispatch algorithm. 
  479.  
  480. This algorithm takes into account the internet  level  foreign  address, 
  481.  
  482. the protocol number, and the local port and foreign port from the higher 
  483.  
  484. level  protocol  header.  This algorithm can be implemented as a sort of 
  485.  
  486. adjunct to the IP layer implementation, as long as no other higher level 
  487.  
  488. protocols are to be implemented.  (Actually, the above statement is only 
  489.  
  490. partially true, in that the UDP dispatch function is subset of  the  TCP 
  491.  
  492. dispatch  function.  UDP dispatch depends only protocol number and local 
  493.  
  494. port.  However, there is an occasion within TCP  when  this  exact  same 
  495.  
  496. subset comes into play, when a process wishes to listen for a connection 
  497.  
  498. from  any  foreign  host.    Thus,  the range of mechanisms necessary to 
  499.  
  500. support TCP dispatch are also sufficient to support  precisely  the  UDP 
  501.  
  502. requirement.) 
  503.  
  504.       The decision to remove port level dispatching from IP to the higher 
  505.  
  506. level  protocol  has  been questioned by some implementors.  It has been 
  507.  
  508. argued that if all of the address structure were part of the  IP  layer, 
  509.                                     11 
  510.  
  511.  then IP could do all of the packet dispatching function within the host, 
  512.  
  513. which  would  lead  to  a  simpler  modularity.    Three  problems  were 
  514.  
  515. identified with this.  First, not all protocol implementors could  agree 
  516.  
  517. on  the  size  of the port identifier.  TCP selected a fairly short port 
  518.  
  519. identifier, 16 bits, to reduce  header  size.    Other  protocols  being 
  520.  
  521. designed,  however, wanted a larger port identifier, perhaps 32 bits, so 
  522.  
  523. that the port identifier, if  properly  selected,  could  be  considered 
  524.  
  525. probabilistically  unique.    Thus,  constraining  the  port  id  to one 
  526.  
  527. particular IP level mechanism would prevent certain  fruitful  lines  of 
  528.  
  529. research.    Second,  ports  serve  a  special  function  in addition to 
  530.  
  531. datagram delivery:   certain  port  numbers  are  reserved  to  identify 
  532.  
  533. particular services.  Thus, TCP port 23 is the remote login service.  If 
  534.  
  535. ports  were  implemented  at  the  IP level, then the assignment of well 
  536.  
  537. known ports could not be done on a protocol basis, but would have to  be 
  538.  
  539. done  in a centralized manner for all of the IP architecture.  Third, IP 
  540.  
  541. was designed with a very simple layering role:    IP  contained  exactly 
  542.  
  543. those functions that the gateways must understand.  If the port idea had 
  544.  
  545. been  made a part of the IP layer, it would have suggested that gateways 
  546.  
  547. needed to know about ports, which is not the case. 
  548.  
  549.       There are, of course, other ways  to  avoid  these  problems.    In 
  550.  
  551. particular,  the  "well-known  port" problem can be solved by devising a 
  552.  
  553. second mechanism, distinct from port  dispatching,  to  name  well-known 
  554.  
  555. ports.   Several protocols have settled on the idea of including, in the 
  556.  
  557. packet which sets up a  connection  to  a  particular  service,  a  more 
  558.  
  559. general  service  descriptor,  such  as a character string field.  These 
  560.  
  561. special  packets,  which  are  requesting  connection  to  a  particular 
  562.                                     12 
  563.  
  564.  service,  are  routed on arrival to a special server, sometimes called a 
  565.  
  566. "rendezvous server", which  examines  the  service  request,  selects  a 
  567.  
  568. random  port  which  is to be used for this instance of the service, and 
  569.  
  570. then passes the packet along to  the  service  itself  to  commence  the 
  571.  
  572. interaction. 
  573.  
  574.       For  the  internet architecture, this strategy had the serious flaw 
  575.  
  576. that it presumed all protocols would fit into the same service paradigm: 
  577.  
  578. an initial setup phase, which might contain a certain overhead  such  as 
  579.  
  580. indirect routing through a rendezvous server, followed by the packets of 
  581.  
  582. the  interaction  itself,  which  would  flow  directly  to  the process 
  583.  
  584. providing the service.  Unfortunately, not all high level  protocols  in 
  585.  
  586. internet  were  expected to fit this model.  The best example of this is 
  587.  
  588. isolated datagram exchange using UDP.  The simplest exchange in  UDP  is 
  589.  
  590. one process sending a single datagram to another.  Especially on a local 
  591.  
  592. net,  where  the  net  related overhead is very low, this kind of simple 
  593.  
  594. single datagram interchange can be extremely efficient,  with  very  low 
  595.  
  596. overhead  in  the  hosts.  However, since these individual packets would 
  597.  
  598. not be part of an established connection, if  IP  supported  a  strategy 
  599.  
  600. based  on  a  rendezvous  server and service descriptors, every isolated 
  601.  
  602. datagram would have to  be  routed  indirectly  in  the  receiving  host 
  603.  
  604. through  the  rendezvous  server, which would substantially increase the 
  605.  
  606. overhead of processing, and every datagram would have to carry the  full 
  607.  
  608. service  request  field,  which  would  increase  the size of the packet 
  609.  
  610. header. 
  611.  
  612.       In general, if a network is intended for "virtual circuit service", 
  613.                                     13 
  614.  
  615.  or  things similar to that, then using a special high overhead mechanism 
  616.  
  617. for circuit setup makes sense.  However, current directions in  research 
  618.  
  619. are  leading  away  from  this  class  of  protocol,  so  once again the 
  620.  
  621. architecture  was  designed  not  to   preclude   alternative   protocol 
  622.  
  623. structures.    The  only  rational  position  was  that  the  particular 
  624.  
  625. dispatching strategy used should be part of the  higher  level  protocol 
  626.  
  627. design, not the IP layer. 
  628.  
  629.       This  same  argument about circuit setup mechanisms also applies to 
  630.  
  631. the design of the IP address structure.  Many protocols do not  transmit 
  632.  
  633. a  full  address  field  as  part of every packet, but rather transmit a 
  634.  
  635. short identifier which is created as part of a circuit setup from source 
  636.  
  637. to destination.  If the full address needs to be  carried  in  only  the 
  638.  
  639. first  packet  of  a long exchange, then the overhead of carrying a very 
  640.  
  641. long address field can easily be justified.  Under these  circumstances, 
  642.  
  643. one  can  create  truly extravagant address fields, which are capable of 
  644.  
  645. extending to address almost  any  conceivable  entity.    However,  this 
  646.  
  647. strategy  is  useable  only  in a virtual circuit net, where the packets 
  648.  
  649. being transmitted are part of a  established  sequence,  otherwise  this 
  650.  
  651. large  extravagant  address  must be transported on every packet.  Since 
  652.  
  653. Internet explicitly rejected this restriction on  the  architecture,  it 
  654.  
  655. was  necessary  to come up with an address field that was compact enough 
  656.  
  657. to be sent in every datagram, but general enough to correctly route  the 
  658.  
  659. datagram  through  the  catanet  without a previous setup phase.  The IP 
  660.  
  661. address of 32 bits is the compromise that results.  Clearly it  requires 
  662.  
  663. a  substantial  amount  of shoehorning to address all of the interesting 
  664.  
  665. places in the universe with only 32 bits.  On the other  hand,  had  the 
  666.                                     14 
  667.  
  668.  address  field  become  much  bigger,  IP would have been susceptible to 
  669.  
  670. another criticism, which is that the header had grown unworkably  large. 
  671.  
  672. Again, the fundamental design decision was that the protocol be designed 
  673.  
  674. in  such  a way that it supported research in new and different sorts of 
  675.  
  676. protocol architectures. 
  677.  
  678.       There are some limited restrictions imposed by the IP design on the 
  679.  
  680. port mechanism selected by the higher level  process.    In  particular, 
  681.  
  682. when  a packet goes awry somewhere on the internet, the offending packet 
  683.  
  684. is returned, along with an error indication, as part of an ICMP  packet. 
  685.  
  686. An  ICMP  packet  returns only the IP layer, and the next 64 bits of the 
  687.  
  688. original datagram.  Thus, any higher level protocol which wishes to sort 
  689.  
  690. out from which port a particular offending datagram came must make  sure 
  691.  
  692. that  the  port information is contained within the first 64 bits of the 
  693.  
  694. next level header.  This also means, in most cases, that it is  possible 
  695.  
  696. to  imagine,  as  part  of the IP layer, a port dispatch mechanism which 
  697.  
  698. works by masking and matching on the  first  64  bits  of  the  incoming 
  699.  
  700. higher level header. 
  701.  
  702.  
  703.