1
2
3RFC: 793
4                                    
5                                    
6                                    
7                                    
8                                    
9                                    
10                                    
11                     TRANSMISSION CONTROL PROTOCOL
12                                    
13                                    
14                         DARPA INTERNET PROGRAM
15                                    
16                         PROTOCOL SPECIFICATION
17                                    
18                                    
19                                    
20                             September 1981
21
22
23
24
25
26
27
28
29
30
31
32
33
34                              prepared for
35                                    
36               Defense Advanced Research Projects Agency
37                Information Processing Techniques Office
38                         1400 Wilson Boulevard
39                       Arlington, Virginia  22209
40
41
42
43
44
45
46
47                                   by
48
49                     Information Sciences Institute
50                   University of Southern California
51                           4676 Admiralty Way
52                   Marina del Rey, California  90291
53
54
55
56September 1981                                                          
57                                           Transmission Control Protocol
58
59
60
61                           TABLE OF CONTENTS
62
63    PREFACE ........................................................ iii
64
651.  INTRODUCTION ..................................................... 1
66
67  1.1  Motivation .................................................... 1
68  1.2  Scope ......................................................... 2
69  1.3  About This Document ........................................... 2
70  1.4  Interfaces .................................................... 3
71  1.5  Operation ..................................................... 3
72
732.  PHILOSOPHY ....................................................... 7
74
75  2.1  Elements of the Internetwork System ........................... 7
76  2.2  Model of Operation ............................................ 7
77  2.3  The Host Environment .......................................... 8
78  2.4  Interfaces .................................................... 9
79  2.5  Relation to Other Protocols ................................... 9
80  2.6  Reliable Communication ........................................ 9
81  2.7  Connection Establishment and Clearing ........................ 10
82  2.8  Data Communication ........................................... 12
83  2.9  Precedence and Security ...................................... 13
84  2.10 Robustness Principle ......................................... 13
85
863.  FUNCTIONAL SPECIFICATION ........................................ 15
87
88  3.1  Header Format ................................................ 15
89  3.2  Terminology .................................................. 19
90  3.3  Sequence Numbers ............................................. 24
91  3.4  Establishing a connection .................................... 30
92  3.5  Closing a Connection ......................................... 37
93  3.6  Precedence and Security ...................................... 40
94  3.7  Data Communication ........................................... 40
95  3.8  Interfaces ................................................... 44
96  3.9  Event Processing ............................................. 52
97
98GLOSSARY ............................................................ 79
99
100REFERENCES .......................................................... 85
101
102
103
104
105
106
107
108
109
110
111
112                                                                [Page i]
113
114
115                                                          September 1981
116Transmission Control Protocol
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171[Page ii]                                                               
172
173
174September 1981                                                          
175                                           Transmission Control Protocol
176
177
178
179                                PREFACE
180
181
182
183This document describes the DoD Standard Transmission Control Protocol
184(TCP).  There have been nine earlier editions of the ARPA TCP
185specification on which this standard is based, and the present text
186draws heavily from them.  There have been many contributors to this work
187both in terms of concepts and in terms of text.  This edition clarifies
188several details and removes the end-of-letter buffer-size adjustments,
189and redescribes the letter mechanism as a push function.
190
191                                                           Jon Postel
192
193                                                           Editor
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230                                                              [Page iii]
231
232
233
234
235RFC:  793
236Replaces: RFC 761
237IENs:  129, 124, 112, 81,
23855, 44, 40, 27, 21, 5
239
240                     TRANSMISSION CONTROL PROTOCOL
241
242                         DARPA INTERNET PROGRAM
243                         PROTOCOL SPECIFICATION
244
245
246
247                            1.  INTRODUCTION
248
249The Transmission Control Protocol (TCP) is intended for use as a highly
250reliable host-to-host protocol between hosts in packet-switched computer
251communication networks, and in interconnected systems of such networks.
252
253This document describes the functions to be performed by the
254Transmission Control Protocol, the program that implements it, and its
255interface to programs or users that require its services.
256
2571.1.  Motivation
258
259  Computer communication systems are playing an increasingly important
260  role in military, government, and civilian environments.  This
261  document focuses its attention primarily on military computer
262  communication requirements, especially robustness in the presence of
263  communication unreliability and availability in the presence of
264  congestion, but many of these problems are found in the civilian and
265  government sector as well.
266
267  As strategic and tactical computer communication networks are
268  developed and deployed, it is essential to provide means of
269  interconnecting them and to provide standard interprocess
270  communication protocols which can support a broad range of
271  applications.  In anticipation of the need for such standards, the
272  Deputy Undersecretary of Defense for Research and Engineering has
273  declared the Transmission Control Protocol (TCP) described herein to
274  be a basis for DoD-wide inter-process communication protocol
275  standardization.
276
277  TCP is a connection-oriented, end-to-end reliable protocol designed to
278  fit into a layered hierarchy of protocols which support multi-network
279  applications.  The TCP provides for reliable inter-process
280  communication between pairs of processes in host computers attached to
281  distinct but interconnected computer communication networks.  Very few
282  assumptions are made as to the reliability of the communication
283  protocols below the TCP layer.  TCP assumes it can obtain a simple,
284  potentially unreliable datagram service from the lower level
285  protocols.  In principle, the TCP should be able to operate above a
286  wide spectrum of communication systems ranging from hard-wired
287  connections to packet-switched or circuit-switched networks.
288
289
290                                                                [Page 1]
291
292
293                                                          September 1981
294Transmission Control Protocol
295Introduction
296
297
298
299  TCP is based on concepts first described by Cerf and Kahn in [1].  The
300  TCP fits into a layered protocol architecture just above a basic
301  Internet Protocol [2] which provides a way for the TCP to send and
302  receive variable-length segments of information enclosed in internet
303  datagram "envelopes".  The internet datagram provides a means for
304  addressing source and destination TCPs in different networks.  The
305  internet protocol also deals with any fragmentation or reassembly of
306  the TCP segments required to achieve transport and delivery through
307  multiple networks and interconnecting gateways.  The internet protocol
308  also carries information on the precedence, security classification
309  and compartmentation of the TCP segments, so this information can be
310  communicated end-to-end across multiple networks.
311
312                           Protocol Layering
313
314                        +---------------------+
315                        |     higher-level    |
316                        +---------------------+
317                        |        TCP          |
318                        +---------------------+
319                        |  internet protocol  |
320                        +---------------------+
321                        |communication network|
322                        +---------------------+
323
324                                Figure 1
325
326  Much of this document is written in the context of TCP implementations
327  which are co-resident with higher level protocols in the host
328  computer.  Some computer systems will be connected to networks via
329  front-end computers which house the TCP and internet protocol layers,
330  as well as network specific software.  The TCP specification describes
331  an interface to the higher level protocols which appears to be
332  implementable even for the front-end case, as long as a suitable
333  host-to-front end protocol is implemented.
334
3351.2.  Scope
336
337  The TCP is intended to provide a reliable process-to-process
338  communication service in a multinetwork environment.  The TCP is
339  intended to be a host-to-host protocol in common use in multiple
340  networks.
341
3421.3.  About this Document
343
344  This document represents a specification of the behavior required of
345  any TCP implementation, both in its interactions with higher level
346  protocols and in its interactions with other TCPs.  The rest of this
347
348
349[Page 2]                                                                
350
351
352September 1981                                                          
353                                           Transmission Control Protocol
354                                                            Introduction
355
356
357
358  section offers a very brief view of the protocol interfaces and
359  operation.  Section 2 summarizes the philosophical basis for the TCP
360  design.  Section 3 offers both a detailed description of the actions
361  required of TCP when various events occur (arrival of new segments,
362  user calls, errors, etc.) and the details of the formats of TCP
363  segments.
364
3651.4.  Interfaces
366
367  The TCP interfaces on one side to user or application processes and on
368  the other side to a lower level protocol such as Internet Protocol.
369
370  The interface between an application process and the TCP is
371  illustrated in reasonable detail.  This interface consists of a set of
372  calls much like the calls an operating system provides to an
373  application process for manipulating files.  For example, there are
374  calls to open and close connections and to send and receive data on
375  established connections.  It is also expected that the TCP can
376  asynchronously communicate with application programs.  Although
377  considerable freedom is permitted to TCP implementors to design
378  interfaces which are appropriate to a particular operating system
379  environment, a minimum functionality is required at the TCP/user
380  interface for any valid implementation.
381
382  The interface between TCP and lower level protocol is essentially
383  unspecified except that it is assumed there is a mechanism whereby the
384  two levels can asynchronously pass information to each other.
385  Typically, one expects the lower level protocol to specify this
386  interface.  TCP is designed to work in a very general environment of
387  interconnected networks.  The lower level protocol which is assumed
388  throughout this document is the Internet Protocol [2].
389
3901.5.  Operation
391
392  As noted above, the primary purpose of the TCP is to provide reliable,
393  securable logical circuit or connection service between pairs of
394  processes.  To provide this service on top of a less reliable internet
395  communication system requires facilities in the following areas:
396
397    Basic Data Transfer
398    Reliability
399    Flow Control
400    Multiplexing
401    Connections
402    Precedence and Security
403
404  The basic operation of the TCP in each of these areas is described in
405  the following paragraphs.
406
407
408                                                                [Page 3]
409
410
411                                                          September 1981
412Transmission Control Protocol
413Introduction
414
415
416
417  Basic Data Transfer:
418
419    The TCP is able to transfer a continuous stream of octets in each
420    direction between its users by packaging some number of octets into
421    segments for transmission through the internet system.  In general,
422    the TCPs decide when to block and forward data at their own
423    convenience.
424
425    Sometimes users need to be sure that all the data they have
426    submitted to the TCP has been transmitted.  For this purpose a push
427    function is defined.  To assure that data submitted to a TCP is
428    actually transmitted the sending user indicates that it should be
429    pushed through to the receiving user.  A push causes the TCPs to
430    promptly forward and deliver data up to that point to the receiver.
431    The exact push point might not be visible to the receiving user and
432    the push function does not supply a record boundary marker.
433
434  Reliability:
435
436    The TCP must recover from data that is damaged, lost, duplicated, or
437    delivered out of order by the internet communication system.  This
438    is achieved by assigning a sequence number to each octet
439    transmitted, and requiring a positive acknowledgment (ACK) from the
440    receiving TCP.  If the ACK is not received within a timeout
441    interval, the data is retransmitted.  At the receiver, the sequence
442    numbers are used to correctly order segments that may be received
443    out of order and to eliminate duplicates.  Damage is handled by
444    adding a checksum to each segment transmitted, checking it at the
445    receiver, and discarding damaged segments.
446
447    As long as the TCPs continue to function properly and the internet
448    system does not become completely partitioned, no transmission
449    errors will affect the correct delivery of data.  TCP recovers from
450    internet communication system errors.
451
452  Flow Control:
453
454    TCP provides a means for the receiver to govern the amount of data
455    sent by the sender.  This is achieved by returning a "window" with
456    every ACK indicating a range of acceptable sequence numbers beyond
457    the last segment successfully received.  The window indicates an
458    allowed number of octets that the sender may transmit before
459    receiving further permission.
460
461
462
463
464
465
466
467[Page 4]                                                                
468
469
470September 1981                                                          
471                                           Transmission Control Protocol
472                                                            Introduction
473
474
475
476  Multiplexing:
477
478    To allow for many processes within a single Host to use TCP
479    communication facilities simultaneously, the TCP provides a set of
480    addresses or ports within each host.  Concatenated with the network
481    and host addresses from the internet communication layer, this forms
482    a socket.  A pair of sockets uniquely identifies each connection.
483    That is, a socket may be simultaneously used in multiple
484    connections.
485
486    The binding of ports to processes is handled independently by each
487    Host.  However, it proves useful to attach frequently used processes
488    (e.g., a "logger" or timesharing service) to fixed sockets which are
489    made known to the public.  These services can then be accessed
490    through the known addresses.  Establishing and learning the port
491    addresses of other processes may involve more dynamic mechanisms.
492
493  Connections:
494
495    The reliability and flow control mechanisms described above require
496    that TCPs initialize and maintain certain status information for
497    each data stream.  The combination of this information, including
498    sockets, sequence numbers, and window sizes, is called a connection.
499    Each connection is uniquely specified by a pair of sockets
500    identifying its two sides.
501
502    When two processes wish to communicate, their TCP's must first
503    establish a connection (initialize the status information on each
504    side).  When their communication is complete, the connection is
505    terminated or closed to free the resources for other uses.
506
507    Since connections must be established between unreliable hosts and
508    over the unreliable internet communication system, a handshake
509    mechanism with clock-based sequence numbers is used to avoid
510    erroneous initialization of connections.
511
512  Precedence and Security:
513
514    The users of TCP may indicate the security and precedence of their
515    communication.  Provision is made for default values to be used when
516    these features are not needed.
517
518    
519
520
521
522
523
524
525
526                                                                [Page 5]
527
528
529                                                          September 1981
530Transmission Control Protocol
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585[Page 6]                                                                
586
587
588September 1981                                                          
589                                           Transmission Control Protocol
590
591
592
593                             2.  PHILOSOPHY
594
5952.1.  Elements of the Internetwork System
596
597  The internetwork environment consists of hosts connected to networks
598  which are in turn interconnected via gateways.  It is assumed here
599  that the networks may be either local networks (e.g., the ETHERNET) or
600  large networks (e.g., the ARPANET), but in any case are based on
601  packet switching technology.  The active agents that produce and
602  consume messages are processes.  Various levels of protocols in the
603  networks, the gateways, and the hosts support an interprocess
604  communication system that provides two-way data flow on logical
605  connections between process ports.
606
607  The term packet is used generically here to mean the data of one
608  transaction between a host and its network.  The format of data blocks
609  exchanged within the a network will generally not be of concern to us.
610
611  Hosts are computers attached to a network, and from the communication
612  network's point of view, are the sources and destinations of packets.
613  Processes are viewed as the active elements in host computers (in
614  accordance with the fairly common definition of a process as a program
615  in execution).  Even terminals and files or other I/O devices are
616  viewed as communicating with each other through the use of processes.
617  Thus, all communication is viewed as inter-process communication.
618
619  Since a process may need to distinguish among several communication
620  streams between itself and another process (or processes), we imagine
621  that each process may have a number of ports through which it
622  communicates with the ports of other processes.
623
6242.2.  Model of Operation
625
626  Processes transmit data by calling on the TCP and passing buffers of
627  data as arguments.  The TCP packages the data from these buffers into
628  segments and calls on the internet module to transmit each segment to
629  the destination TCP.  The receiving TCP places the data from a segment
630  into the receiving user's buffer and notifies the receiving user.  The
631  TCPs include control information in the segments which they use to
632  ensure reliable ordered data transmission.
633
634  The model of internet communication is that there is an internet
635  protocol module associated with each TCP which provides an interface
636  to the local network.  This internet module packages TCP segments
637  inside internet datagrams and routes these datagrams to a destination
638  internet module or intermediate gateway.  To transmit the datagram
639  through the local network, it is embedded in a local network packet.
640
641  The packet switches may perform further packaging, fragmentation, or
642
643
644                                                                [Page 7]
645
646
647                                                          September 1981
648Transmission Control Protocol
649Philosophy
650
651
652
653  other operations to achieve the delivery of the local packet to the
654  destination internet module.
655
656  At a gateway between networks, the internet datagram is "unwrapped"
657  from its local packet and examined to determine through which network
658  the internet datagram should travel next.  The internet datagram is
659  then "wrapped" in a local packet suitable to the next network and
660  routed to the next gateway, or to the final destination.
661
662  A gateway is permitted to break up an internet datagram into smaller
663  internet datagram fragments if this is necessary for transmission
664  through the next network.  To do this, the gateway produces a set of
665  internet datagrams; each carrying a fragment.  Fragments may be
666  further broken into smaller fragments at subsequent gateways.  The
667  internet datagram fragment format is designed so that the destination
668  internet module can reassemble fragments into internet datagrams.
669
670  A destination internet module unwraps the segment from the datagram
671  (after reassembling the datagram, if necessary) and passes it to the
672  destination TCP.
673
674  This simple model of the operation glosses over many details.  One
675  important feature is the type of service.  This provides information
676  to the gateway (or internet module) to guide it in selecting the
677  service parameters to be used in traversing the next network.
678  Included in the type of service information is the precedence of the
679  datagram.  Datagrams may also carry security information to permit
680  host and gateways that operate in multilevel secure environments to
681  properly segregate datagrams for security considerations.
682
6832.3.  The Host Environment
684
685  The TCP is assumed to be a module in an operating system.  The users
686  access the TCP much like they would access the file system.  The TCP
687  may call on other operating system functions, for example, to manage
688  data structures.  The actual interface to the network is assumed to be
689  controlled by a device driver module.  The TCP does not call on the
690  network device driver directly, but rather calls on the internet
691  datagram protocol module which may in turn call on the device driver.
692
693  The mechanisms of TCP do not preclude implementation of the TCP in a
694  front-end processor.  However, in such an implementation, a
695  host-to-front-end protocol must provide the functionality to support
696  the type of TCP-user interface described in this document.
697
698
699
700
701
702
703[Page 8]                                                                
704
705
706September 1981                                                          
707                                           Transmission Control Protocol
708                                                              Philosophy
709
710
711
7122.4.  Interfaces
713
714  The TCP/user interface provides for calls made by the user on the TCP
715  to OPEN or CLOSE a connection, to SEND or RECEIVE data, or to obtain
716  STATUS about a connection.  These calls are like other calls from user
717  programs on the operating system, for example, the calls to open, read
718  from, and close a file.
719
720  The TCP/internet interface provides calls to send and receive
721  datagrams addressed to TCP modules in hosts anywhere in the internet
722  system.  These calls have parameters for passing the address, type of
723  service, precedence, security, and other control information.
724
7252.5.  Relation to Other Protocols
726
727  The following diagram illustrates the place of the TCP in the protocol
728  hierarchy:
729
730                                    
731       +------+ +-----+ +-----+       +-----+                    
732       |Telnet| | FTP | |Voice|  ...  |     |  Application Level 
733       +------+ +-----+ +-----+       +-----+                    
734             |   |         |             |                       
735            +-----+     +-----+       +-----+                    
736            | TCP |     | RTP |  ...  |     |  Host Level        
737            +-----+     +-----+       +-----+                    
738               |           |             |                       
739            +-------------------------------+                    
740            |    Internet Protocol & ICMP   |  Gateway Level     
741            +-------------------------------+                    
742                           |                                     
743              +---------------------------+                      
744              |   Local Network Protocol  |    Network Level     
745              +---------------------------+                      
746
747                         Protocol Relationships
748
749                               Figure 2.
750
751  It is expected that the TCP will be able to support higher level
752  protocols efficiently.  It should be easy to interface higher level
753  protocols like the ARPANET Telnet or AUTODIN II THP to the TCP.
754
7552.6.  Reliable Communication
756
757  A stream of data sent on a TCP connection is delivered reliably and in
758  order at the destination.
759
760
761
762                                                                [Page 9]
763
764
765                                                          September 1981
766Transmission Control Protocol
767Philosophy
768
769
770
771  Transmission is made reliable via the use of sequence numbers and
772  acknowledgments.  Conceptually, each octet of data is assigned a
773  sequence number.  The sequence number of the first octet of data in a
774  segment is transmitted with that segment and is called the segment
775  sequence number.  Segments also carry an acknowledgment number which
776  is the sequence number of the next expected data octet of
777  transmissions in the reverse direction.  When the TCP transmits a
778  segment containing data, it puts a copy on a retransmission queue and
779  starts a timer; when the acknowledgment for that data is received, the
780  segment is deleted from the queue.  If the acknowledgment is not
781  received before the timer runs out, the segment is retransmitted.
782
783  An acknowledgment by TCP does not guarantee that the data has been
784  delivered to the end user, but only that the receiving TCP has taken
785  the responsibility to do so.
786
787  To govern the flow of data between TCPs, a flow control mechanism is
788  employed.  The receiving TCP reports a "window" to the sending TCP.
789  This window specifies the number of octets, starting with the
790  acknowledgment number, that the receiving TCP is currently prepared to
791  receive.
792
7932.7.  Connection Establishment and Clearing
794
795  To identify the separate data streams that a TCP may handle, the TCP
796  provides a port identifier.  Since port identifiers are selected
797  independently by each TCP they might not be unique.  To provide for
798  unique addresses within each TCP, we concatenate an internet address
799  identifying the TCP with a port identifier to create a socket which
800  will be unique throughout all networks connected together.
801
802  A connection is fully specified by the pair of sockets at the ends.  A
803  local socket may participate in many connections to different foreign
804  sockets.  A connection can be used to carry data in both directions,
805  that is, it is "full duplex".
806
807  TCPs are free to associate ports with processes however they choose.
808  However, several basic concepts are necessary in any implementation.
809  There must be well-known sockets which the TCP associates only with
810  the "appropriate" processes by some means.  We envision that processes
811  may "own" ports, and that processes can initiate connections only on
812  the ports they own.  (Means for implementing ownership is a local
813  issue, but we envision a Request Port user command, or a method of
814  uniquely allocating a group of ports to a given process, e.g., by
815  associating the high order bits of a port name with a given process.)
816
817  A connection is specified in the OPEN call by the local port and
818  foreign socket arguments.  In return, the TCP supplies a (short) local
819
820
821[Page 10]                                                               
822
823
824September 1981                                                          
825                                           Transmission Control Protocol
826                                                              Philosophy
827
828
829
830  connection name by which the user refers to the connection in
831  subsequent calls.  There are several things that must be remembered
832  about a connection.  To store this information we imagine that there
833  is a data structure called a Transmission Control Block (TCB).  One
834  implementation strategy would have the local connection name be a
835  pointer to the TCB for this connection.  The OPEN call also specifies
836  whether the connection establishment is to be actively pursued, or to
837  be passively waited for.
838
839  A passive OPEN request means that the process wants to accept incoming
840  connection requests rather than attempting to initiate a connection.
841  Often the process requesting a passive OPEN will accept a connection
842  request from any caller.  In this case a foreign socket of all zeros
843  is used to denote an unspecified socket.  Unspecified foreign sockets
844  are allowed only on passive OPENs.
845
846  A service process that wished to provide services for unknown other
847  processes would issue a passive OPEN request with an unspecified
848  foreign socket.  Then a connection could be made with any process that
849  requested a connection to this local socket.  It would help if this
850  local socket were known to be associated with this service.
851
852  Well-known sockets are a convenient mechanism for a priori associating
853  a socket address with a standard service.  For instance, the
854  "Telnet-Server" process is permanently assigned to a particular
855  socket, and other sockets are reserved for File Transfer, Remote Job
856  Entry, Text Generator, Echoer, and Sink processes (the last three
857  being for test purposes).  A socket address might be reserved for
858  access to a "Look-Up" service which would return the specific socket
859  at which a newly created service would be provided.  The concept of a
860  well-known socket is part of the TCP specification, but the assignment
861  of sockets to services is outside this specification.  (See [4].)
862
863  Processes can issue passive OPENs and wait for matching active OPENs
864  from other processes and be informed by the TCP when connections have
865  been established.  Two processes which issue active OPENs to each
866  other at the same time will be correctly connected.  This flexibility
867  is critical for the support of distributed computing in which
868  components act asynchronously with respect to each other.
869
870  There are two principal cases for matching the sockets in the local
871  passive OPENs and an foreign active OPENs.  In the first case, the
872  local passive OPENs has fully specified the foreign socket.  In this
873  case, the match must be exact.  In the second case, the local passive
874  OPENs has left the foreign socket unspecified.  In this case, any
875  foreign socket is acceptable as long as the local sockets match.
876  Other possibilities include partially restricted matches.
877
878
879
880                                                               [Page 11]
881
882
883                                                          September 1981
884Transmission Control Protocol
885Philosophy
886
887
888
889  If there are several pending passive OPENs (recorded in TCBs) with the
890  same local socket, an foreign active OPEN will be matched to a TCB
891  with the specific foreign socket in the foreign active OPEN, if such a
892  TCB exists, before selecting a TCB with an unspecified foreign socket.
893
894  The procedures to establish connections utilize the synchronize (SYN)
895  control flag and involves an exchange of three messages.  This
896  exchange has been termed a three-way hand shake [3].
897
898  A connection is initiated by the rendezvous of an arriving segment
899  containing a SYN and a waiting TCB entry each created by a user OPEN
900  command.  The matching of local and foreign sockets determines when a
901  connection has been initiated.  The connection becomes "established"
902  when sequence numbers have been synchronized in both directions.
903
904  The clearing of a connection also involves the exchange of segments,
905  in this case carrying the FIN control flag.
906
9072.8.  Data Communication
908
909  The data that flows on a connection may be thought of as a stream of
910  octets.  The sending user indicates in each SEND call whether the data
911  in that call (and any preceeding calls) should be immediately pushed
912  through to the receiving user by the setting of the PUSH flag.
913
914  A sending TCP is allowed to collect data from the sending user and to
915  send that data in segments at its own convenience, until the push
916  function is signaled, then it must send all unsent data.  When a
917  receiving TCP sees the PUSH flag, it must not wait for more data from
918  the sending TCP before passing the data to the receiving process.
919
920  There is no necessary relationship between push functions and segment
921  boundaries.  The data in any particular segment may be the result of a
922  single SEND call, in whole or part, or of multiple SEND calls.
923
924  The purpose of push function and the PUSH flag is to push data through
925  from the sending user to the receiving user.  It does not provide a
926  record service.
927
928  There is a coupling between the push function and the use of buffers
929  of data that cross the TCP/user interface.  Each time a PUSH flag is
930  associated with data placed into the receiving user's buffer, the
931  buffer is returned to the user for processing even if the buffer is
932  not filled.  If data arrives that fills the user's buffer before a
933  PUSH is seen, the data is passed to the user in buffer size units.
934
935  TCP also provides a means to communicate to the receiver of data that
936  at some point further along in the data stream than the receiver is
937
938
939[Page 12]                                                               
940
941
942September 1981                                                          
943                                           Transmission Control Protocol
944                                                              Philosophy
945
946
947
948  currently reading there is urgent data.  TCP does not attempt to
949  define what the user specifically does upon being notified of pending
950  urgent data, but the general notion is that the receiving process will
951  take action to process the urgent data quickly.
952
9532.9.  Precedence and Security
954
955  The TCP makes use of the internet protocol type of service field and
956  security option to provide precedence and security on a per connection
957  basis to TCP users.  Not all TCP modules will necessarily function in
958  a multilevel secure environment; some may be limited to unclassified
959  use only, and others may operate at only one security level and
960  compartment.  Consequently, some TCP implementations and services to
961  users may be limited to a subset of the multilevel secure case.
962
963  TCP modules which operate in a multilevel secure environment must
964  properly mark outgoing segments with the security, compartment, and
965  precedence.  Such TCP modules must also provide to their users or
966  higher level protocols such as Telnet or THP an interface to allow
967  them to specify the desired security level, compartment, and
968  precedence of connections.
969
9702.10.  Robustness Principle
971
972  TCP implementations will follow a general principle of robustness:  be
973  conservative in what you do, be liberal in what you accept from
974  others.
975
976  
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998                                                               [Page 13]
999
1000
1001                                                          September 1981
1002Transmission Control Protocol
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057[Page 14]                                                               
1058
1059
1060September 1981                                                          
1061                                           Transmission Control Protocol
1062
1063
1064
1065                      3.  FUNCTIONAL SPECIFICATION
1066
10673.1.  Header Format
1068
1069  TCP segments are sent as internet datagrams.  The Internet Protocol
1070  header carries several information fields, including the source and
1071  destination host addresses [2].  A TCP header follows the internet
1072  header, supplying information specific to the TCP protocol.  This
1073  division allows for the existence of host level protocols other than
1074  TCP.
1075
1076  TCP Header Format
1077
1078                                    
1079    0                   1                   2                   3   
1080    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
1081   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1082   |          Source Port          |       Destination Port        |
1083   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1084   |                        Sequence Number                        |
1085   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1086   |                    Acknowledgment Number                      |
1087   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1088   |  Data |           |U|A|P|R|S|F|                               |
1089   | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
1090   |       |           |G|K|H|T|N|N|                               |
1091   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1092   |           Checksum            |         Urgent Pointer        |
1093   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1094   |                    Options                    |    Padding    |
1095   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1096   |                             data                              |
1097   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1098
1099                            TCP Header Format
1100
1101          Note that one tick mark represents one bit position.
1102
1103                               Figure 3.
1104
1105  Source Port:  16 bits
1106
1107    The source port number.
1108
1109  Destination Port:  16 bits
1110
1111    The destination port number.
1112
1113
1114
1115
1116                                                               [Page 15]
1117
1118
1119                                                          September 1981
1120Transmission Control Protocol
1121Functional Specification
1122
1123
1124
1125  Sequence Number:  32 bits
1126
1127    The sequence number of the first data octet in this segment (except
1128    when SYN is present). If SYN is present the sequence number is the
1129    initial sequence number (ISN) and the first data octet is ISN+1.
1130
1131  Acknowledgment Number:  32 bits
1132
1133    If the ACK control bit is set this field contains the value of the
1134    next sequence number the sender of the segment is expecting to
1135    receive.  Once a connection is established this is always sent.
1136
1137  Data Offset:  4 bits
1138
1139    The number of 32 bit words in the TCP Header.  This indicates where
1140    the data begins.  The TCP header (even one including options) is an
1141    integral number of 32 bits long.
1142
1143  Reserved:  6 bits
1144
1145    Reserved for future use.  Must be zero.
1146
1147  Control Bits:  6 bits (from left to right):
1148
1149    URG:  Urgent Pointer field significant
1150    ACK:  Acknowledgment field significant
1151    PSH:  Push Function
1152    RST:  Reset the connection
1153    SYN:  Synchronize sequence numbers
1154    FIN:  No more data from sender
1155
1156  Window:  16 bits
1157
1158    The number of data octets beginning with the one indicated in the
1159    acknowledgment field which the sender of this segment is willing to
1160    accept.
1161
1162  Checksum:  16 bits
1163
1164    The checksum field is the 16 bit one's complement of the one's
1165    complement sum of all 16 bit words in the header and text.  If a
1166    segment contains an odd number of header and text octets to be
1167    checksummed, the last octet is padded on the right with zeros to
1168    form a 16 bit word for checksum purposes.  The pad is not
1169    transmitted as part of the segment.  While computing the checksum,
1170    the checksum field itself is replaced with zeros.
1171
1172    The checksum also covers a 96 bit pseudo header conceptually
1173
1174
1175[Page 16]                                                               
1176
1177
1178September 1981                                                          
1179                                           Transmission Control Protocol
1180                                                Functional Specification
1181
1182
1183
1184    prefixed to the TCP header.  This pseudo header contains the Source
1185    Address, the Destination Address, the Protocol, and TCP length.
1186    This gives the TCP protection against misrouted segments.  This
1187    information is carried in the Internet Protocol and is transferred
1188    across the TCP/Network interface in the arguments or results of
1189    calls by the TCP on the IP.
1190
1191                     +--------+--------+--------+--------+
1192                     |           Source Address          |
1193                     +--------+--------+--------+--------+
1194                     |         Destination Address       |
1195                     +--------+--------+--------+--------+
1196                     |  zero  |  PTCL  |    TCP Length   |
1197                     +--------+--------+--------+--------+
1198
1199      The TCP Length is the TCP header length plus the data length in
1200      octets (this is not an explicitly transmitted quantity, but is
1201      computed), and it does not count the 12 octets of the pseudo
1202      header.
1203
1204  Urgent Pointer:  16 bits
1205
1206    This field communicates the current value of the urgent pointer as a
1207    positive offset from the sequence number in this segment.  The
1208    urgent pointer points to the sequence number of the octet following
1209    the urgent data.  This field is only be interpreted in segments with
1210    the URG control bit set.
1211
1212  Options:  variable
1213
1214    Options may occupy space at the end of the TCP header and are a
1215    multiple of 8 bits in length.  All options are included in the
1216    checksum.  An option may begin on any octet boundary.  There are two
1217    cases for the format of an option:
1218
1219      Case 1:  A single octet of option-kind.
1220
1221      Case 2:  An octet of option-kind, an octet of option-length, and
1222               the actual option-data octets.
1223
1224    The option-length counts the two octets of option-kind and
1225    option-length as well as the option-data octets.
1226
1227    Note that the list of options may be shorter than the data offset
1228    field might imply.  The content of the header beyond the
1229    End-of-Option option must be header padding (i.e., zero).
1230
1231    A TCP must implement all options.
1232
1233
1234                                                               [Page 17]
1235
1236
1237                                                          September 1981
1238Transmission Control Protocol
1239Functional Specification
1240
1241
1242
1243    Currently defined options include (kind indicated in octal):
1244
1245      Kind     Length    Meaning
1246      ----     ------    -------
1247       0         -       End of option list.
1248       1         -       No-Operation.
1249       2         4       Maximum Segment Size.
1250      
1251
1252    Specific Option Definitions
1253
1254      End of Option List
1255
1256        +--------+
1257        |00000000|
1258        +--------+
1259         Kind=0
1260
1261        This option code indicates the end of the option list.  This
1262        might not coincide with the end of the TCP header according to
1263        the Data Offset field.  This is used at the end of all options,
1264        not the end of each option, and need only be used if the end of
1265        the options would not otherwise coincide with the end of the TCP
1266        header.
1267
1268      No-Operation
1269
1270        +--------+
1271        |00000001|
1272        +--------+
1273         Kind=1
1274
1275        This option code may be used between options, for example, to
1276        align the beginning of a subsequent option on a word boundary.
1277        There is no guarantee that senders will use this option, so
1278        receivers must be prepared to process options even if they do
1279        not begin on a word boundary.
1280
1281      Maximum Segment Size
1282
1283        +--------+--------+---------+--------+
1284        |00000010|00000100|   max seg size   |
1285        +--------+--------+---------+--------+
1286         Kind=2   Length=4
1287
1288
1289
1290
1291
1292
1293[Page 18]                                                               
1294
1295
1296September 1981                                                          
1297                                           Transmission Control Protocol
1298                                                Functional Specification
1299
1300
1301
1302        Maximum Segment Size Option Data:  16 bits
1303
1304          If this option is present, then it communicates the maximum
1305          receive segment size at the TCP which sends this segment.
1306          This field must only be sent in the initial connection request
1307          (i.e., in segments with the SYN control bit set).  If this
1308          option is not used, any segment size is allowed.
1309
1310  Padding:  variable
1311
1312    The TCP header padding is used to ensure that the TCP header ends
1313    and data begins on a 32 bit boundary.  The padding is composed of
1314    zeros.
1315
13163.2.  Terminology
1317
1318  Before we can discuss very much about the operation of the TCP we need
1319  to introduce some detailed terminology.  The maintenance of a TCP
1320  connection requires the remembering of several variables.  We conceive
1321  of these variables being stored in a connection record called a
1322  Transmission Control Block or TCB.  Among the variables stored in the
1323  TCB are the local and remote socket numbers, the security and
1324  precedence of the connection, pointers to the user's send and receive
1325  buffers, pointers to the retransmit queue and to the current segment.
1326  In addition several variables relating to the send and receive
1327  sequence numbers are stored in the TCB.
1328
1329    Send Sequence Variables
1330
1331      SND.UNA - send unacknowledged
1332      SND.NXT - send next
1333      SND.WND - send window
1334      SND.UP  - send urgent pointer
1335      SND.WL1 - segment sequence number used for last window update
1336      SND.WL2 - segment acknowledgment number used for last window
1337                update
1338      ISS     - initial send sequence number
1339
1340    Receive Sequence Variables
1341
1342      RCV.NXT - receive next
1343      RCV.WND - receive window
1344      RCV.UP  - receive urgent pointer
1345      IRS     - initial receive sequence number
1346
1347
1348
1349
1350
1351
1352                                                               [Page 19]
1353
1354
1355                                                          September 1981
1356Transmission Control Protocol
1357Functional Specification
1358
1359
1360
1361  The following diagrams may help to relate some of these variables to
1362  the sequence space.
1363
1364  Send Sequence Space
1365
1366                   1         2          3          4      
1367              ----------|----------|----------|---------- 
1368                     SND.UNA    SND.NXT    SND.UNA        
1369                                          +SND.WND        
1370
1371        1 - old sequence numbers which have been acknowledged  
1372        2 - sequence numbers of unacknowledged data            
1373        3 - sequence numbers allowed for new data transmission 
1374        4 - future sequence numbers which are not yet allowed  
1375
1376                          Send Sequence Space
1377
1378                               Figure 4.
1379    
1380    
1381
1382  The send window is the portion of the sequence space labeled 3 in
1383  figure 4.
1384
1385  Receive Sequence Space
1386
1387                       1          2          3      
1388                   ----------|----------|---------- 
1389                          RCV.NXT    RCV.NXT        
1390                                    +RCV.WND        
1391
1392        1 - old sequence numbers which have been acknowledged  
1393        2 - sequence numbers allowed for new reception         
1394        3 - future sequence numbers which are not yet allowed  
1395
1396                         Receive Sequence Space
1397
1398                               Figure 5.
1399    
1400    
1401
1402  The receive window is the portion of the sequence space labeled 2 in
1403  figure 5.
1404
1405  There are also some variables used frequently in the discussion that
1406  take their values from the fields of the current segment.
1407
1408
1409
1410
1411[Page 20]                                                               
1412
1413
1414September 1981                                                          
1415                                           Transmission Control Protocol
1416                                                Functional Specification
1417
1418
1419
1420    Current Segment Variables
1421
1422      SEG.SEQ - segment sequence number
1423      SEG.ACK - segment acknowledgment number
1424      SEG.LEN - segment length
1425      SEG.WND - segment window
1426      SEG.UP  - segment urgent pointer
1427      SEG.PRC - segment precedence value
1428
1429  A connection progresses through a series of states during its
1430  lifetime.  The states are:  LISTEN, SYN-SENT, SYN-RECEIVED,
1431  ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK,
1432  TIME-WAIT, and the fictional state CLOSED.  CLOSED is fictional
1433  because it represents the state when there is no TCB, and therefore,
1434  no connection.  Briefly the meanings of the states are:
1435
1436    LISTEN - represents waiting for a connection request from any remote
1437    TCP and port.
1438
1439    SYN-SENT - represents waiting for a matching connection request
1440    after having sent a connection request.
1441
1442    SYN-RECEIVED - represents waiting for a confirming connection
1443    request acknowledgment after having both received and sent a
1444    connection request.
1445
1446    ESTABLISHED - represents an open connection, data received can be
1447    delivered to the user.  The normal state for the data transfer phase
1448    of the connection.
1449
1450    FIN-WAIT-1 - represents waiting for a connection termination request
1451    from the remote TCP, or an acknowledgment of the connection
1452    termination request previously sent.
1453
1454    FIN-WAIT-2 - represents waiting for a connection termination request
1455    from the remote TCP.
1456
1457    CLOSE-WAIT - represents waiting for a connection termination request
1458    from the local user.
1459
1460    CLOSING - represents waiting for a connection termination request
1461    acknowledgment from the remote TCP.
1462
1463    LAST-ACK - represents waiting for an acknowledgment of the
1464    connection termination request previously sent to the remote TCP
1465    (which includes an acknowledgment of its connection termination
1466    request).
1467
1468
1469
1470                                                               [Page 21]
1471
1472
1473                                                          September 1981
1474Transmission Control Protocol
1475Functional Specification
1476
1477
1478
1479    TIME-WAIT - represents waiting for enough time to pass to be sure
1480    the remote TCP received the acknowledgment of its connection
1481    termination request.
1482
1483    CLOSED - represents no connection state at all.
1484
1485  A TCP connection progresses from one state to another in response to
1486  events.  The events are the user calls, OPEN, SEND, RECEIVE, CLOSE,
1487  ABORT, and STATUS; the incoming segments, particularly those
1488  containing the SYN, ACK, RST and FIN flags; and timeouts.
1489
1490  The state diagram in figure 6 illustrates only state changes, together
1491  with the causing events and resulting actions, but addresses neither
1492  error conditions nor actions which are not connected with state
1493  changes.  In a later section, more detail is offered with respect to
1494  the reaction of the TCP to events.
1495
1496  NOTE BENE:  this diagram is only a summary and must not be taken as
1497  the total specification.
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529[Page 22]                                                               
1530
1531
1532September 1981                                                          
1533                                           Transmission Control Protocol
1534                                                Functional Specification
1535
1536
1537
1538                                    
1539                              +---------+ ---------\      active OPEN  
1540                              |  CLOSED |            \    -----------  
1541                              +---------+<---------\   \   create TCB  
1542                                |     ^              \   \  snd SYN    
1543                   passive OPEN |     |   CLOSE        \   \           
1544                   ------------ |     | ----------       \   \         
1545                    create TCB  |     | delete TCB         \   \       
1546                                V     |                      \   \     
1547                              +---------+            CLOSE    |    \   
1548                              |  LISTEN |          ---------- |     |  
1549                              +---------+          delete TCB |     |  
1550                   rcv SYN      |     |     SEND              |     |  
1551                  -----------   |     |    -------            |     V  
1552 +---------+      snd SYN,ACK  /       \   snd SYN          +---------+
1553 |         |<-----------------           ------------------>|         |
1554 |   SYN   |                    rcv SYN                     |   SYN   |
1555 |   RCVD  |<-----------------------------------------------|   SENT  |
1556 |         |                    snd ACK                     |         |
1557 |         |------------------           -------------------|         |
1558 +---------+   rcv ACK of SYN  \       /  rcv SYN,ACK       +---------+
1559   |           --------------   |     |   -----------                  
1560   |                  x         |     |     snd ACK                    
1561   |                            V     V                                
1562   |  CLOSE                   +---------+                              
1563   | -------                  |  ESTAB  |                              
1564   | snd FIN                  +---------+                              
1565   |                   CLOSE    |     |    rcv FIN                     
1566   V                  -------   |     |    -------                     
1567 +---------+          snd FIN  /       \   snd ACK          +---------+
1568 |  FIN    |<-----------------           ------------------>|  CLOSE  |
1569 | WAIT-1  |------------------                              |   WAIT  |
1570 +---------+          rcv FIN  \                            +---------+
1571   | rcv ACK of FIN   -------   |                            CLOSE  |  
1572   | --------------   snd ACK   |                           ------- |  
1573   V        x                   V                           snd FIN V  
1574 +---------+                  +---------+                   +---------+
1575 |FINWAIT-2|                  | CLOSING |                   | LAST-ACK|
1576 +---------+                  +---------+                   +---------+
1577   |                rcv ACK of FIN |                 rcv ACK of FIN |  
1578   |  rcv FIN       -------------- |    Timeout=2MSL -------------- |  
1579   |  -------              x       V    ------------        x       V  
1580    \ snd ACK                 +---------+delete TCB         +---------+
1581     ------------------------>|TIME WAIT|------------------>| CLOSED  |
1582                              +---------+                   +---------+
1583
1584                      TCP Connection State Diagram
1585                               Figure 6.
1586
1587
1588                                                               [Page 23]
1589
1590
1591                                                          September 1981
1592Transmission Control Protocol
1593Functional Specification
1594
1595
1596
15973.3.  Sequence Numbers
1598
1599  A fundamental notion in the design is that every octet of data sent
1600  over a TCP connection has a sequence number.  Since every octet is
1601  sequenced, each of them can be acknowledged.  The acknowledgment
1602  mechanism employed is cumulative so that an acknowledgment of sequence
1603  number X indicates that all octets up to but not including X have been
1604  received.  This mechanism allows for straight-forward duplicate
1605  detection in the presence of retransmission.  Numbering of octets
1606  within a segment is that the first data octet immediately following
1607  the header is the lowest numbered, and the following octets are
1608  numbered consecutively.
1609
1610  It is essential to remember that the actual sequence number space is
1611  finite, though very large.  This space ranges from 0 to 2**32 - 1.
1612  Since the space is finite, all arithmetic dealing with sequence
1613  numbers must be performed modulo 2**32.  This unsigned arithmetic
1614  preserves the relationship of sequence numbers as they cycle from
1615  2**32 - 1 to 0 again.  There are some subtleties to computer modulo
1616  arithmetic, so great care should be taken in programming the
1617  comparison of such values.  The symbol "=<" means "less than or equal"
1618  (modulo 2**32).
1619
1620  The typical kinds of sequence number comparisons which the TCP must
1621  perform include:
1622
1623    (a)  Determining that an acknowledgment refers to some sequence
1624         number sent but not yet acknowledged.
1625
1626    (b)  Determining that all sequence numbers occupied by a segment
1627         have been acknowledged (e.g., to remove the segment from a
1628         retransmission queue).
1629
1630    (c)  Determining that an incoming segment contains sequence numbers
1631         which are expected (i.e., that the segment "overlaps" the
1632         receive window).
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647[Page 24]                                                               
1648
1649
1650September 1981                                                          
1651                                           Transmission Control Protocol
1652                                                Functional Specification
1653
1654
1655
1656  In response to sending data the TCP will receive acknowledgments.  The
1657  following comparisons are needed to process the acknowledgments.
1658
1659    SND.UNA = oldest unacknowledged sequence number
1660
1661    SND.NXT = next sequence number to be sent
1662
1663    SEG.ACK = acknowledgment from the receiving TCP (next sequence
1664              number expected by the receiving TCP)
1665
1666    SEG.SEQ = first sequence number of a segment
1667
1668    SEG.LEN = the number of octets occupied by the data in the segment
1669              (counting SYN and FIN)
1670
1671    SEG.SEQ+SEG.LEN-1 = last sequence number of a segment
1672
1673  A new acknowledgment (called an "acceptable ack"), is one for which
1674  the inequality below holds:
1675
1676    SND.UNA < SEG.ACK =< SND.NXT
1677
1678  A segment on the retransmission queue is fully acknowledged if the sum
1679  of its sequence number and length is less or equal than the
1680  acknowledgment value in the incoming segment.
1681
1682  When data is received the following comparisons are needed:
1683
1684    RCV.NXT = next sequence number expected on an incoming segments, and
1685        is the left or lower edge of the receive window
1686
1687    RCV.NXT+RCV.WND-1 = last sequence number expected on an incoming
1688        segment, and is the right or upper edge of the receive window
1689
1690    SEG.SEQ = first sequence number occupied by the incoming segment
1691
1692    SEG.SEQ+SEG.LEN-1 = last sequence number occupied by the incoming
1693        segment
1694
1695  A segment is judged to occupy a portion of valid receive sequence
1696  space if
1697
1698    RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND
1699
1700  or
1701
1702    RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND
1703
1704
1705
1706                                                               [Page 25]
1707
1708
1709                                                          September 1981
1710Transmission Control Protocol
1711Functional Specification
1712
1713
1714
1715  The first part of this test checks to see if the beginning of the
1716  segment falls in the window, the second part of the test checks to see
1717  if the end of the segment falls in the window; if the segment passes
1718  either part of the test it contains data in the window.
1719
1720  Actually, it is a little more complicated than this.  Due to zero
1721  windows and zero length segments, we have four cases for the
1722  acceptability of an incoming segment:
1723
1724    Segment Receive  Test
1725    Length  Window
1726    ------- -------  -------------------------------------------
1727
1728       0       0     SEG.SEQ = RCV.NXT
1729
1730       0      >0     RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND
1731
1732      >0       0     not acceptable
1733
1734      >0      >0     RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND
1735                  or RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND
1736
1737  Note that when the receive window is zero no segments should be
1738  acceptable except ACK segments.  Thus, it is be possible for a TCP to
1739  maintain a zero receive window while transmitting data and receiving
1740  ACKs.  However, even when the receive window is zero, a TCP must
1741  process the RST and URG fields of all incoming segments.
1742
1743  We have taken advantage of the numbering scheme to protect certain
1744  control information as well.  This is achieved by implicitly including
1745  some control flags in the sequence space so they can be retransmitted
1746  and acknowledged without confusion (i.e., one and only one copy of the
1747  control will be acted upon).  Control information is not physically
1748  carried in the segment data space.  Consequently, we must adopt rules
1749  for implicitly assigning sequence numbers to control.  The SYN and FIN
1750  are the only controls requiring this protection, and these controls
1751  are used only at connection opening and closing.  For sequence number
1752  purposes, the SYN is considered to occur before the first actual data
1753  octet of the segment in which it occurs, while the FIN is considered
1754  to occur after the last actual data octet in a segment in which it
1755  occurs.  The segment length (SEG.LEN) includes both data and sequence
1756  space occupying controls.  When a SYN is present then SEG.SEQ is the
1757  sequence number of the SYN.
1758
1759
1760
1761
1762
1763
1764
1765[Page 26]                                                               
1766
1767
1768September 1981                                                          
1769                                           Transmission Control Protocol
1770                                                Functional Specification
1771
1772
1773
1774  Initial Sequence Number Selection
1775
1776  The protocol places no restriction on a particular connection being
1777  used over and over again.  A connection is defined by a pair of
1778  sockets.  New instances of a connection will be referred to as
1779  incarnations of the connection.  The problem that arises from this is
1780  -- "how does the TCP identify duplicate segments from previous
1781  incarnations of the connection?"  This problem becomes apparent if the
1782  connection is being opened and closed in quick succession, or if the
1783  connection breaks with loss of memory and is then reestablished.
1784
1785  To avoid confusion we must prevent segments from one incarnation of a
1786  connection from being used while the same sequence numbers may still
1787  be present in the network from an earlier incarnation.  We want to
1788  assure this, even if a TCP crashes and loses all knowledge of the
1789  sequence numbers it has been using.  When new connections are created,
1790  an initial sequence number (ISN) generator is employed which selects a
1791  new 32 bit ISN.  The generator is bound to a (possibly fictitious) 32
1792  bit clock whose low order bit is incremented roughly every 4
1793  microseconds.  Thus, the ISN cycles approximately every 4.55 hours.
1794  Since we assume that segments will stay in the network no more than
1795  the Maximum Segment Lifetime (MSL) and that the MSL is less than 4.55
1796  hours we can reasonably assume that ISN's will be unique.
1797
1798  For each connection there is a send sequence number and a receive
1799  sequence number.  The initial send sequence number (ISS) is chosen by
1800  the data sending TCP, and the initial receive sequence number (IRS) is
1801  learned during the connection establishing procedure.
1802
1803  For a connection to be established or initialized, the two TCPs must
1804  synchronize on each other's initial sequence numbers.  This is done in
1805  an exchange of connection establishing segments carrying a control bit
1806  called "SYN" (for synchronize) and the initial sequence numbers.  As a
1807  shorthand, segments carrying the SYN bit are also called "SYNs".
1808  Hence, the solution requires a suitable mechanism for picking an
1809  initial sequence number and a slightly involved handshake to exchange
1810  the ISN's.
1811
1812  The synchronization requires each side to send it's own initial
1813  sequence number and to receive a confirmation of it in acknowledgment
1814  from the other side.  Each side must also receive the other side's
1815  initial sequence number and send a confirming acknowledgment.
1816
1817    1) A --> B  SYN my sequence number is X
1818    2) A <-- B  ACK your sequence number is X
1819    3) A <-- B  SYN my sequence number is Y
1820    4) A --> B  ACK your sequence number is Y
1821
1822
1823
1824                                                               [Page 27]
1825
1826
1827                                                          September 1981
1828Transmission Control Protocol
1829Functional Specification
1830
1831
1832
1833  Because steps 2 and 3 can be combined in a single message this is
1834  called the three way (or three message) handshake.
1835
1836  A three way handshake is necessary because sequence numbers are not
1837  tied to a global clock in the network, and TCPs may have different
1838  mechanisms for picking the ISN's.  The receiver of the first SYN has
1839  no way of knowing whether the segment was an old delayed one or not,
1840  unless it remembers the last sequence number used on the connection
1841  (which is not always possible), and so it must ask the sender to
1842  verify this SYN.  The three way handshake and the advantages of a
1843  clock-driven scheme are discussed in [3].
1844
1845  Knowing When to Keep Quiet
1846
1847  To be sure that a TCP does not create a segment that carries a
1848  sequence number which may be duplicated by an old segment remaining in
1849  the network, the TCP must keep quiet for a maximum segment lifetime
1850  (MSL) before assigning any sequence numbers upon starting up or
1851  recovering from a crash in which memory of sequence numbers in use was
1852  lost.  For this specification the MSL is taken to be 2 minutes.  This
1853  is an engineering choice, and may be changed if experience indicates
1854  it is desirable to do so.  Note that if a TCP is reinitialized in some
1855  sense, yet retains its memory of sequence numbers in use, then it need
1856  not wait at all; it must only be sure to use sequence numbers larger
1857  than those recently used.
1858
1859  The TCP Quiet Time Concept
1860
1861    This specification provides that hosts which "crash" without
1862    retaining any knowledge of the last sequence numbers transmitted on
1863    each active (i.e., not closed) connection shall delay emitting any
1864    TCP segments for at least the agreed Maximum Segment Lifetime (MSL)
1865    in the internet system of which the host is a part.  In the
1866    paragraphs below, an explanation for this specification is given.
1867    TCP implementors may violate the "quiet time" restriction, but only
1868    at the risk of causing some old data to be accepted as new or new
1869    data rejected as old duplicated by some receivers in the internet
1870    system.
1871
1872    TCPs consume sequence number space each time a segment is formed and
1873    entered into the network output queue at a source host. The
1874    duplicate detection and sequencing algorithm in the TCP protocol
1875    relies on the unique binding of segment data to sequence space to
1876    the extent that sequence numbers will not cycle through all 2**32
1877    values before the segment data bound to those sequence numbers has
1878    been delivered and acknowledged by the receiver and all duplicate
1879    copies of the segments have "drained" from the internet.  Without
1880    such an assumption, two distinct TCP segments could conceivably be
1881
1882
1883[Page 28]                                                               
1884
1885
1886September 1981                                                          
1887                                           Transmission Control Protocol
1888                                                Functional Specification
1889
1890
1891
1892    assigned the same or overlapping sequence numbers, causing confusion
1893    at the receiver as to which data is new and which is old.  Remember
1894    that each segment is bound to as many consecutive sequence numbers
1895    as there are octets of data in the segment.
1896
1897    Under normal conditions, TCPs keep track of the next sequence number
1898    to emit and the oldest awaiting acknowledgment so as to avoid
1899    mistakenly using a sequence number over before its first use has
1900    been acknowledged.  This alone does not guarantee that old duplicate
1901    data is drained from the net, so the sequence space has been made
1902    very large to reduce the probability that a wandering duplicate will
1903    cause trouble upon arrival.  At 2 megabits/sec. it takes 4.5 hours
1904    to use up 2**32 octets of sequence space.  Since the maximum segment
1905    lifetime in the net is not likely to exceed a few tens of seconds,
1906    this is deemed ample protection for foreseeable nets, even if data
1907    rates escalate to l0's of megabits/sec.  At 100 megabits/sec, the
1908    cycle time is 5.4 minutes which may be a little short, but still
1909    within reason.
1910
1911    The basic duplicate detection and sequencing algorithm in TCP can be
1912    defeated, however, if a source TCP does not have any memory of the
1913    sequence numbers it last used on a given connection. For example, if
1914    the TCP were to start all connections with sequence number 0, then
1915    upon crashing and restarting, a TCP might re-form an earlier
1916    connection (possibly after half-open connection resolution) and emit
1917    packets with sequence numbers identical to or overlapping with
1918    packets still in the network which were emitted on an earlier
1919    incarnation of the same connection.  In the absence of knowledge
1920    about the sequence numbers used on a particular connection, the TCP
1921    specification recommends that the source delay for MSL seconds
1922    before emitting segments on the connection, to allow time for
1923    segments from the earlier connection incarnation to drain from the
1924    system.
1925
1926    Even hosts which can remember the time of day and used it to select
1927    initial sequence number values are not immune from this problem
1928    (i.e., even if time of day is used to select an initial sequence
1929    number for each new connection incarnation).
1930
1931    Suppose, for example, that a connection is opened starting with
1932    sequence number S.  Suppose that this connection is not used much
1933    and that eventually the initial sequence number function (ISN(t))
1934    takes on a value equal to the sequence number, say S1, of the last
1935    segment sent by this TCP on a particular connection.  Now suppose,
1936    at this instant, the host crashes, recovers, and establishes a new
1937    incarnation of the connection. The initial sequence number chosen is
1938    S1 = ISN(t) -- last used sequence number on old incarnation of
1939    connection!  If the recovery occurs quickly enough, any old
1940
1941
1942                                                               [Page 29]
1943
1944
1945                                                          September 1981
1946Transmission Control Protocol
1947Functional Specification
1948
1949
1950
1951    duplicates in the net bearing sequence numbers in the neighborhood
1952    of S1 may arrive and be treated as new packets by the receiver of
1953    the new incarnation of the connection.
1954
1955    The problem is that the recovering host may not know for how long it
1956    crashed nor does it know whether there are still old duplicates in
1957    the system from earlier connection incarnations.
1958
1959    One way to deal with this problem is to deliberately delay emitting
1960    segments for one MSL after recovery from a crash- this is the "quite
1961    time" specification.  Hosts which prefer to avoid waiting are
1962    willing to risk possible confusion of old and new packets at a given
1963    destination may choose not to wait for the "quite time".
1964    Implementors may provide TCP users with the ability to select on a
1965    connection by connection basis whether to wait after a crash, or may
1966    informally implement the "quite time" for all connections.
1967    Obviously, even where a user selects to "wait," this is not
1968    necessary after the host has been "up" for at least MSL seconds.
1969
1970    To summarize: every segment emitted occupies one or more sequence
1971    numbers in the sequence space, the numbers occupied by a segment are
1972    "busy" or "in use" until MSL seconds have passed, upon crashing a
1973    block of space-time is occupied by the octets of the last emitted
1974    segment, if a new connection is started too soon and uses any of the
1975    sequence numbers in the space-time footprint of the last segment of
1976    the previous connection incarnation, there is a potential sequence
1977    number overlap area which could cause confusion at the receiver.
1978
19793.4.  Establishing a connection
1980
1981  The "three-way handshake" is the procedure used to establish a
1982  connection.  This procedure normally is initiated by one TCP and
1983  responded to by another TCP.  The procedure also works if two TCP
1984  simultaneously initiate the procedure.  When simultaneous attempt
1985  occurs, each TCP receives a "SYN" segment which carries no
1986  acknowledgment after it has sent a "SYN".  Of course, the arrival of
1987  an old duplicate "SYN" segment can potentially make it appear, to the
1988  recipient, that a simultaneous connection initiation is in progress.
1989  Proper use of "reset" segments can disambiguate these cases.
1990
1991  Several examples of connection initiation follow.  Although these
1992  examples do not show connection synchronization using data-carrying
1993  segments, this is perfectly legitimate, so long as the receiving TCP
1994  doesn't deliver the data to the user until it is clear the data is
1995  valid (i.e., the data must be buffered at the receiver until the
1996  connection reaches the ESTABLISHED state).  The three-way handshake
1997  reduces the possibility of false connections.  It is the
1998
1999
2000
2001[Page 30]                                                               
2002
2003
2004September 1981                                                          
2005                                           Transmission Control Protocol
2006                                                Functional Specification
2007
2008
2009
2010  implementation of a trade-off between memory and messages to provide
2011  information for this checking.
2012
2013  The simplest three-way handshake is shown in figure 7 below.  The
2014  figures should be interpreted in the following way.  Each line is
2015  numbered for reference purposes.  Right arrows (-->) indicate
2016  departure of a TCP segment from TCP A to TCP B, or arrival of a
2017  segment at B from A.  Left arrows (<--), indicate the reverse.
2018  Ellipsis (...) indicates a segment which is still in the network
2019  (delayed).  An "XXX" indicates a segment which is lost or rejected.
2020  Comments appear in parentheses.  TCP states represent the state AFTER
2021  the departure or arrival of the segment (whose contents are shown in
2022  the center of each line).  Segment contents are shown in abbreviated
2023  form, with sequence number, control flags, and ACK field.  Other
2024  fields such as window, addresses, lengths, and text have been left out
2025  in the interest of clarity.
2026
2027  
2028
2029      TCP A                                                TCP B
2030
2031  1.  CLOSED                                               LISTEN
2032
2033  2.  SYN-SENT    --> <SEQ=100><CTL=SYN>               --> SYN-RECEIVED
2034
2035  3.  ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK>  <-- SYN-RECEIVED
2036
2037  4.  ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK>       --> ESTABLISHED
2038
2039  5.  ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK><DATA> --> ESTABLISHED
2040
2041          Basic 3-Way Handshake for Connection Synchronization
2042
2043                                Figure 7.
2044
2045  In line 2 of figure 7, TCP A begins by sending a SYN segment
2046  indicating that it will use sequence numbers starting with sequence
2047  number 100.  In line 3, TCP B sends a SYN and acknowledges the SYN it
2048  received from TCP A.  Note that the acknowledgment field indicates TCP
2049  B is now expecting to hear sequence 101, acknowledging the SYN which
2050  occupied sequence 100.
2051
2052  At line 4, TCP A responds with an empty segment containing an ACK for
2053  TCP B's SYN; and in line 5, TCP A sends some data.  Note that the
2054  sequence number of the segment in line 5 is the same as in line 4
2055  because the ACK does not occupy sequence number space (if it did, we
2056  would wind up ACKing ACK's!).
2057
2058
2059
2060                                                               [Page 31]
2061
2062
2063                                                          September 1981
2064Transmission Control Protocol
2065Functional Specification
2066
2067
2068
2069  Simultaneous initiation is only slightly more complex, as is shown in
2070  figure 8.  Each TCP cycles from CLOSED to SYN-SENT to SYN-RECEIVED to
2071  ESTABLISHED.
2072
2073  
2074
2075      TCP A                                            TCP B
2076
2077  1.  CLOSED                                           CLOSED
2078
2079  2.  SYN-SENT     --> <SEQ=100><CTL=SYN>              ...
2080
2081  3.  SYN-RECEIVED <-- <SEQ=300><CTL=SYN>              <-- SYN-SENT
2082
2083  4.               ... <SEQ=100><CTL=SYN>              --> SYN-RECEIVED
2084
2085  5.  SYN-RECEIVED --> <SEQ=100><ACK=301><CTL=SYN,ACK> ...
2086
2087  6.  ESTABLISHED  <-- <SEQ=300><ACK=101><CTL=SYN,ACK> <-- SYN-RECEIVED
2088
2089  7.               ... <SEQ=101><ACK=301><CTL=ACK>     --> ESTABLISHED
2090
2091                Simultaneous Connection Synchronization
2092
2093                               Figure 8.
2094
2095  The principle reason for the three-way handshake is to prevent old
2096  duplicate connection initiations from causing confusion.  To deal with
2097  this, a special control message, reset, has been devised.  If the
2098  receiving TCP is in a  non-synchronized state (i.e., SYN-SENT,
2099  SYN-RECEIVED), it returns to LISTEN on receiving an acceptable reset.
2100  If the TCP is in one of the synchronized states (ESTABLISHED,
2101  FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT), it
2102  aborts the connection and informs its user.  We discuss this latter
2103  case under "half-open" connections below.
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119[Page 32]                                                               
2120
2121
2122September 1981                                                          
2123                                           Transmission Control Protocol
2124                                                Functional Specification
2125
2126
2127
2128  
2129
2130      TCP A                                                TCP B
2131
2132  1.  CLOSED                                               LISTEN
2133
2134  2.  SYN-SENT    --> <SEQ=100><CTL=SYN>               ...
2135
2136  3.  (duplicate) ... <SEQ=90><CTL=SYN>               --> SYN-RECEIVED
2137
2138  4.  SYN-SENT    <-- <SEQ=300><ACK=91><CTL=SYN,ACK>  <-- SYN-RECEIVED
2139
2140  5.  SYN-SENT    --> <SEQ=91><CTL=RST>               --> LISTEN
2141  
2142
2143  6.              ... <SEQ=100><CTL=SYN>               --> SYN-RECEIVED
2144
2145  7.  SYN-SENT    <-- <SEQ=400><ACK=101><CTL=SYN,ACK>  <-- SYN-RECEIVED
2146
2147  8.  ESTABLISHED --> <SEQ=101><ACK=401><CTL=ACK>      --> ESTABLISHED
2148
2149                    Recovery from Old Duplicate SYN
2150
2151                               Figure 9.
2152
2153  As a simple example of recovery from old duplicates, consider
2154  figure 9.  At line 3, an old duplicate SYN arrives at TCP B.  TCP B
2155  cannot tell that this is an old duplicate, so it responds normally
2156  (line 4).  TCP A detects that the ACK field is incorrect and returns a
2157  RST (reset) with its SEQ field selected to make the segment
2158  believable.  TCP B, on receiving the RST, returns to the LISTEN state.
2159  When the original SYN (pun intended) finally arrives at line 6, the
2160  synchronization proceeds normally.  If the SYN at line 6 had arrived
2161  before the RST, a more complex exchange might have occurred with RST's
2162  sent in both directions.
2163
2164  Half-Open Connections and Other Anomalies
2165
2166  An established connection is said to be  "half-open" if one of the
2167  TCPs has closed or aborted the connection at its end without the
2168  knowledge of the other, or if the two ends of the connection have
2169  become desynchronized owing to a crash that resulted in loss of
2170  memory.  Such connections will automatically become reset if an
2171  attempt is made to send data in either direction.  However, half-open
2172  connections are expected to be unusual, and the recovery procedure is
2173  mildly involved.
2174
2175  If at site A the connection no longer exists, then an attempt by the
2176
2177
2178                                                               [Page 33]
2179
2180
2181                                                          September 1981
2182Transmission Control Protocol
2183Functional Specification
2184
2185
2186
2187  user at site B to send any data on it will result in the site B TCP
2188  receiving a reset control message.  Such a message indicates to the
2189  site B TCP that something is wrong, and it is expected to abort the
2190  connection.
2191
2192  Assume that two user processes A and B are communicating with one
2193  another when a crash occurs causing loss of memory to A's TCP.
2194  Depending on the operating system supporting A's TCP, it is likely
2195  that some error recovery mechanism exists.  When the TCP is up again,
2196  A is likely to start again from the beginning or from a recovery
2197  point.  As a result, A will probably try to OPEN the connection again
2198  or try to SEND on the connection it believes open.  In the latter
2199  case, it receives the error message "connection not open" from the
2200  local (A's) TCP.  In an attempt to establish the connection, A's TCP
2201  will send a segment containing SYN.  This scenario leads to the
2202  example shown in figure 10.  After TCP A crashes, the user attempts to
2203  re-open the connection.  TCP B, in the meantime, thinks the connection
2204  is open.
2205
2206  
2207
2208      TCP A                                           TCP B
2209
2210  1.  (CRASH)                               (send 300,receive 100)
2211
2212  2.  CLOSED                                           ESTABLISHED
2213
2214  3.  SYN-SENT --> <SEQ=400><CTL=SYN>              --> (??)
2215
2216  4.  (!!)     <-- <SEQ=300><ACK=100><CTL=ACK>     <-- ESTABLISHED
2217
2218  5.  SYN-SENT --> <SEQ=100><CTL=RST>              --> (Abort!!)
2219
2220  6.  SYN-SENT                                         CLOSED
2221
2222  7.  SYN-SENT --> <SEQ=400><CTL=SYN>              -->
2223
2224                     Half-Open Connection Discovery
2225
2226                               Figure 10.
2227
2228  When the SYN arrives at line 3, TCP B, being in a synchronized state,
2229  and the incoming segment outside the window, responds with an
2230  acknowledgment indicating what sequence it next expects to hear (ACK
2231  100).  TCP A sees that this segment does not acknowledge anything it
2232  sent and, being unsynchronized, sends a reset (RST) because it has
2233  detected a half-open connection.  TCP B aborts at line 5.  TCP A will
2234
2235
2236
2237[Page 34]                                                               
2238
2239
2240September 1981                                                          
2241                                           Transmission Control Protocol
2242                                                Functional Specification
2243
2244
2245
2246  continue to try to establish the connection; the problem is now
2247  reduced to the basic 3-way handshake of figure 7.
2248
2249  An interesting alternative case occurs when TCP A crashes and TCP B
2250  tries to send data on what it thinks is a synchronized connection.
2251  This is illustrated in figure 11.  In this case, the data arriving at
2252  TCP A from TCP B (line 2) is unacceptable because no such connection
2253  exists, so TCP A sends a RST.  The RST is acceptable so TCP B
2254  processes it and aborts the connection.
2255
2256  
2257
2258        TCP A                                              TCP B
2259
2260  1.  (CRASH)                                   (send 300,receive 100)
2261
2262  2.  (??)    <-- <SEQ=300><ACK=100><DATA=10><CTL=ACK> <-- ESTABLISHED
2263
2264  3.          --> <SEQ=100><CTL=RST>                   --> (ABORT!!)
2265
2266           Active Side Causes Half-Open Connection Discovery
2267
2268                               Figure 11.
2269
2270  In figure 12, we find the two TCPs A and B with passive connections
2271  waiting for SYN.  An old duplicate arriving at TCP B (line 2) stirs B
2272  into action.  A SYN-ACK is returned (line 3) and causes TCP A to
2273  generate a RST (the ACK in line 3 is not acceptable).  TCP B accepts
2274  the reset and returns to its passive LISTEN state.
2275
2276  
2277
2278      TCP A                                         TCP B
2279
2280  1.  LISTEN                                        LISTEN
2281
2282  2.       ... <SEQ=Z><CTL=SYN>                -->  SYN-RECEIVED
2283
2284  3.  (??) <-- <SEQ=X><ACK=Z+1><CTL=SYN,ACK>   <--  SYN-RECEIVED
2285
2286  4.       --> <SEQ=Z+1><CTL=RST>              -->  (return to LISTEN!)
2287
2288  5.  LISTEN                                        LISTEN
2289
2290       Old Duplicate SYN Initiates a Reset on two Passive Sockets
2291
2292                               Figure 12.
2293
2294
2295
2296                                                               [Page 35]
2297
2298
2299                                                          September 1981
2300Transmission Control Protocol
2301Functional Specification
2302
2303
2304
2305  A variety of other cases are possible, all of which are accounted for
2306  by the following rules for RST generation and processing.
2307
2308  Reset Generation
2309
2310  As a general rule, reset (RST) must be sent whenever a segment arrives
2311  which apparently is not intended for the current connection.  A reset
2312  must not be sent if it is not clear that this is the case.
2313
2314  There are three groups of states:
2315
2316    1.  If the connection does not exist (CLOSED) then a reset is sent
2317    in response to any incoming segment except another reset.  In
2318    particular, SYNs addressed to a non-existent connection are rejected
2319    by this means.
2320
2321    If the incoming segment has an ACK field, the reset takes its
2322    sequence number from the ACK field of the segment, otherwise the
2323    reset has sequence number zero and the ACK field is set to the sum
2324    of the sequence number and segment length of the incoming segment.
2325    The connection remains in the CLOSED state.
2326
2327    2.  If the connection is in any non-synchronized state (LISTEN,
2328    SYN-SENT, SYN-RECEIVED), and the incoming segment acknowledges
2329    something not yet sent (the segment carries an unacceptable ACK), or
2330    if an incoming segment has a security level or compartment which
2331    does not exactly match the level and compartment requested for the
2332    connection, a reset is sent.
2333
2334    If our SYN has not been acknowledged and the precedence level of the
2335    incoming segment is higher than the precedence level requested then
2336    either raise the local precedence level (if allowed by the user and
2337    the system) or send a reset; or if the precedence level of the
2338    incoming segment is lower than the precedence level requested then
2339    continue as if the precedence matched exactly (if the remote TCP
2340    cannot raise the precedence level to match ours this will be
2341    detected in the next segment it sends, and the connection will be
2342    terminated then).  If our SYN has been acknowledged (perhaps in this
2343    incoming segment) the precedence level of the incoming segment must
2344    match the local precedence level exactly, if it does not a reset
2345    must be sent.
2346
2347    If the incoming segment has an ACK field, the reset takes its
2348    sequence number from the ACK field of the segment, otherwise the
2349    reset has sequence number zero and the ACK field is set to the sum
2350    of the sequence number and segment length of the incoming segment.
2351    The connection remains in the same state.
2352
2353
2354
2355[Page 36]                                                               
2356
2357
2358September 1981                                                          
2359                                           Transmission Control Protocol
2360                                                Functional Specification
2361
2362
2363
2364    3.  If the connection is in a synchronized state (ESTABLISHED,
2365    FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT),
2366    any unacceptable segment (out of window sequence number or
2367    unacceptible acknowledgment number) must elicit only an empty
2368    acknowledgment segment containing the current send-sequence number
2369    and an acknowledgment indicating the next sequence number expected
2370    to be received, and the connection remains in the same state.
2371
2372    If an incoming segment has a security level, or compartment, or
2373    precedence which does not exactly match the level, and compartment,
2374    and precedence requested for the connection,a reset is sent and
2375    connection goes to the CLOSED state.  The reset takes its sequence
2376    number from the ACK field of the incoming segment.
2377
2378  Reset Processing
2379
2380  In all states except SYN-SENT, all reset (RST) segments are validated
2381  by checking their SEQ-fields.  A reset is valid if its sequence number
2382  is in the window.  In the SYN-SENT state (a RST received in response
2383  to an initial SYN), the RST is acceptable if the ACK field
2384  acknowledges the SYN.
2385
2386  The receiver of a RST first validates it, then changes state.  If the
2387  receiver was in the LISTEN state, it ignores it.  If the receiver was
2388  in SYN-RECEIVED state and had previously been in the LISTEN state,
2389  then the receiver returns to the LISTEN state, otherwise the receiver
2390  aborts the connection and goes to the CLOSED state.  If the receiver
2391  was in any other state, it aborts the connection and advises the user
2392  and goes to the CLOSED state.
2393
23943.5.  Closing a Connection
2395
2396  CLOSE is an operation meaning "I have no more data to send."  The
2397  notion of closing a full-duplex connection is subject to ambiguous
2398  interpretation, of course, since it may not be obvious how to treat
2399  the receiving side of the connection.  We have chosen to treat CLOSE
2400  in a simplex fashion.  The user who CLOSEs may continue to RECEIVE
2401  until he is told that the other side has CLOSED also.  Thus, a program
2402  could initiate several SENDs followed by a CLOSE, and then continue to
2403  RECEIVE until signaled that a RECEIVE failed because the other side
2404  has CLOSED.  We assume that the TCP will signal a user, even if no
2405  RECEIVEs are outstanding, that the other side has closed, so the user
2406  can terminate his side gracefully.  A TCP will reliably deliver all
2407  buffers SENT before the connection was CLOSED so a user who expects no
2408  data in return need only wait to hear the connection was CLOSED
2409  successfully to know that all his data was received at the destination
2410  TCP.  Users must keep reading connections they close for sending until
2411  the TCP says no more data.
2412
2413
2414                                                               [Page 37]
2415
2416
2417                                                          September 1981
2418Transmission Control Protocol
2419Functional Specification
2420
2421
2422
2423  There are essentially three cases:
2424
2425    1) The user initiates by telling the TCP to CLOSE the connection
2426
2427    2) The remote TCP initiates by sending a FIN control signal
2428
2429    3) Both users CLOSE simultaneously
2430
2431  Case 1:  Local user initiates the close
2432
2433    In this case, a FIN segment can be constructed and placed on the
2434    outgoing segment queue.  No further SENDs from the user will be
2435    accepted by the TCP, and it enters the FIN-WAIT-1 state.  RECEIVEs
2436    are allowed in this state.  All segments preceding and including FIN
2437    will be retransmitted until acknowledged.  When the other TCP has
2438    both acknowledged the FIN and sent a FIN of its own, the first TCP
2439    can ACK this FIN.  Note that a TCP receiving a FIN will ACK but not
2440    send its own FIN until its user has CLOSED the connection also.
2441
2442  Case 2:  TCP receives a FIN from the network
2443
2444    If an unsolicited FIN arrives from the network, the receiving TCP
2445    can ACK it and tell the user that the connection is closing.  The
2446    user will respond with a CLOSE, upon which the TCP can send a FIN to
2447    the other TCP after sending any remaining data.  The TCP then waits
2448    until its own FIN is acknowledged whereupon it deletes the
2449    connection.  If an ACK is not forthcoming, after the user timeout
2450    the connection is aborted and the user is told.
2451
2452  Case 3:  both users close simultaneously
2453
2454    A simultaneous CLOSE by users at both ends of a connection causes
2455    FIN segments to be exchanged.  When all segments preceding the FINs
2456    have been processed and acknowledged, each TCP can ACK the FIN it
2457    has received.  Both will, upon receiving these ACKs, delete the
2458    connection.
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473[Page 38]                                                               
2474
2475
2476September 1981                                                          
2477                                           Transmission Control Protocol
2478                                                Functional Specification
2479
2480
2481
2482  
2483
2484      TCP A                                                TCP B
2485
2486  1.  ESTABLISHED                                          ESTABLISHED
2487
2488  2.  (Close)
2489      FIN-WAIT-1  --> <SEQ=100><ACK=300><CTL=FIN,ACK>  --> CLOSE-WAIT
2490
2491  3.  FIN-WAIT-2  <-- <SEQ=300><ACK=101><CTL=ACK>      <-- CLOSE-WAIT
2492
2493  4.                                                       (Close)
2494      TIME-WAIT   <-- <SEQ=300><ACK=101><CTL=FIN,ACK>  <-- LAST-ACK
2495
2496  5.  TIME-WAIT   --> <SEQ=101><ACK=301><CTL=ACK>      --> CLOSED
2497
2498  6.  (2 MSL)
2499      CLOSED                                                      
2500
2501                         Normal Close Sequence
2502
2503                               Figure 13.
2504
2505  
2506
2507      TCP A                                                TCP B
2508
2509  1.  ESTABLISHED                                          ESTABLISHED
2510
2511  2.  (Close)                                              (Close)
2512      FIN-WAIT-1  --> <SEQ=100><ACK=300><CTL=FIN,ACK>  ... FIN-WAIT-1
2513                  <-- <SEQ=300><ACK=100><CTL=FIN,ACK>  <--
2514                  ... <SEQ=100><ACK=300><CTL=FIN,ACK>  -->
2515
2516  3.  CLOSING     --> <SEQ=101><ACK=301><CTL=ACK>      ... CLOSING
2517                  <-- <SEQ=301><ACK=101><CTL=ACK>      <--
2518                  ... <SEQ=101><ACK=301><CTL=ACK>      -->
2519
2520  4.  TIME-WAIT                                            TIME-WAIT
2521      (2 MSL)                                              (2 MSL)
2522      CLOSED                                               CLOSED
2523
2524                      Simultaneous Close Sequence
2525
2526                               Figure 14.
2527
2528
2529
2530
2531
2532                                                               [Page 39]
2533
2534
2535                                                          September 1981
2536Transmission Control Protocol
2537Functional Specification
2538
2539
2540
25413.6.  Precedence and Security
2542
2543  The intent is that connection be allowed only between ports operating
2544  with exactly the same security and compartment values and at the
2545  higher of the precedence level requested by the two ports.
2546
2547  The precedence and security parameters used in TCP are exactly those
2548  defined in the Internet Protocol (IP) [2].  Throughout this TCP
2549  specification the term "security/compartment" is intended to indicate
2550  the security parameters used in IP including security, compartment,
2551  user group, and handling restriction.
2552
2553  A connection attempt with mismatched security/compartment values or a
2554  lower precedence value must be rejected by sending a reset.  Rejecting
2555  a connection due to too low a precedence only occurs after an
2556  acknowledgment of the SYN has been received.
2557
2558  Note that TCP modules which operate only at the default value of
2559  precedence will still have to check the precedence of incoming
2560  segments and possibly raise the precedence level they use on the
2561  connection.
2562
2563  The security paramaters may be used even in a non-secure environment
2564  (the values would indicate unclassified data), thus hosts in
2565  non-secure environments must be prepared to receive the security
2566  parameters, though they need not send them.
2567
25683.7.  Data Communication
2569
2570  Once the connection is established data is communicated by the
2571  exchange of segments.  Because segments may be lost due to errors
2572  (checksum test failure), or network congestion, TCP uses
2573  retransmission (after a timeout) to ensure delivery of every segment.
2574  Duplicate segments may arrive due to network or TCP retransmission.
2575  As discussed in the section on sequence numbers the TCP performs
2576  certain tests on the sequence and acknowledgment numbers in the
2577  segments to verify their acceptability.
2578
2579  The sender of data keeps track of the next sequence number to use in
2580  the variable SND.NXT.  The receiver of data keeps track of the next
2581  sequence number to expect in the variable RCV.NXT.  The sender of data
2582  keeps track of the oldest unacknowledged sequence number in the
2583  variable SND.UNA.  If the data flow is momentarily idle and all data
2584  sent has been acknowledged then the three variables will be equal.
2585
2586  When the sender creates a segment and transmits it the sender advances
2587  SND.NXT.  When the receiver accepts a segment it advances RCV.NXT and
2588  sends an acknowledgment.  When the data sender receives an
2589
2590
2591[Page 40]                                                               
2592
2593
2594September 1981                                                          
2595                                           Transmission Control Protocol
2596                                                Functional Specification
2597
2598
2599
2600  acknowledgment it advances SND.UNA.  The extent to which the values of
2601  these variables differ is a measure of the delay in the communication.
2602  The amount by which the variables are advanced is the length of the
2603  data in the segment.  Note that once in the ESTABLISHED state all
2604  segments must carry current acknowledgment information.
2605
2606  The CLOSE user call implies a push function, as does the FIN control
2607  flag in an incoming segment.
2608
2609  Retransmission Timeout
2610
2611  Because of the variability of the networks that compose an
2612  internetwork system and the wide range of uses of TCP connections the
2613  retransmission timeout must be dynamically determined.  One procedure
2614  for determining a retransmission time out is given here as an
2615  illustration.
2616
2617    An Example Retransmission Timeout Procedure
2618
2619      Measure the elapsed time between sending a data octet with a
2620      particular sequence number and receiving an acknowledgment that
2621      covers that sequence number (segments sent do not have to match
2622      segments received).  This measured elapsed time is the Round Trip
2623      Time (RTT).  Next compute a Smoothed Round Trip Time (SRTT) as:
2624
2625        SRTT = ( ALPHA * SRTT ) + ((1-ALPHA) * RTT)
2626
2627      and based on this, compute the retransmission timeout (RTO) as:
2628
2629        RTO = min[UBOUND,max[LBOUND,(BETA*SRTT)]]
2630
2631      where UBOUND is an upper bound on the timeout (e.g., 1 minute),
2632      LBOUND is a lower bound on the timeout (e.g., 1 second), ALPHA is
2633      a smoothing factor (e.g., .8 to .9), and BETA is a delay variance
2634      factor (e.g., 1.3 to 2.0).
2635
2636  The Communication of Urgent Information
2637
2638  The objective of the TCP urgent mechanism is to allow the sending user
2639  to stimulate the receiving user to accept some urgent data and to
2640  permit the receiving TCP to indicate to the receiving user when all
2641  the currently known urgent data has been received by the user.
2642
2643  This mechanism permits a point in the data stream to be designated as
2644  the end of urgent information.  Whenever this point is in advance of
2645  the receive sequence number (RCV.NXT) at the receiving TCP, that TCP
2646  must tell the user to go into "urgent mode"; when the receive sequence
2647  number catches up to the urgent pointer, the TCP must tell user to go
2648
2649
2650                                                               [Page 41]
2651
2652
2653                                                          September 1981
2654Transmission Control Protocol
2655Functional Specification
2656
2657
2658
2659  into "normal mode".  If the urgent pointer is updated while the user
2660  is in "urgent mode", the update will be invisible to the user.
2661
2662  The method employs a urgent field which is carried in all segments
2663  transmitted.  The URG control flag indicates that the urgent field is
2664  meaningful and must be added to the segment sequence number to yield
2665  the urgent pointer.  The absence of this flag indicates that there is
2666  no urgent data outstanding.
2667
2668  To send an urgent indication the user must also send at least one data
2669  octet.  If the sending user also indicates a push, timely delivery of
2670  the urgent information to the destination process is enhanced.
2671
2672  Managing the Window
2673
2674  The window sent in each segment indicates the range of sequence
2675  numbers the sender of the window (the data receiver) is currently
2676  prepared to accept.  There is an assumption that this is related to
2677  the currently available data buffer space available for this
2678  connection.
2679
2680  Indicating a large window encourages transmissions.  If more data
2681  arrives than can be accepted, it will be discarded.  This will result
2682  in excessive retransmissions, adding unnecessarily to the load on the
2683  network and the TCPs.  Indicating a small window may restrict the
2684  transmission of data to the point of introducing a round trip delay
2685  between each new segment transmitted.
2686
2687  The mechanisms provided allow a TCP to advertise a large window and to
2688  subsequently advertise a much smaller window without having accepted
2689  that much data.  This, so called "shrinking the window," is strongly
2690  discouraged.  The robustness principle dictates that TCPs will not
2691  shrink the window themselves, but will be prepared for such behavior
2692  on the part of other TCPs.
2693
2694  The sending TCP must be prepared to accept from the user and send at
2695  least one octet of new data even if the send window is zero.  The
2696  sending TCP must regularly retransmit to the receiving TCP even when
2697  the window is zero.  Two minutes is recommended for the retransmission
2698  interval when the window is zero.  This retransmission is essential to
2699  guarantee that when either TCP has a zero window the re-opening of the
2700  window will be reliably reported to the other.
2701
2702  When the receiving TCP has a zero window and a segment arrives it must
2703  still send an acknowledgment showing its next expected sequence number
2704  and current window (zero).
2705
2706  The sending TCP packages the data to be transmitted into segments
2707
2708
2709[Page 42]                                                               
2710
2711
2712September 1981                                                          
2713                                           Transmission Control Protocol
2714                                                Functional Specification
2715
2716
2717
2718  which fit the current window, and may repackage segments on the
2719  retransmission queue.  Such repackaging is not required, but may be
2720  helpful.
2721
2722  In a connection with a one-way data flow, the window information will
2723  be carried in acknowledgment segments that all have the same sequence
2724  number so there will be no way to reorder them if they arrive out of
2725  order.  This is not a serious problem, but it will allow the window
2726  information to be on occasion temporarily based on old reports from
2727  the data receiver.  A refinement to avoid this problem is to act on
2728  the window information from segments that carry the highest
2729  acknowledgment number (that is segments with acknowledgment number
2730  equal or greater than the highest previously received).
2731
2732  The window management procedure has significant influence on the
2733  communication performance.  The following comments are suggestions to
2734  implementers.
2735
2736    Window Management Suggestions
2737
2738      Allocating a very small window causes data to be transmitted in
2739      many small segments when better performance is achieved using
2740      fewer large segments.
2741
2742      One suggestion for avoiding small windows is for the receiver to
2743      defer updating a window until the additional allocation is at
2744      least X percent of the maximum allocation possible for the
2745      connection (where X might be 20 to 40).
2746
2747      Another suggestion is for the sender to avoid sending small
2748      segments by waiting until the window is large enough before
2749      sending data.  If the the user signals a push function then the
2750      data must be sent even if it is a small segment.
2751
2752      Note that the acknowledgments should not be delayed or unnecessary
2753      retransmissions will result.  One strategy would be to send an
2754      acknowledgment when a small segment arrives (with out updating the
2755      window information), and then to send another acknowledgment with
2756      new window information when the window is larger.
2757
2758      The segment sent to probe a zero window may also begin a break up
2759      of transmitted data into smaller and smaller segments.  If a
2760      segment containing a single data octet sent to probe a zero window
2761      is accepted, it consumes one octet of the window now available.
2762      If the sending TCP simply sends as much as it can whenever the
2763      window is non zero, the transmitted data will be broken into
2764      alternating big and small segments.  As time goes on, occasional
2765      pauses in the receiver making window allocation available will
2766
2767
2768                                                               [Page 43]
2769
2770
2771                                                          September 1981
2772Transmission Control Protocol
2773Functional Specification
2774
2775
2776
2777      result in breaking the big segments into a small and not quite so
2778      big pair. And after a while the data transmission will be in
2779      mostly small segments.
2780
2781      The suggestion here is that the TCP implementations need to
2782      actively attempt to combine small window allocations into larger
2783      windows, since the mechanisms for managing the window tend to lead
2784      to many small windows in the simplest minded implementations.
2785
27863.8.  Interfaces
2787
2788  There are of course two interfaces of concern:  the user/TCP interface
2789  and the TCP/lower-level interface.  We have a fairly elaborate model
2790  of the user/TCP interface, but the interface to the lower level
2791  protocol module is left unspecified here, since it will be specified
2792  in detail by the specification of the lowel level protocol.  For the
2793  case that the lower level is IP we note some of the parameter values
2794  that TCPs might use.
2795
2796  User/TCP Interface
2797
2798    The following functional description of user commands to the TCP is,
2799    at best, fictional, since every operating system will have different
2800    facilities.  Consequently, we must warn readers that different TCP
2801    implementations may have different user interfaces.  However, all
2802    TCPs must provide a certain minimum set of services to guarantee
2803    that all TCP implementations can support the same protocol
2804    hierarchy.  This section specifies the functional interfaces
2805    required of all TCP implementations.
2806
2807    TCP User Commands
2808
2809      The following sections functionally characterize a USER/TCP
2810      interface.  The notation used is similar to most procedure or
2811      function calls in high level languages, but this usage is not
2812      meant to rule out trap type service calls (e.g., SVCs, UUOs,
2813      EMTs).
2814
2815      The user commands described below specify the basic functions the
2816      TCP must perform to support interprocess communication.
2817      Individual implementations must define their own exact format, and
2818      may provide combinations or subsets of the basic functions in
2819      single calls.  In particular, some implementations may wish to
2820      automatically OPEN a connection on the first SEND or RECEIVE
2821      issued by the user for a given connection.
2822
2823
2824
2825
2826
2827[Page 44]                                                               
2828
2829
2830September 1981                                                          
2831                                           Transmission Control Protocol
2832                                                Functional Specification
2833
2834
2835
2836      In providing interprocess communication facilities, the TCP must
2837      not only accept commands, but must also return information to the
2838      processes it serves.  The latter consists of:
2839
2840        (a) general information about a connection (e.g., interrupts,
2841        remote close, binding of unspecified foreign socket).
2842
2843        (b) replies to specific user commands indicating success or
2844        various types of failure.
2845
2846      Open
2847
2848        Format:  OPEN (local port, foreign socket, active/passive
2849        [, timeout] [, precedence] [, security/compartment] [, options])
2850        -> local connection name
2851
2852        We assume that the local TCP is aware of the identity of the
2853        processes it serves and will check the authority of the process
2854        to use the connection specified.  Depending upon the
2855        implementation of the TCP, the local network and TCP identifiers
2856        for the source address will either be supplied by the TCP or the
2857        lower level protocol (e.g., IP).  These considerations are the
2858        result of concern about security, to the extent that no TCP be
2859        able to masquerade as another one, and so on.  Similarly, no
2860        process can masquerade as another without the collusion of the
2861        TCP.
2862
2863        If the active/passive flag is set to passive, then this is a
2864        call to LISTEN for an incoming connection.  A passive open may
2865        have either a fully specified foreign socket to wait for a
2866        particular connection or an unspecified foreign socket to wait
2867        for any call.  A fully specified passive call can be made active
2868        by the subsequent execution of a SEND.
2869
2870        A transmission control block (TCB) is created and partially
2871        filled in with data from the OPEN command parameters.
2872
2873        On an active OPEN command, the TCP will begin the procedure to
2874        synchronize (i.e., establish) the connection at once.
2875
2876        The timeout, if present, permits the caller to set up a timeout
2877        for all data submitted to TCP.  If data is not successfully
2878        delivered to the destination within the timeout period, the TCP
2879        will abort the connection.  The present global default is five
2880        minutes.
2881
2882        The TCP or some component of the operating system will verify
2883        the users authority to open a connection with the specified
2884
2885
2886                                                               [Page 45]
2887
2888
2889                                                          September 1981
2890Transmission Control Protocol
2891Functional Specification
2892
2893
2894
2895        precedence or security/compartment.  The absence of precedence
2896        or security/compartment specification in the OPEN call indicates
2897        the default values must be used.
2898
2899        TCP will accept incoming requests as matching only if the
2900        security/compartment information is exactly the same and only if
2901        the precedence is equal to or higher than the precedence
2902        requested in the OPEN call.
2903
2904        The precedence for the connection is the higher of the values
2905        requested in the OPEN call and received from the incoming
2906        request, and fixed at that value for the life of the
2907        connection.Implementers may want to give the user control of
2908        this precedence negotiation.  For example, the user might be
2909        allowed to specify that the precedence must be exactly matched,
2910        or that any attempt to raise the precedence be confirmed by the
2911        user.
2912
2913        A local connection name will be returned to the user by the TCP.
2914        The local connection name can then be used as a short hand term
2915        for the connection defined by the <local socket, foreign socket>
2916        pair.
2917
2918      Send
2919
2920        Format:  SEND (local connection name, buffer address, byte
2921        count, PUSH flag, URGENT flag [,timeout])
2922
2923        This call causes the data contained in the indicated user buffer
2924        to be sent on the indicated connection.  If the connection has
2925        not been opened, the SEND is considered an error.  Some
2926        implementations may allow users to SEND first; in which case, an
2927        automatic OPEN would be done.  If the calling process is not
2928        authorized to use this connection, an error is returned.
2929
2930        If the PUSH flag is set, the data must be transmitted promptly
2931        to the receiver, and the PUSH bit will be set in the last TCP
2932        segment created from the buffer.  If the PUSH flag is not set,
2933        the data may be combined with data from subsequent SENDs for
2934        transmission efficiency.
2935
2936        If the URGENT flag is set, segments sent to the destination TCP
2937        will have the urgent pointer set.  The receiving TCP will signal
2938        the urgent condition to the receiving process if the urgent
2939        pointer indicates that data preceding the urgent pointer has not
2940        been consumed by the receiving process.  The purpose of urgent
2941        is to stimulate the receiver to process the urgent data and to
2942        indicate to the receiver when all the currently known urgent
2943
2944
2945[Page 46]                                                               
2946
2947
2948September 1981                                                          
2949                                           Transmission Control Protocol
2950                                                Functional Specification
2951
2952
2953
2954        data has been received.  The number of times the sending user's
2955        TCP signals urgent will not necessarily be equal to the number
2956        of times the receiving user will be notified of the presence of
2957        urgent data.
2958
2959        If no foreign socket was specified in the OPEN, but the
2960        connection is established (e.g., because a LISTENing connection
2961        has become specific due to a foreign segment arriving for the
2962        local socket), then the designated buffer is sent to the implied
2963        foreign socket.  Users who make use of OPEN with an unspecified
2964        foreign socket can make use of SEND without ever explicitly
2965        knowing the foreign socket address.
2966
2967        However, if a SEND is attempted before the foreign socket
2968        becomes specified, an error will be returned.  Users can use the
2969        STATUS call to determine the status of the connection.  In some
2970        implementations the TCP may notify the user when an unspecified
2971        socket is bound.
2972
2973        If a timeout is specified, the current user timeout for this
2974        connection is changed to the new one.
2975
2976        In the simplest implementation, SEND would not return control to
2977        the sending process until either the transmission was complete
2978        or the timeout had been exceeded.  However, this simple method
2979        is both subject to deadlocks (for example, both sides of the
2980        connection might try to do SENDs before doing any RECEIVEs) and
2981        offers poor performance, so it is not recommended.  A more
2982        sophisticated implementation would return immediately to allow
2983        the process to run concurrently with network I/O, and,
2984        furthermore, to allow multiple SENDs to be in progress.
2985        Multiple SENDs are served in first come, first served order, so
2986        the TCP will queue those it cannot service immediately.
2987
2988        We have implicitly assumed an asynchronous user interface in
2989        which a SEND later elicits some kind of SIGNAL or
2990        pseudo-interrupt from the serving TCP.  An alternative is to
2991        return a response immediately.  For instance, SENDs might return
2992        immediate local acknowledgment, even if the segment sent had not
2993        been acknowledged by the distant TCP.  We could optimistically
2994        assume eventual success.  If we are wrong, the connection will
2995        close anyway due to the timeout.  In implementations of this
2996        kind (synchronous), there will still be some asynchronous
2997        signals, but these will deal with the connection itself, and not
2998        with specific segments or buffers.
2999
3000        In order for the process to distinguish among error or success
3001        indications for different SENDs, it might be appropriate for the
3002
3003
3004                                                               [Page 47]
3005
3006
3007                                                          September 1981
3008Transmission Control Protocol
3009Functional Specification
3010
3011
3012
3013        buffer address to be returned along with the coded response to
3014        the SEND request.  TCP-to-user signals are discussed below,
3015        indicating the information which should be returned to the
3016        calling process.
3017
3018      Receive
3019
3020        Format:  RECEIVE (local connection name, buffer address, byte
3021        count) -> byte count, urgent flag, push flag
3022
3023        This command allocates a receiving buffer associated with the
3024        specified connection.  If no OPEN precedes this command or the
3025        calling process is not authorized to use this connection, an
3026        error is returned.
3027
3028        In the simplest implementation, control would not return to the
3029        calling program until either the buffer was filled, or some
3030        error occurred, but this scheme is highly subject to deadlocks.
3031        A more sophisticated implementation would permit several
3032        RECEIVEs to be outstanding at once.  These would be filled as
3033        segments arrive.  This strategy permits increased throughput at
3034        the cost of a more elaborate scheme (possibly asynchronous) to
3035        notify the calling program that a PUSH has been seen or a buffer
3036        filled.
3037
3038        If enough data arrive to fill the buffer before a PUSH is seen,
3039        the PUSH flag will not be set in the response to the RECEIVE.
3040        The buffer will be filled with as much data as it can hold.  If
3041        a PUSH is seen before the buffer is filled the buffer will be
3042        returned partially filled and PUSH indicated.
3043
3044        If there is urgent data the user will have been informed as soon
3045        as it arrived via a TCP-to-user signal.  The receiving user
3046        should thus be in "urgent mode".  If the URGENT flag is on,
3047        additional urgent data remains.  If the URGENT flag is off, this
3048        call to RECEIVE has returned all the urgent data, and the user
3049        may now leave "urgent mode".  Note that data following the
3050        urgent pointer (non-urgent data) cannot be delivered to the user
3051        in the same buffer with preceeding urgent data unless the
3052        boundary is clearly marked for the user.
3053
3054        To distinguish among several outstanding RECEIVEs and to take
3055        care of the case that a buffer is not completely filled, the
3056        return code is accompanied by both a buffer pointer and a byte
3057        count indicating the actual length of the data received.
3058
3059        Alternative implementations of RECEIVE might have the TCP
3060
3061
3062
3063[Page 48]                                                               
3064
3065
3066September 1981                                                          
3067                                           Transmission Control Protocol
3068                                                Functional Specification
3069
3070
3071
3072        allocate buffer storage, or the TCP might share a ring buffer
3073        with the user.
3074
3075      Close
3076
3077        Format:  CLOSE (local connection name)
3078
3079        This command causes the connection specified to be closed.  If
3080        the connection is not open or the calling process is not
3081        authorized to use this connection, an error is returned.
3082        Closing connections is intended to be a graceful operation in
3083        the sense that outstanding SENDs will be transmitted (and
3084        retransmitted), as flow control permits, until all have been
3085        serviced.  Thus, it should be acceptable to make several SEND
3086        calls, followed by a CLOSE, and expect all the data to be sent
3087        to the destination.  It should also be clear that users should
3088        continue to RECEIVE on CLOSING connections, since the other side
3089        may be trying to transmit the last of its data.  Thus, CLOSE
3090        means "I have no more to send" but does not mean "I will not
3091        receive any more."  It may happen (if the user level protocol is
3092        not well thought out) that the closing side is unable to get rid
3093        of all its data before timing out.  In this event, CLOSE turns
3094        into ABORT, and the closing TCP gives up.
3095
3096        The user may CLOSE the connection at any time on his own
3097        initiative, or in response to various prompts from the TCP
3098        (e.g., remote close executed, transmission timeout exceeded,
3099        destination inaccessible).
3100
3101        Because closing a connection requires communication with the
3102        foreign TCP, connections may remain in the closing state for a
3103        short time.  Attempts to reopen the connection before the TCP
3104        replies to the CLOSE command will result in error responses.
3105
3106        Close also implies push function.
3107
3108      Status
3109
3110        Format:  STATUS (local connection name) -> status data
3111
3112        This is an implementation dependent user command and could be
3113        excluded without adverse effect.  Information returned would
3114        typically come from the TCB associated with the connection.
3115
3116        This command returns a data block containing the following
3117        information:
3118
3119          local socket,
3120
3121
3122                                                               [Page 49]
3123
3124
3125                                                          September 1981
3126Transmission Control Protocol
3127Functional Specification
3128
3129
3130
3131          foreign socket,
3132          local connection name,
3133          receive window,
3134          send window,
3135          connection state,
3136          number of buffers awaiting acknowledgment,
3137          number of buffers pending receipt,
3138          urgent state,
3139          precedence,
3140          security/compartment,
3141          and transmission timeout.
3142
3143        Depending on the state of the connection, or on the
3144        implementation itself, some of this information may not be
3145        available or meaningful.  If the calling process is not
3146        authorized to use this connection, an error is returned.  This
3147        prevents unauthorized processes from gaining information about a
3148        connection.
3149
3150      Abort
3151
3152        Format:  ABORT (local connection name)
3153
3154        This command causes all pending SENDs and RECEIVES to be
3155        aborted, the TCB to be removed, and a special RESET message to
3156        be sent to the TCP on the other side of the connection.
3157        Depending on the implementation, users may receive abort
3158        indications for each outstanding SEND or RECEIVE, or may simply
3159        receive an ABORT-acknowledgment.
3160
3161    TCP-to-User Messages
3162
3163      It is assumed that the operating system environment provides a
3164      means for the TCP to asynchronously signal the user program.  When
3165      the TCP does signal a user program, certain information is passed
3166      to the user.  Often in the specification the information will be
3167      an error message.  In other cases there will be information
3168      relating to the completion of processing a SEND or RECEIVE or
3169      other user call.
3170
3171      The following information is provided:
3172
3173        Local Connection Name                    Always
3174        Response String                          Always
3175        Buffer Address                           Send & Receive
3176        Byte count (counts bytes received)       Receive
3177        Push flag                                Receive
3178        Urgent flag                              Receive
3179
3180
3181[Page 50]                                                               
3182
3183
3184September 1981                                                          
3185                                           Transmission Control Protocol
3186                                                Functional Specification
3187
3188
3189
3190  TCP/Lower-Level Interface
3191
3192    The TCP calls on a lower level protocol module to actually send and
3193    receive information over a network.  One case is that of the ARPA
3194    internetwork system where the lower level module is the Internet
3195    Protocol (IP) [2].
3196
3197    If the lower level protocol is IP it provides arguments for a type
3198    of service and for a time to live.  TCP uses the following settings
3199    for these parameters:
3200
3201      Type of Service = Precedence: routine, Delay: normal, Throughput:
3202      normal, Reliability: normal; or 00000000.
3203
3204      Time to Live    = one minute, or 00111100.
3205
3206        Note that the assumed maximum segment lifetime is two minutes.
3207        Here we explicitly ask that a segment be destroyed if it cannot
3208        be delivered by the internet system within one minute.
3209
3210    If the lower level is IP (or other protocol that provides this
3211    feature) and source routing is used, the interface must allow the
3212    route information to be communicated.  This is especially important
3213    so that the source and destination addresses used in the TCP
3214    checksum be the originating source and ultimate destination. It is
3215    also important to preserve the return route to answer connection
3216    requests.
3217
3218    Any lower level protocol will have to provide the source address,
3219    destination address, and protocol fields, and some way to determine
3220    the "TCP length", both to provide the functional equivlent service
3221    of IP and to be used in the TCP checksum.
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240                                                               [Page 51]
3241
3242
3243                                                          September 1981
3244Transmission Control Protocol
3245Functional Specification
3246
3247
3248
32493.9.  Event Processing
3250
3251  The processing depicted in this section is an example of one possible
3252  implementation.  Other implementations may have slightly different
3253  processing sequences, but they should differ from those in this
3254  section only in detail, not in substance.
3255
3256  The activity of the TCP can be characterized as responding to events.
3257  The events that occur can be cast into three categories:  user calls,
3258  arriving segments, and timeouts.  This section describes the
3259  processing the TCP does in response to each of the events.  In many
3260  cases the processing required depends on the state of the connection.
3261
3262    Events that occur:
3263
3264      User Calls
3265
3266        OPEN
3267        SEND
3268        RECEIVE
3269        CLOSE
3270        ABORT
3271        STATUS
3272
3273      Arriving Segments
3274
3275        SEGMENT ARRIVES
3276
3277      Timeouts
3278
3279        USER TIMEOUT
3280        RETRANSMISSION TIMEOUT
3281        TIME-WAIT TIMEOUT
3282
3283  The model of the TCP/user interface is that user commands receive an
3284  immediate return and possibly a delayed response via an event or
3285  pseudo interrupt.  In the following descriptions, the term "signal"
3286  means cause a delayed response.
3287
3288  Error responses are given as character strings.  For example, user
3289  commands referencing connections that do not exist receive "error:
3290  connection not open".
3291
3292  Please note in the following that all arithmetic on sequence numbers,
3293  acknowledgment numbers, windows, et cetera, is modulo 2**32 the size
3294  of the sequence number space.  Also note that "=<" means less than or
3295  equal to (modulo 2**32).
3296
3297
3298
3299[Page 52]                                                               
3300
3301
3302September 1981                                                          
3303                                           Transmission Control Protocol
3304                                                Functional Specification
3305
3306
3307
3308  A natural way to think about processing incoming segments is to
3309  imagine that they are first tested for proper sequence number (i.e.,
3310  that their contents lie in the range of the expected "receive window"
3311  in the sequence number space) and then that they are generally queued
3312  and processed in sequence number order.
3313
3314  When a segment overlaps other already received segments we reconstruct
3315  the segment to contain just the new data, and adjust the header fields
3316  to be consistent.
3317
3318  Note that if no state change is mentioned the TCP stays in the same
3319  state.
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358                                                               [Page 53]
3359
3360
3361                                                          September 1981
3362Transmission Control Protocol
3363Functional Specification
3364                                                               OPEN Call
3365
3366
3367
3368  OPEN Call
3369
3370    CLOSED STATE (i.e., TCB does not exist)
3371
3372      Create a new transmission control block (TCB) to hold connection
3373      state information.  Fill in local socket identifier, foreign
3374      socket, precedence, security/compartment, and user timeout
3375      information.  Note that some parts of the foreign socket may be
3376      unspecified in a passive OPEN and are to be filled in by the
3377      parameters of the incoming SYN segment.  Verify the security and
3378      precedence requested are allowed for this user, if not return
3379      "error:  precedence not allowed" or "error:  security/compartment
3380      not allowed."  If passive enter the LISTEN state and return.  If
3381      active and the foreign socket is unspecified, return "error:
3382      foreign socket unspecified"; if active and the foreign socket is
3383      specified, issue a SYN segment.  An initial send sequence number
3384      (ISS) is selected.  A SYN segment of the form <SEQ=ISS><CTL=SYN>
3385      is sent.  Set SND.UNA to ISS, SND.NXT to ISS+1, enter SYN-SENT
3386      state, and return.
3387
3388      If the caller does not have access to the local socket specified,
3389      return "error:  connection illegal for this process".  If there is
3390      no room to create a new connection, return "error:  insufficient
3391      resources".
3392
3393    LISTEN STATE
3394
3395      If active and the foreign socket is specified, then change the
3396      connection from passive to active, select an ISS.  Send a SYN
3397      segment, set SND.UNA to ISS, SND.NXT to ISS+1.  Enter SYN-SENT
3398      state.  Data associated with SEND may be sent with SYN segment or
3399      queued for transmission after entering ESTABLISHED state.  The
3400      urgent bit if requested in the command must be sent with the data
3401      segments sent as a result of this command.  If there is no room to
3402      queue the request, respond with "error:  insufficient resources".
3403      If Foreign socket was not specified, then return "error:  foreign
3404      socket unspecified".
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417[Page 54]                                                               
3418
3419
3420September 1981                                                          
3421                                           Transmission Control Protocol
3422                                                Functional Specification
3423OPEN Call
3424
3425
3426
3427    SYN-SENT STATE
3428    SYN-RECEIVED STATE
3429    ESTABLISHED STATE
3430    FIN-WAIT-1 STATE
3431    FIN-WAIT-2 STATE
3432    CLOSE-WAIT STATE
3433    CLOSING STATE
3434    LAST-ACK STATE
3435    TIME-WAIT STATE
3436
3437      Return "error:  connection already exists".
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476                                                               [Page 55]
3477
3478
3479                                                          September 1981
3480Transmission Control Protocol
3481Functional Specification
3482                                                               SEND Call
3483
3484
3485
3486  SEND Call
3487
3488    CLOSED STATE (i.e., TCB does not exist)
3489
3490      If the user does not have access to such a connection, then return
3491      "error:  connection illegal for this process".
3492
3493      Otherwise, return "error:  connection does not exist".
3494
3495    LISTEN STATE
3496
3497      If the foreign socket is specified, then change the connection
3498      from passive to active, select an ISS.  Send a SYN segment, set
3499      SND.UNA to ISS, SND.NXT to ISS+1.  Enter SYN-SENT state.  Data
3500      associated with SEND may be sent with SYN segment or queued for
3501      transmission after entering ESTABLISHED state.  The urgent bit if
3502      requested in the command must be sent with the data segments sent
3503      as a result of this command.  If there is no room to queue the
3504      request, respond with "error:  insufficient resources".  If
3505      Foreign socket was not specified, then return "error:  foreign
3506      socket unspecified".
3507
3508    SYN-SENT STATE
3509    SYN-RECEIVED STATE
3510
3511      Queue the data for transmission after entering ESTABLISHED state.
3512      If no space to queue, respond with "error:  insufficient
3513      resources".
3514
3515    ESTABLISHED STATE
3516    CLOSE-WAIT STATE
3517
3518      Segmentize the buffer and send it with a piggybacked
3519      acknowledgment (acknowledgment value = RCV.NXT).  If there is
3520      insufficient space to remember this buffer, simply return "error:
3521      insufficient resources".
3522
3523      If the urgent flag is set, then SND.UP <- SND.NXT-1 and set the
3524      urgent pointer in the outgoing segments.
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535[Page 56]                                                               
3536
3537
3538September 1981                                                          
3539                                           Transmission Control Protocol
3540                                                Functional Specification
3541SEND Call
3542
3543
3544
3545    FIN-WAIT-1 STATE
3546    FIN-WAIT-2 STATE
3547    CLOSING STATE
3548    LAST-ACK STATE
3549    TIME-WAIT STATE
3550
3551      Return "error:  connection closing" and do not service request.
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594                                                               [Page 57]
3595
3596
3597                                                          September 1981
3598Transmission Control Protocol
3599Functional Specification
3600                                                            RECEIVE Call
3601
3602
3603
3604  RECEIVE Call
3605
3606    CLOSED STATE (i.e., TCB does not exist)
3607
3608      If the user does not have access to such a connection, return
3609      "error:  connection illegal for this process".
3610
3611      Otherwise return "error:  connection does not exist".
3612
3613    LISTEN STATE
3614    SYN-SENT STATE
3615    SYN-RECEIVED STATE
3616
3617      Queue for processing after entering ESTABLISHED state.  If there
3618      is no room to queue this request, respond with "error:
3619      insufficient resources".
3620
3621    ESTABLISHED STATE
3622    FIN-WAIT-1 STATE
3623    FIN-WAIT-2 STATE
3624
3625      If insufficient incoming segments are queued to satisfy the
3626      request, queue the request.  If there is no queue space to
3627      remember the RECEIVE, respond with "error:  insufficient
3628      resources".
3629
3630      Reassemble queued incoming segments into receive buffer and return
3631      to user.  Mark "push seen" (PUSH) if this is the case.
3632
3633      If RCV.UP is in advance of the data currently being passed to the
3634      user notify the user of the presence of urgent data.
3635
3636      When the TCP takes responsibility for delivering data to the user
3637      that fact must be communicated to the sender via an
3638      acknowledgment.  The formation of such an acknowledgment is
3639      described below in the discussion of processing an incoming
3640      segment.
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653[Page 58]                                                               
3654
3655
3656September 1981                                                          
3657                                           Transmission Control Protocol
3658                                                Functional Specification
3659RECEIVE Call
3660
3661
3662
3663    CLOSE-WAIT STATE
3664
3665      Since the remote side has already sent FIN, RECEIVEs must be
3666      satisfied by text already on hand, but not yet delivered to the
3667      user.  If no text is awaiting delivery, the RECEIVE will get a
3668      "error:  connection closing" response.  Otherwise, any remaining
3669      text can be used to satisfy the RECEIVE.
3670
3671    CLOSING STATE
3672    LAST-ACK STATE
3673    TIME-WAIT STATE
3674
3675      Return "error:  connection closing".
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712                                                               [Page 59]
3713
3714
3715                                                          September 1981
3716Transmission Control Protocol
3717Functional Specification
3718                                                              CLOSE Call
3719
3720
3721
3722  CLOSE Call
3723
3724    CLOSED STATE (i.e., TCB does not exist)
3725
3726      If the user does not have access to such a connection, return
3727      "error:  connection illegal for this process".
3728
3729      Otherwise, return "error:  connection does not exist".
3730
3731    LISTEN STATE
3732
3733      Any outstanding RECEIVEs are returned with "error:  closing"
3734      responses.  Delete TCB, enter CLOSED state, and return.
3735
3736    SYN-SENT STATE
3737
3738      Delete the TCB and return "error:  closing" responses to any
3739      queued SENDs, or RECEIVEs.
3740
3741    SYN-RECEIVED STATE
3742
3743      If no SENDs have been issued and there is no pending data to send,
3744      then form a FIN segment and send it, and enter FIN-WAIT-1 state;
3745      otherwise queue for processing after entering ESTABLISHED state.
3746
3747    ESTABLISHED STATE
3748
3749      Queue this until all preceding SENDs have been segmentized, then
3750      form a FIN segment and send it.  In any case, enter FIN-WAIT-1
3751      state.
3752
3753    FIN-WAIT-1 STATE
3754    FIN-WAIT-2 STATE
3755
3756      Strictly speaking, this is an error and should receive a "error:
3757      connection closing" response.  An "ok" response would be
3758      acceptable, too, as long as a second FIN is not emitted (the first
3759      FIN may be retransmitted though).
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771[Page 60]                                                               
3772
3773
3774September 1981                                                          
3775                                           Transmission Control Protocol
3776                                                Functional Specification
3777CLOSE Call
3778
3779
3780
3781    CLOSE-WAIT STATE
3782
3783      Queue this request until all preceding SENDs have been
3784      segmentized; then send a FIN segment, enter CLOSING state.
3785
3786    CLOSING STATE
3787    LAST-ACK STATE
3788    TIME-WAIT STATE
3789
3790      Respond with "error:  connection closing".
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830                                                               [Page 61]
3831
3832
3833                                                          September 1981
3834Transmission Control Protocol
3835Functional Specification
3836                                                              ABORT Call
3837
3838
3839
3840  ABORT Call
3841
3842    CLOSED STATE (i.e., TCB does not exist)
3843
3844      If the user should not have access to such a connection, return
3845      "error:  connection illegal for this process".
3846
3847      Otherwise return "error:  connection does not exist".
3848
3849    LISTEN STATE
3850
3851      Any outstanding RECEIVEs should be returned with "error:
3852      connection reset" responses.  Delete TCB, enter CLOSED state, and
3853      return.
3854
3855    SYN-SENT STATE
3856
3857      All queued SENDs and RECEIVEs should be given "connection reset"
3858      notification, delete the TCB, enter CLOSED state, and return.
3859
3860    SYN-RECEIVED STATE
3861    ESTABLISHED STATE
3862    FIN-WAIT-1 STATE
3863    FIN-WAIT-2 STATE
3864    CLOSE-WAIT STATE
3865
3866      Send a reset segment:
3867
3868        <SEQ=SND.NXT><CTL=RST>
3869
3870      All queued SENDs and RECEIVEs should be given "connection reset"
3871      notification; all segments queued for transmission (except for the
3872      RST formed above) or retransmission should be flushed, delete the
3873      TCB, enter CLOSED state, and return.
3874
3875    CLOSING STATE
3876    LAST-ACK STATE
3877    TIME-WAIT STATE
3878
3879      Respond with "ok" and delete the TCB, enter CLOSED state, and
3880      return.
3881
3882
3883
3884
3885
3886
3887
3888
3889[Page 62]                                                               
3890
3891
3892September 1981                                                          
3893                                           Transmission Control Protocol
3894                                                Functional Specification
3895STATUS Call
3896
3897
3898
3899  STATUS Call
3900
3901    CLOSED STATE (i.e., TCB does not exist)
3902
3903      If the user should not have access to such a connection, return
3904      "error:  connection illegal for this process".
3905
3906      Otherwise return "error:  connection does not exist".
3907
3908    LISTEN STATE
3909
3910      Return "state = LISTEN", and the TCB pointer.
3911
3912    SYN-SENT STATE
3913
3914      Return "state = SYN-SENT", and the TCB pointer.
3915
3916    SYN-RECEIVED STATE
3917
3918      Return "state = SYN-RECEIVED", and the TCB pointer.
3919
3920    ESTABLISHED STATE
3921
3922      Return "state = ESTABLISHED", and the TCB pointer.
3923
3924    FIN-WAIT-1 STATE
3925
3926      Return "state = FIN-WAIT-1", and the TCB pointer.
3927
3928    FIN-WAIT-2 STATE
3929
3930      Return "state = FIN-WAIT-2", and the TCB pointer.
3931
3932    CLOSE-WAIT STATE
3933
3934      Return "state = CLOSE-WAIT", and the TCB pointer.
3935
3936    CLOSING STATE
3937
3938      Return "state = CLOSING", and the TCB pointer.
3939
3940    LAST-ACK STATE
3941
3942      Return "state = LAST-ACK", and the TCB pointer.
3943
3944
3945
3946
3947
3948                                                               [Page 63]
3949
3950
3951                                                          September 1981
3952Transmission Control Protocol
3953Functional Specification
3954                                                             STATUS Call
3955
3956
3957
3958    TIME-WAIT STATE
3959
3960      Return "state = TIME-WAIT", and the TCB pointer.
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007[Page 64]                                                               
4008
4009
4010September 1981                                                          
4011                                           Transmission Control Protocol
4012                                                Functional Specification
4013SEGMENT ARRIVES
4014
4015
4016
4017  SEGMENT ARRIVES
4018
4019    If the state is CLOSED (i.e., TCB does not exist) then
4020
4021      all data in the incoming segment is discarded.  An incoming
4022      segment containing a RST is discarded.  An incoming segment not
4023      containing a RST causes a RST to be sent in response.  The
4024      acknowledgment and sequence field values are selected to make the
4025      reset sequence acceptable to the TCP that sent the offending
4026      segment.
4027
4028      If the ACK bit is off, sequence number zero is used,
4029
4030        <SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>
4031
4032      If the ACK bit is on,
4033
4034        <SEQ=SEG.ACK><CTL=RST>
4035
4036      Return.
4037
4038    If the state is LISTEN then
4039
4040      first check for an RST
4041
4042        An incoming RST should be ignored.  Return.
4043
4044      second check for an ACK
4045
4046        Any acknowledgment is bad if it arrives on a connection still in
4047        the LISTEN state.  An acceptable reset segment should be formed
4048        for any arriving ACK-bearing segment.  The RST should be
4049        formatted as follows:
4050
4051          <SEQ=SEG.ACK><CTL=RST>
4052
4053        Return.
4054
4055      third check for a SYN
4056
4057        If the SYN bit is set, check the security.  If the
4058        security/compartment on the incoming segment does not exactly
4059        match the security/compartment in the TCB then send a reset and
4060        return.
4061
4062          <SEQ=SEG.ACK><CTL=RST>
4063
4064
4065
4066                                                               [Page 65]
4067
4068
4069                                                          September 1981
4070Transmission Control Protocol
4071Functional Specification
4072                                                         SEGMENT ARRIVES
4073
4074
4075
4076        If the SEG.PRC is greater than the TCB.PRC then if allowed by
4077        the user and the system set TCB.PRC<-SEG.PRC, if not allowed
4078        send a reset and return.
4079
4080          <SEQ=SEG.ACK><CTL=RST>
4081
4082        If the SEG.PRC is less than the TCB.PRC then continue.
4083
4084        Set RCV.NXT to SEG.SEQ+1, IRS is set to SEG.SEQ and any other
4085        control or text should be queued for processing later.  ISS
4086        should be selected and a SYN segment sent of the form:
4087
4088          <SEQ=ISS><ACK=RCV.NXT><CTL=SYN,ACK>
4089
4090        SND.NXT is set to ISS+1 and SND.UNA to ISS.  The connection
4091        state should be changed to SYN-RECEIVED.  Note that any other
4092        incoming control or data (combined with SYN) will be processed
4093        in the SYN-RECEIVED state, but processing of SYN and ACK should
4094        not be repeated.  If the listen was not fully specified (i.e.,
4095        the foreign socket was not fully specified), then the
4096        unspecified fields should be filled in now.
4097
4098      fourth other text or control
4099
4100        Any other control or text-bearing segment (not containing SYN)
4101        must have an ACK and thus would be discarded by the ACK
4102        processing.  An incoming RST segment could not be valid, since
4103        it could not have been sent in response to anything sent by this
4104        incarnation of the connection.  So you are unlikely to get here,
4105        but if you do, drop the segment, and return.
4106
4107    If the state is SYN-SENT then
4108
4109      first check the ACK bit
4110
4111        If the ACK bit is set
4112
4113          If SEG.ACK =< ISS, or SEG.ACK > SND.NXT, send a reset (unless
4114          the RST bit is set, if so drop the segment and return)
4115
4116            <SEQ=SEG.ACK><CTL=RST>
4117
4118          and discard the segment.  Return.
4119
4120          If SND.UNA =< SEG.ACK =< SND.NXT then the ACK is acceptable.
4121
4122      second check the RST bit
4123
4124
4125[Page 66]                                                               
4126
4127
4128September 1981                                                          
4129                                           Transmission Control Protocol
4130                                                Functional Specification
4131SEGMENT ARRIVES
4132
4133
4134
4135        If the RST bit is set
4136
4137          If the ACK was acceptable then signal the user "error:
4138          connection reset", drop the segment, enter CLOSED state,
4139          delete TCB, and return.  Otherwise (no ACK) drop the segment
4140          and return.
4141
4142      third check the security and precedence
4143
4144        If the security/compartment in the segment does not exactly
4145        match the security/compartment in the TCB, send a reset
4146
4147          If there is an ACK
4148
4149            <SEQ=SEG.ACK><CTL=RST>
4150
4151          Otherwise
4152
4153            <SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>
4154
4155        If there is an ACK
4156
4157          The precedence in the segment must match the precedence in the
4158          TCB, if not, send a reset
4159
4160            <SEQ=SEG.ACK><CTL=RST>
4161
4162        If there is no ACK
4163
4164          If the precedence in the segment is higher than the precedence
4165          in the TCB then if allowed by the user and the system raise
4166          the precedence in the TCB to that in the segment, if not
4167          allowed to raise the prec then send a reset.
4168
4169            <SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>
4170
4171          If the precedence in the segment is lower than the precedence
4172          in the TCB continue.
4173
4174        If a reset was sent, discard the segment and return.
4175
4176      fourth check the SYN bit
4177
4178        This step should be reached only if the ACK is ok, or there is
4179        no ACK, and it the segment did not contain a RST.
4180
4181        If the SYN bit is on and the security/compartment and precedence
4182
4183
4184                                                               [Page 67]
4185
4186
4187                                                          September 1981
4188Transmission Control Protocol
4189Functional Specification
4190                                                         SEGMENT ARRIVES
4191
4192
4193
4194        are acceptable then, RCV.NXT is set to SEG.SEQ+1, IRS is set to
4195        SEG.SEQ.  SND.UNA should be advanced to equal SEG.ACK (if there
4196        is an ACK), and any segments on the retransmission queue which
4197        are thereby acknowledged should be removed.
4198
4199        If SND.UNA > ISS (our SYN has been ACKed), change the connection
4200        state to ESTABLISHED, form an ACK segment
4201
4202          <SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>
4203
4204        and send it.  Data or controls which were queued for
4205        transmission may be included.  If there are other controls or
4206        text in the segment then continue processing at the sixth step
4207        below where the URG bit is checked, otherwise return.
4208
4209        Otherwise enter SYN-RECEIVED, form a SYN,ACK segment
4210
4211          <SEQ=ISS><ACK=RCV.NXT><CTL=SYN,ACK>
4212
4213        and send it.  If there are other controls or text in the
4214        segment, queue them for processing after the ESTABLISHED state
4215        has been reached, return.
4216
4217      fifth, if neither of the SYN or RST bits is set then drop the
4218      segment and return.
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243[Page 68]                                                               
4244
4245
4246September 1981                                                          
4247                                           Transmission Control Protocol
4248                                                Functional Specification
4249SEGMENT ARRIVES
4250
4251
4252
4253    Otherwise,
4254
4255    first check sequence number
4256
4257      SYN-RECEIVED STATE
4258      ESTABLISHED STATE
4259      FIN-WAIT-1 STATE
4260      FIN-WAIT-2 STATE
4261      CLOSE-WAIT STATE
4262      CLOSING STATE
4263      LAST-ACK STATE
4264      TIME-WAIT STATE
4265
4266        Segments are processed in sequence.  Initial tests on arrival
4267        are used to discard old duplicates, but further processing is
4268        done in SEG.SEQ order.  If a segment's contents straddle the
4269        boundary between old and new, only the new parts should be
4270        processed.
4271
4272        There are four cases for the acceptability test for an incoming
4273        segment:
4274
4275        Segment Receive  Test
4276        Length  Window
4277        ------- -------  -------------------------------------------
4278
4279           0       0     SEG.SEQ = RCV.NXT
4280
4281           0      >0     RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND
4282
4283          >0       0     not acceptable
4284
4285          >0      >0     RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND
4286                      or RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND
4287
4288        If the RCV.WND is zero, no segments will be acceptable, but
4289        special allowance should be made to accept valid ACKs, URGs and
4290        RSTs.
4291
4292        If an incoming segment is not acceptable, an acknowledgment
4293        should be sent in reply (unless the RST bit is set, if so drop
4294        the segment and return):
4295
4296          <SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>
4297
4298        After sending the acknowledgment, drop the unacceptable segment
4299        and return.
4300
4301
4302                                                               [Page 69]
4303
4304
4305                                                          September 1981
4306Transmission Control Protocol
4307Functional Specification
4308                                                         SEGMENT ARRIVES
4309
4310
4311
4312        In the following it is assumed that the segment is the idealized
4313        segment that begins at RCV.NXT and does not exceed the window.
4314        One could tailor actual segments to fit this assumption by
4315        trimming off any portions that lie outside the window (including
4316        SYN and FIN), and only processing further if the segment then
4317        begins at RCV.NXT.  Segments with higher begining sequence
4318        numbers may be held for later processing.
4319
4320    second check the RST bit,
4321
4322      SYN-RECEIVED STATE
4323
4324        If the RST bit is set
4325
4326          If this connection was initiated with a passive OPEN (i.e.,
4327          came from the LISTEN state), then return this connection to
4328          LISTEN state and return.  The user need not be informed.  If
4329          this connection was initiated with an active OPEN (i.e., came
4330          from SYN-SENT state) then the connection was refused, signal
4331          the user "connection refused".  In either case, all segments
4332          on the retransmission queue should be removed.  And in the
4333          active OPEN case, enter the CLOSED state and delete the TCB,
4334          and return.
4335
4336      ESTABLISHED
4337      FIN-WAIT-1
4338      FIN-WAIT-2
4339      CLOSE-WAIT
4340
4341        If the RST bit is set then, any outstanding RECEIVEs and SEND
4342        should receive "reset" responses.  All segment queues should be
4343        flushed.  Users should also receive an unsolicited general
4344        "connection reset" signal.  Enter the CLOSED state, delete the
4345        TCB, and return.
4346
4347      CLOSING STATE
4348      LAST-ACK STATE
4349      TIME-WAIT
4350
4351        If the RST bit is set then, enter the CLOSED state, delete the
4352        TCB, and return.
4353
4354
4355
4356
4357
4358
4359
4360
4361[Page 70]                                                               
4362
4363
4364September 1981                                                          
4365                                           Transmission Control Protocol
4366                                                Functional Specification
4367SEGMENT ARRIVES
4368
4369
4370
4371    third check security and precedence
4372
4373      SYN-RECEIVED
4374
4375        If the security/compartment and precedence in the segment do not
4376        exactly match the security/compartment and precedence in the TCB
4377        then send a reset, and return.
4378
4379      ESTABLISHED STATE
4380
4381        If the security/compartment and precedence in the segment do not
4382        exactly match the security/compartment and precedence in the TCB
4383        then send a reset, any outstanding RECEIVEs and SEND should
4384        receive "reset" responses.  All segment queues should be
4385        flushed.  Users should also receive an unsolicited general
4386        "connection reset" signal.  Enter the CLOSED state, delete the
4387        TCB, and return.
4388
4389      Note this check is placed following the sequence check to prevent
4390      a segment from an old connection between these ports with a
4391      different security or precedence from causing an abort of the
4392      current connection.
4393
4394    fourth, check the SYN bit,
4395
4396      SYN-RECEIVED
4397      ESTABLISHED STATE
4398      FIN-WAIT STATE-1
4399      FIN-WAIT STATE-2
4400      CLOSE-WAIT STATE
4401      CLOSING STATE
4402      LAST-ACK STATE
4403      TIME-WAIT STATE
4404
4405        If the SYN is in the window it is an error, send a reset, any
4406        outstanding RECEIVEs and SEND should receive "reset" responses,
4407        all segment queues should be flushed, the user should also
4408        receive an unsolicited general "connection reset" signal, enter
4409        the CLOSED state, delete the TCB, and return.
4410
4411        If the SYN is not in the window this step would not be reached
4412        and an ack would have been sent in the first step (sequence
4413        number check).
4414
4415
4416
4417
4418
4419
4420                                                               [Page 71]
4421
4422
4423                                                          September 1981
4424Transmission Control Protocol
4425Functional Specification
4426                                                         SEGMENT ARRIVES
4427
4428
4429
4430    fifth check the ACK field,
4431
4432      if the ACK bit is off drop the segment and return
4433
4434      if the ACK bit is on
4435
4436        SYN-RECEIVED STATE
4437
4438          If SND.UNA =< SEG.ACK =< SND.NXT then enter ESTABLISHED state
4439          and continue processing.
4440
4441            If the segment acknowledgment is not acceptable, form a
4442            reset segment,
4443
4444              <SEQ=SEG.ACK><CTL=RST>
4445
4446            and send it.
4447
4448        ESTABLISHED STATE
4449
4450          If SND.UNA < SEG.ACK =< SND.NXT then, set SND.UNA <- SEG.ACK.
4451          Any segments on the retransmission queue which are thereby
4452          entirely acknowledged are removed.  Users should receive
4453          positive acknowledgments for buffers which have been SENT and
4454          fully acknowledged (i.e., SEND buffer should be returned with
4455          "ok" response).  If the ACK is a duplicate
4456          (SEG.ACK < SND.UNA), it can be ignored.  If the ACK acks
4457          something not yet sent (SEG.ACK > SND.NXT) then send an ACK,
4458          drop the segment, and return.
4459
4460          If SND.UNA < SEG.ACK =< SND.NXT, the send window should be
4461          updated.  If (SND.WL1 < SEG.SEQ or (SND.WL1 = SEG.SEQ and
4462          SND.WL2 =< SEG.ACK)), set SND.WND <- SEG.WND, set
4463          SND.WL1 <- SEG.SEQ, and set SND.WL2 <- SEG.ACK.
4464
4465          Note that SND.WND is an offset from SND.UNA, that SND.WL1
4466          records the sequence number of the last segment used to update
4467          SND.WND, and that SND.WL2 records the acknowledgment number of
4468          the last segment used to update SND.WND.  The check here
4469          prevents using old segments to update the window.
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479[Page 72]                                                               
4480
4481
4482September 1981                                                          
4483                                           Transmission Control Protocol
4484                                                Functional Specification
4485SEGMENT ARRIVES
4486
4487
4488
4489        FIN-WAIT-1 STATE
4490
4491          In addition to the processing for the ESTABLISHED state, if
4492          our FIN is now acknowledged then enter FIN-WAIT-2 and continue
4493          processing in that state.
4494
4495        FIN-WAIT-2 STATE
4496
4497          In addition to the processing for the ESTABLISHED state, if
4498          the retransmission queue is empty, the user's CLOSE can be
4499          acknowledged ("ok") but do not delete the TCB.
4500
4501        CLOSE-WAIT STATE
4502
4503          Do the same processing as for the ESTABLISHED state.
4504
4505        CLOSING STATE
4506
4507          In addition to the processing for the ESTABLISHED state, if
4508          the ACK acknowledges our FIN then enter the TIME-WAIT state,
4509          otherwise ignore the segment.
4510
4511        LAST-ACK STATE
4512
4513          The only thing that can arrive in this state is an
4514          acknowledgment of our FIN.  If our FIN is now acknowledged,
4515          delete the TCB, enter the CLOSED state, and return.
4516
4517        TIME-WAIT STATE
4518
4519          The only thing that can arrive in this state is a
4520          retransmission of the remote FIN.  Acknowledge it, and restart
4521          the 2 MSL timeout.
4522
4523    sixth, check the URG bit,
4524
4525      ESTABLISHED STATE
4526      FIN-WAIT-1 STATE
4527      FIN-WAIT-2 STATE
4528
4529        If the URG bit is set, RCV.UP <- max(RCV.UP,SEG.UP), and signal
4530        the user that the remote side has urgent data if the urgent
4531        pointer (RCV.UP) is in advance of the data consumed.  If the
4532        user has already been signaled (or is still in the "urgent
4533        mode") for this continuous sequence of urgent data, do not
4534        signal the user again.
4535
4536
4537
4538                                                               [Page 73]
4539
4540
4541                                                          September 1981
4542Transmission Control Protocol
4543Functional Specification
4544                                                         SEGMENT ARRIVES
4545
4546
4547
4548      CLOSE-WAIT STATE
4549      CLOSING STATE
4550      LAST-ACK STATE
4551      TIME-WAIT
4552
4553        This should not occur, since a FIN has been received from the
4554        remote side.  Ignore the URG.
4555
4556    seventh, process the segment text,
4557
4558      ESTABLISHED STATE
4559      FIN-WAIT-1 STATE
4560      FIN-WAIT-2 STATE
4561
4562        Once in the ESTABLISHED state, it is possible to deliver segment
4563        text to user RECEIVE buffers.  Text from segments can be moved
4564        into buffers until either the buffer is full or the segment is
4565        empty.  If the segment empties and carries an PUSH flag, then
4566        the user is informed, when the buffer is returned, that a PUSH
4567        has been received.
4568
4569        When the TCP takes responsibility for delivering the data to the
4570        user it must also acknowledge the receipt of the data.
4571
4572        Once the TCP takes responsibility for the data it advances
4573        RCV.NXT over the data accepted, and adjusts RCV.WND as
4574        apporopriate to the current buffer availability.  The total of
4575        RCV.NXT and RCV.WND should not be reduced.
4576
4577        Please note the window management suggestions in section 3.7.
4578
4579        Send an acknowledgment of the form:
4580
4581          <SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>
4582
4583        This acknowledgment should be piggybacked on a segment being
4584        transmitted if possible without incurring undue delay.
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597[Page 74]                                                               
4598
4599
4600September 1981                                                          
4601                                           Transmission Control Protocol
4602                                                Functional Specification
4603SEGMENT ARRIVES
4604
4605
4606
4607      CLOSE-WAIT STATE
4608      CLOSING STATE
4609      LAST-ACK STATE
4610      TIME-WAIT STATE
4611
4612        This should not occur, since a FIN has been received from the
4613        remote side.  Ignore the segment text.
4614
4615    eighth, check the FIN bit,
4616
4617      Do not process the FIN if the state is CLOSED, LISTEN or SYN-SENT
4618      since the SEG.SEQ cannot be validated; drop the segment and
4619      return.
4620
4621      If the FIN bit is set, signal the user "connection closing" and
4622      return any pending RECEIVEs with same message, advance RCV.NXT
4623      over the FIN, and send an acknowledgment for the FIN.  Note that
4624      FIN implies PUSH for any segment text not yet delivered to the
4625      user.
4626
4627        SYN-RECEIVED STATE
4628        ESTABLISHED STATE
4629
4630          Enter the CLOSE-WAIT state.
4631
4632        FIN-WAIT-1 STATE
4633
4634          If our FIN has been ACKed (perhaps in this segment), then
4635          enter TIME-WAIT, start the time-wait timer, turn off the other
4636          timers; otherwise enter the CLOSING state.
4637
4638        FIN-WAIT-2 STATE
4639
4640          Enter the TIME-WAIT state.  Start the time-wait timer, turn
4641          off the other timers.
4642
4643        CLOSE-WAIT STATE
4644
4645          Remain in the CLOSE-WAIT state.
4646
4647        CLOSING STATE
4648
4649          Remain in the CLOSING state.
4650
4651        LAST-ACK STATE
4652
4653          Remain in the LAST-ACK state.
4654
4655
4656                                                               [Page 75]
4657
4658
4659                                                          September 1981
4660Transmission Control Protocol
4661Functional Specification
4662                                                         SEGMENT ARRIVES
4663
4664
4665
4666        TIME-WAIT STATE
4667
4668          Remain in the TIME-WAIT state.  Restart the 2 MSL time-wait
4669          timeout.
4670
4671    and return.
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715[Page 76]                                                               
4716
4717
4718September 1981                                                          
4719                                           Transmission Control Protocol
4720                                                Functional Specification
4721USER TIMEOUT
4722
4723
4724
4725  USER TIMEOUT
4726
4727    For any state if the user timeout expires, flush all queues, signal
4728    the user "error:  connection aborted due to user timeout" in general
4729    and for any outstanding calls, delete the TCB, enter the CLOSED
4730    state and return.
4731
4732  RETRANSMISSION TIMEOUT
4733
4734    For any state if the retransmission timeout expires on a segment in
4735    the retransmission queue, send the segment at the front of the
4736    retransmission queue again, reinitialize the retransmission timer,
4737    and return.
4738
4739  TIME-WAIT TIMEOUT
4740
4741    If the time-wait timeout expires on a connection delete the TCB,
4742    enter the CLOSED state and return.
4743
4744   
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774                                                               [Page 77]
4775
4776
4777                                                          September 1981
4778Transmission Control Protocol
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833[Page 78]                                                               
4834
4835
4836September 1981                                                          
4837                                           Transmission Control Protocol
4838
4839
4840
4841                                GLOSSARY
4842
4843
4844
48451822
4846          BBN Report 1822, "The Specification of the Interconnection of
4847          a Host and an IMP".  The specification of interface between a
4848          host and the ARPANET.
4849
4850ACK
4851          A control bit (acknowledge) occupying no sequence space, which
4852          indicates that the acknowledgment field of this segment
4853          specifies the next sequence number the sender of this segment
4854          is expecting to receive, hence acknowledging receipt of all
4855          previous sequence numbers.
4856
4857ARPANET message
4858          The unit of transmission between a host and an IMP in the
4859          ARPANET.  The maximum size is about 1012 octets (8096 bits).
4860
4861ARPANET packet
4862          A unit of transmission used internally in the ARPANET between
4863          IMPs.  The maximum size is about 126 octets (1008 bits).
4864
4865connection
4866          A logical communication path identified by a pair of sockets.
4867
4868datagram
4869          A message sent in a packet switched computer communications
4870          network.
4871
4872Destination Address
4873          The destination address, usually the network and host
4874          identifiers.
4875
4876FIN
4877          A control bit (finis) occupying one sequence number, which
4878          indicates that the sender will send no more data or control
4879          occupying sequence space.
4880
4881fragment
4882          A portion of a logical unit of data, in particular an internet
4883          fragment is a portion of an internet datagram.
4884
4885FTP
4886          A file transfer protocol.
4887
4888
4889
4890
4891
4892                                                               [Page 79]
4893
4894
4895                                                          September 1981
4896Transmission Control Protocol
4897Glossary
4898
4899
4900
4901header
4902          Control information at the beginning of a message, segment,
4903          fragment, packet or block of data.
4904
4905host
4906          A computer.  In particular a source or destination of messages
4907          from the point of view of the communication network.
4908
4909Identification
4910          An Internet Protocol field.  This identifying value assigned
4911          by the sender aids in assembling the fragments of a datagram.
4912
4913IMP
4914          The Interface Message Processor, the packet switch of the
4915          ARPANET.
4916
4917internet address
4918          A source or destination address specific to the host level.
4919
4920internet datagram
4921          The unit of data exchanged between an internet module and the
4922          higher level protocol together with the internet header.
4923
4924internet fragment
4925          A portion of the data of an internet datagram with an internet
4926          header.
4927
4928IP
4929          Internet Protocol.
4930
4931IRS
4932          The Initial Receive Sequence number.  The first sequence
4933          number used by the sender on a connection.
4934
4935ISN
4936          The Initial Sequence Number.  The first sequence number used
4937          on a connection, (either ISS or IRS).  Selected on a clock
4938          based procedure.
4939
4940ISS
4941          The Initial Send Sequence number.  The first sequence number
4942          used by the sender on a connection.
4943
4944leader
4945          Control information at the beginning of a message or block of
4946          data.  In particular, in the ARPANET, the control information
4947          on an ARPANET message at the host-IMP interface.
4948
4949
4950
4951[Page 80]                                                               
4952
4953
4954September 1981                                                          
4955                                           Transmission Control Protocol
4956                                                                Glossary
4957
4958
4959
4960left sequence
4961          This is the next sequence number to be acknowledged by the
4962          data receiving TCP (or the lowest currently unacknowledged
4963          sequence number) and is sometimes referred to as the left edge
4964          of the send window.
4965
4966local packet
4967          The unit of transmission within a local network.
4968
4969module
4970          An implementation, usually in software, of a protocol or other
4971          procedure.
4972
4973MSL
4974          Maximum Segment Lifetime, the time a TCP segment can exist in
4975          the internetwork system.  Arbitrarily defined to be 2 minutes.
4976
4977octet
4978          An eight bit byte.
4979
4980Options
4981          An Option field may contain several options, and each option
4982          may be several octets in length.  The options are used
4983          primarily in testing situations; for example, to carry
4984          timestamps.  Both the Internet Protocol and TCP provide for
4985          options fields.
4986
4987packet
4988          A package of data with a header which may or may not be
4989          logically complete.  More often a physical packaging than a
4990          logical packaging of data.
4991
4992port
4993          The portion of a socket that specifies which logical input or
4994          output channel of a process is associated with the data.
4995
4996process
4997          A program in execution.  A source or destination of data from
4998          the point of view of the TCP or other host-to-host protocol.
4999
5000PUSH
5001          A control bit occupying no sequence space, indicating that
5002          this segment contains data that must be pushed through to the
5003          receiving user.
5004
5005RCV.NXT
5006          receive next sequence number
5007
5008
5009
5010                                                               [Page 81]
5011
5012
5013                                                          September 1981
5014Transmission Control Protocol
5015Glossary
5016
5017
5018
5019RCV.UP
5020          receive urgent pointer
5021
5022RCV.WND
5023          receive window
5024
5025receive next sequence number
5026          This is the next sequence number the local TCP is expecting to
5027          receive.
5028
5029receive window
5030          This represents the sequence numbers the local (receiving) TCP
5031          is willing to receive.  Thus, the local TCP considers that
5032          segments overlapping the range RCV.NXT to
5033          RCV.NXT + RCV.WND - 1 carry acceptable data or control.
5034          Segments containing sequence numbers entirely outside of this
5035          range are considered duplicates and discarded.
5036
5037RST
5038          A control bit (reset), occupying no sequence space, indicating
5039          that the receiver should delete the connection without further
5040          interaction.  The receiver can determine, based on the
5041          sequence number and acknowledgment fields of the incoming
5042          segment, whether it should honor the reset command or ignore
5043          it.  In no case does receipt of a segment containing RST give
5044          rise to a RST in response.
5045
5046RTP
5047          Real Time Protocol:  A host-to-host protocol for communication
5048          of time critical information.
5049
5050SEG.ACK
5051          segment acknowledgment
5052
5053SEG.LEN
5054          segment length
5055
5056SEG.PRC
5057          segment precedence value
5058
5059SEG.SEQ
5060          segment sequence
5061
5062SEG.UP
5063          segment urgent pointer field
5064
5065
5066
5067
5068
5069[Page 82]                                                               
5070
5071
5072September 1981                                                          
5073                                           Transmission Control Protocol
5074                                                                Glossary
5075
5076
5077
5078SEG.WND
5079          segment window field
5080
5081segment
5082          A logical unit of data, in particular a TCP segment is the
5083          unit of data transfered between a pair of TCP modules.
5084
5085segment acknowledgment
5086          The sequence number in the acknowledgment field of the
5087          arriving segment.
5088
5089segment length
5090          The amount of sequence number space occupied by a segment,
5091          including any controls which occupy sequence space.
5092
5093segment sequence
5094          The number in the sequence field of the arriving segment.
5095
5096send sequence
5097          This is the next sequence number the local (sending) TCP will
5098          use on the connection.  It is initially selected from an
5099          initial sequence number curve (ISN) and is incremented for
5100          each octet of data or sequenced control transmitted.
5101
5102send window
5103          This represents the sequence numbers which the remote
5104          (receiving) TCP is willing to receive.  It is the value of the
5105          window field specified in segments from the remote (data
5106          receiving) TCP.  The range of new sequence numbers which may
5107          be emitted by a TCP lies between SND.NXT and
5108          SND.UNA + SND.WND - 1. (Retransmissions of sequence numbers
5109          between SND.UNA and SND.NXT are expected, of course.)
5110
5111SND.NXT
5112          send sequence
5113
5114SND.UNA
5115          left sequence
5116
5117SND.UP
5118          send urgent pointer
5119
5120SND.WL1
5121          segment sequence number at last window update
5122
5123SND.WL2
5124          segment acknowledgment number at last window update
5125
5126
5127
5128                                                               [Page 83]
5129
5130
5131                                                          September 1981
5132Transmission Control Protocol
5133Glossary
5134
5135
5136
5137SND.WND
5138          send window
5139
5140socket
5141          An address which specifically includes a port identifier, that
5142          is, the concatenation of an Internet Address with a TCP port.
5143
5144Source Address
5145          The source address, usually the network and host identifiers.
5146
5147SYN
5148          A control bit in the incoming segment, occupying one sequence
5149          number, used at the initiation of a connection, to indicate
5150          where the sequence numbering will start.
5151
5152TCB
5153          Transmission control block, the data structure that records
5154          the state of a connection.
5155
5156TCB.PRC
5157          The precedence of the connection.
5158
5159TCP
5160          Transmission Control Protocol:  A host-to-host protocol for
5161          reliable communication in internetwork environments.
5162
5163TOS
5164          Type of Service, an Internet Protocol field.
5165
5166Type of Service
5167          An Internet Protocol field which indicates the type of service
5168          for this internet fragment.
5169
5170URG
5171          A control bit (urgent), occupying no sequence space, used to
5172          indicate that the receiving user should be notified to do
5173          urgent processing as long as there is data to be consumed with
5174          sequence numbers less than the value indicated in the urgent
5175          pointer.
5176
5177urgent pointer
5178          A control field meaningful only when the URG bit is on.  This
5179          field communicates the value of the urgent pointer which
5180          indicates the data octet associated with the sending user's
5181          urgent call.
5182
5183          
5184
5185
5186
5187[Page 84]                                                               
5188
5189
5190September 1981                                                          
5191                                           Transmission Control Protocol
5192
5193
5194
5195                               REFERENCES
5196
5197
5198
5199[1]  Cerf, V., and R. Kahn, "A Protocol for Packet Network
5200     Intercommunication", IEEE Transactions on Communications,
5201     Vol. COM-22, No. 5, pp 637-648, May 1974.
5202
5203[2]  Postel, J. (ed.), "Internet Protocol - DARPA Internet Program
5204     Protocol Specification", RFC 791, USC/Information Sciences
5205     Institute, September 1981.
5206
5207[3]  Dalal, Y. and C. Sunshine, "Connection Management in Transport
5208     Protocols", Computer Networks, Vol. 2, No. 6, pp. 454-473,
5209     December 1978.
5210
5211[4]  Postel, J., "Assigned Numbers", RFC 790, USC/Information Sciences
5212     Institute, September 1981.
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246                                                               [Page 85]
5247
5248