⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc891.txt

📁 RFC 相关的技术文档
💻 TXT
📖 第 1 页 / 共 5 页
字号:
DCN Local-Network Protocols                                        Page 16D.L. MillsDECREMENT-HOLD Event    This event is evoked once per second to decrement the value of HOLD.    1.  If the value of HOLD is zero, do nothing;  otherwise, decrement its        value.READ-CLOCK Procedure    This procedure is called by a client process.  It returns the apparent    time-of-day computed as the integer part of the sum CLK.CLOCK plus    CLK.COUNT.  Note that the precision of the value returned is limited to    +-1 millisecond, so that client processes must expect the apparent    time to "run backward" occasionally due to drift corrections.  When    this happens the backward step will never be greater than one    millisecond and will never occur more often than twice per second.        1.  In the case of line clocks CLK.COUNT is always zero, while in        the case of programmable clocks the hardware must be        interrogated to extract the value of CLK.COUNT.  If following        interrogation a counter-overflow condition is evident, add        CLOCK-TICK to CLK.CLOCK and interrogate the hardware again.            2.  When the value of CLK.COUNT has been determined compute the sum        CLK.COUNT + CLK.CLOCK.  If this sum exceeds the number of        milliseconds in 24 hours (86,400,000), reduce CLK.CLOCK by        86,400,000, set HOLD-INTERVAL -> HOLD, set CLOCK-VALID (bit 15        of DATE) to one, roll over DATE to the next calendar day and        start over.  If not, return the integer part of the sum as the        apparent time-of-day.                 The CLOCK-VALID bit is set to insure that a master-clock update is        received at least once per day.  Note that, in the case of        uncompensated crystal oscillators of the type commonly used as the        1000-Hz time base, a drift of several parts per million can be        expected, which would result in a time drift of several tenths of a        second per day, if not corrected.SET-CLOCK Procedure    This procedure is called by a client process.  It sets a time-of-day    correction factor in milliseconds.  The argument represents a 32-bit    signed fixed-point quantity with decimal point to the right of bit    0 that is to be added to CLK.CLOCK so that READ-CLOCK subsequently    returns the actual time-of-day.          1.  If the correction factor is in the range -2**(16-ADJUST-FRACTION) to        +2**(16-ADJUST-FRACTION) - 1 (about +-128 milliseconds with the        suggested value of ADJUST-FRACTION), the value of the argument        replaces CLK.DELTA and the procedure is complete.  If not, add the        value of the sign-extended argument to CLK.CLOCK and set CLK.DELTA to        zero.  In addition, set HOLD-INTERVAL -> HOLD, since this        represents a relatively large step-change in apparent time.        The value of HOLD represents the remaining number of seconds        in which timestamps should be considered invalid and is used        by the HELLO process to suppress roundtrip delay calculations        which might involve invalid timestamps. DCN Local-Network Protocols                                        Page 17D.L. Mills        3.3.  HELLO Process     The HELLO process maintains clock synchronization with a neighborHELLO process using the HELLO protocol.  It also participates in therouting algorithm.  There is one HELLO process and one set of localstate variables for each link connecting the host to one of itsneighbors.3.3.1.  Local variablesHLO.BROADCAST    This is a one-bit switch state variable.  When set to zero a    point-to-point link is assumed.  When set to one a broadcast (e.g.    Ethernet) link is assumed.HLO.KEEP-ALIVE    This is an eight-bit counter state variable used to indicate whether the    link is up.  It is initialized with a value of zero.HLO.LENGTH    This is a 16-bit integer state variable used to record the length in    octets of the last HELLO message sent.HLO.NEIGHBOR-ADDRESS    This is a 32-bit integer state variable used to contain the neighbor host    Internet address.HLO.PID    This is an eight-bit integer state variable used to identify the    net-output process associated with this HELLO process.  It is initialized    by the kernel when the process is created and remains unchanged    thereafter.HLO.POLL    This is a one-bit switch state variable.  When set the HELLO process    spontaneously sends HELLO messages.  When not set the HELLO process    responds to HELLO messages, but does not send them spontaneously.HLO.TIMESTAMP    This is a 32-bit integer temporary variable used to record the time of    arrival of a HELLO message.HLO.TSP    This is a 16-bit signed integer state variable used in roundtrip delay    calculations.DCN Local-Network Protocols                                        Page 18D.L. Mills3.3.2.  ParametersHELLO-INTERVAL    This is an integer which defines the interval in seconds between HELLO    messages.  It ranges from about eight to a maximum of 30 seconds,    depending on line speed.HOLD-DOWN-INTERVAL    This is an integer which defines the interval in seconds a host will be    considered up following receipt of a HELLO message indicating that    host is up.  A value of 120 is suggested.    KEEP-ALIVE-INTERVAL    This is an integer which defines the interval, in units of    HELLO-INTERVAL, that a HELLO process will consider the link up.  A    value of four is suggested.    MAXDELAY    This is an integer which defines the maximum roundtrip delay in    seconds on a path to any reachable host.  A value of 30 is suggested.    MINDELAY    This is an integer which defines the minimum switching threshold in    milliseconds below which routes will not be changed.  A value of 100 is    suggested.3.3.3.  Events and ProceduresINPUT-PACKET Event    When a packet arrives the net-input process first sets HLO.TIMESTAMP to    the value returned by the READ-CLOCK procedure, then checks the    packet for valid local leader, IP header format and checksum.  If    the protocol field in the IP header indicates a HELLO message, the    packet is passed to the HELLO process.  If any errors are found    the packet is dropped.         The HELLO process first checks the packet for valid HELLO header format    and checksum.  If any errors are found the packet is dropped.  Otherwise,    it proceeds as follows:    1.  If PKT.SOURCE is equal to LOCAL-ADDRESS, then the line to the        neighbor host is looped.  If this is a broadcast link        (HLO.BROADCAST is set to one), then ignore this nicety;  if        not, this is considered an error and further processing is        abandoned.  Note that, in special configurations involving        other systems (e.g.  ARPANET IMPs and gateways) it may be        useful to use looped HELLO to monitor connectivity.  The DCN        implementation provides this feature, but is not described here.            2.  Set KEEP-ALIVE-INTERVAL -> HLO.KEEP-ALIVE.  This indicates the        maximum number of HELLO intervals the HLO.TSP field is        considered valid. DCN Local-Network Protocols                                        Page 19D.L. Mills    3.  Set PKT.TIMESTAMP - HLO.TIMESTAMP -> HLO.TSP.  This is part of the        roundtrip delay calculation.  The value of HLO.TSP will be        updated and returned to the neighbor in the next HELLO message        transmitted.  Next, compute the raw roundtrip delay and offset:        HLO.TIMESTAMP - PKT.TSP -> DELAY and HLO.TSP + DELAY/2 -> OFFSET.         Note:  in the case of a broadcast link (HLO.BROADCAST set to one) set        DELAY to zero.    4.  Perform this step only in the case of non-broadcast links        (HLO.BROADCAST set to zero).  If PKT.SOURCE is not equal to        HLO.NEIGHBOR-ADDRESS, then a new neighbor has appeared on this        link. Set PKT.SOURCE -> HLO.NEIGHBOR ADDRESS, MAXDELAY ->        DELAY and proceed to the next step.  This will force the line        to be declared down and result in a hold-down cycle.        Otherwise, if either PKT.TSP is zero or HOLD is nonzero, then        the DELAY calculation is invalid and further processing is        abandoned.  Note that a hold-down cycle is forced in any         case if a new neighbor is recognized.    5.  If processing reaches this point the DELAY and OFFSET        variables can be assumed valid as well as the remaining data        in the packet.  First, if DELAY < MINDELAY, set MINDELAY ->        DELAY.  This avoids needless path switching when the        difference in delays is not significant and has the effect        that on low-delay links the routing algorithm degenerates to         min-hop rather than min-delay.  Then set HLO.PID -> PID.  There are        two cases:        Case 1:  PKT.NHOSTS is zero.            This will be the case when the neighbor host has just come up or            is on a different net or subnet.  Set NEIGHBOR-ADDRESS -> ADDRESS            and call the ROUTE procedure, which will return the host            ID.  Then call the UPDATE procedure.  In the case of            errors, do nothing but return.                    Case 2:  PKT.NHOSTS is nonzero.            This is the case when the neighbor host is on the same net or            subnet.  First, save the values of DELAY and OFFSET in temporary            variables F and G.  Then, for each value of HID from zero to            NHOSTS-1 consider the corresponding PKT.HOSTS-TABLE entry and do            the following:  Set F + PKT.HOST-TABLE.DELAY -> DELAY and            G + PKT.HOST-TABLE.OFFSET -> OFFSET and call the UPDATE procedure.            This completes processing.        ROUTE Procedure            This procedure returns the host ID in HID of the host represented            by the global variable ADDRESS.    1.  First, determine if the host represented by ADDRESS is on the same        local net as LOCAL-ADDRESS.  For the purposes of this        comparison bits 0-7 and 16-31 are compared for class-A nets        and bits 8-31 are compared for class-B and class-C nets.  This        provides for a subnet capability, where the bits 0-7 and 16-23        (class-A) or 8-15 (class-B) are used as a subnet number.DCN Local-Network Protocols                                        Page 20D.L. Mills                Case 1:  The host is on the same net or subnet.            Extract the address field of ADDRESS, subtract ADDRESS-OFFSET and            store the result in HID.  If 0 <= HID < NHOSTS, the procedure            completes normally;  otherwise it terminates in an error            condition.        Case 2:  The host is not on the same net or subnet.            Search the NET-TABLE for a match of the net fields of            LOCAL-ADDRESS and NET-TABLE.NET.  If found set            NET-TABLE.HID -> HID and return normally.  If the NET-TABLE.NET            field is zero, indicating the last entry in the table, set            HET-TABLE.HID -> HID and return normally.  Note that, in the case            of hosts including GGP/EGP gateway modules, if no match is found            the procedure terminates in an error condition.UPDATE Procedure    This procedure updates the entry of HOST-TABLE indicated by HID using    three global variables:  DELAY, OFFSET and PID.  Its purpose is to update    the HOST-TABLE entry corresponding to host ID HID.  In the following all    references are to this entry.    1.  If PID is not equal to HOST-TABLE.PID, the route to host HID is not        via the net-output process associated with this HELLO process.  In        this case, if DELAY + MINDELAY > HOST-TABLE.DELAY, the path is longer        than one already in HOST-TABLE, so the procedure does nothing.    2.  This step is reached only if either the route to host HID is via the        net-output process associated with this HELLO process or the newly        reported path to this host is shorter by at least MINDELAY.          There are two cases:        Case 1:  HOST-TABLE.DELAY < MAXDELAY.            The existing path to host HID is up and this is a point-to-point            link (HLO.BROADCAST is set to zero).  If DELAY < MAXDELAY the            newly reported path is also up.  Proceed to the next step.            Otherwise, initiate a hold-down cycle by setting            MAXDELAY -> HOST-TABLE.DELAY and            HOLD-DOWN-INTERVAL -> HOST-TABLE.TTL and return.        Case 2:  HOST-TABLE.DELAY >= MAXDELAY.            The existing path to host HID is down.  If DELAY < MAXDELAY and            HOST-TABLE.TTL is zero, the hold-down period has expired and the            newly reported path has just come up.  Proceed to the next step.            Otherwise simply return.    3.  In this step the HOST-DELAY entry is updated.  Set        DELAY -> HOST-TABLE.DELAY, HOLD-DOWN-INTERVAL -> HOST-TABLE.TTL and        HLO.PID -> HOST-TABLE.PID.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -