TCP/IP 


   logical structure:

                     ----------------------------
                     |    network applications  |
                     |                          |
                     |...  \ | /  ..  \ | /  ...|
                     |     -----      -----     |
                     |     |TCP|      |UDP|     |
                     |     -----      -----     |
                     |         \      /         |
                     |         --------         |
                     |         |  IP  |         |
                     |  -----  -*------         |
                     |  |ARP|   |               |
                     |  -----   |               |
                     |      \   |               |
                     |      ------              |
                     |      |ENET|              |
                     |      ---@--              |
                     ----------|-----------------
                               |
         ----------------------o---------
             Ethernet Cable

                    Basic TCP/IP Network Node



         1   2 3 ...   n                   1   2 3 ...   n
          \  |      /      |               \  | |      /       ^
           \ | |   /       |                \ | |     /        |
         -------------   flow              ----------------   flow
         |multiplexer|    of               |de-multiplexer|    of
         -------------   data              ----------------   data
              |            |                     |              |
              |            v                     |              |
              1                                  1

          n-to-1 multiplexer and 1-to-n de-multiplexer





 Two Network Interfaces

   If a computer is connected to 2 separate Ethernets 

                ----------------------------
                |    network applications  |
                |                          |
                |...  \ | /  ..  \ | /  ...|
                |     -----      -----     |
                |     |TCP|      |UDP|     |
                |     -----      -----     |
                |         \      /         |
                |         --------         |
                |         |  IP  |         |
                |  -----  -*----*-  -----  |
                |  |ARP|   |    |   |ARP|  |
                |  -----   |    |   -----  |
                |      \   |    |   /      |
                |      ------  ------      |
                |      |ENET|  |ENET|      |
                |      ---@--  ---@--      |
                ----------|-------|---------
                          |       |
                          |    ---o---------------------------
                          |             Ethernet Cable 2
           ---------------o----------
             Ethernet Cable 1

              TCP/IP Network Node on 2 Ethernets

   computer has 2 Ethernet addresses and 2 IP addresses.



                           TCP      UDP
                             \      /
                              \    /
                          --------------
                          |     IP     |
                          |            |
                          |    ---     |
                          |   /   \    |
                          |  /     v   |
                          --------------
                           /         \
                          /           \
                       data           data
                      comes in         goes out
                     here               here

            IP Forwarding a IP Packet

   The process of sending an IP packet out onto another network is
   called "forwarding" an IP packet.  A computer that has been dedicated
   to the task of forwarding IP packets is called an "IP-router".


 IP Creates a Single Logical Network
 Physical Network Independence
 Interoperability



  Ethernet
   An Ethernet frame contains the destination address, source address,
   type field, and data.

   Ethernet uses CSMA/CD (Carrier Sense and Multiple Access with
   Collision Detection).  CSMA/CD means that all devices communicate on
   a single medium, that only one can transmit at a time, and that they
   can all receive simultaneously.  If 2 devices try to transmit at the
   same instant, the transmit collision is detected, and both devices
   wait a random (but short) period before trying to transmit again.

   ARP
   ARP (Address Resolution Protocol) is used to translate IP addresses
   to Ethernet addresses.  The translation is done only for outgoing IP
   packets, because this is when the IP header and the Ethernet header
   are created.

   ARP Table for Address Translation
   The translation is performed with a table look-up.  The table, called
   the ARP table, is stored in memory and contains a row for each
   computer.  There is a column for IP address and a column for Ethernet
   address.  When translating an IP address to an Ethernet address, the
   table is searched for a matching IP address.  The following is a
   simplified ARP table:

                  ------------------------------------
                  |IP address       Ethernet address |
                  ------------------------------------
                  |223.1.2.1        08-00-39-00-2F-C3|
                  |223.1.2.3        08-00-5A-21-A7-22|
                  |223.1.2.4        08-00-10-99-AC-54|
                  ------------------------------------
                      An ARP Table
   The ARP table is used to look-up the destination Ethernet address.

   ARP Request/Response Pair
   Two things happen when the ARP table can not be used to translate an
   address:

     1. An ARP request packet with a broadcast Ethernet address is sent
        out on the network to every computer.

     2. The outgoing IP packet is queued.

   Every computer's Ethernet interface receives the broadcast Ethernet
   frame.  Each Ethernet driver examines the Type field in the Ethernet
   frame and passes the ARP packet to the ARP module.  The ARP request
   packet says "If your IP address matches this target IP address, then
   please tell me your Ethernet address".  An ARP request packet looks
   something like this:

                ---------------------------------------
                |Sender IP Address   223.1.2.1        |
                |Sender Enet Address 08-00-39-00-2F-C3|
                ---------------------------------------
                |Target IP Address   223.1.2.2        |
                |Target Enet Address  [blank]          |
                ---------------------------------------
                       Example ARP Request

   Each ARP module examines the IP address and if the Target IP address
   matches its own IP address, it sends a response directly to the
   source Ethernet address.  The ARP response packet says "Yes, that
   target IP address is mine, let me give you my Ethernet address". 

                ---------------------------------------
                |Sender IP Address   223.1.2.2        |
                |Sender Enet Address 08-00-28-00-38-A9|
                ---------------------------------------
                |Target IP Address   223.1.2.1        |
                |Target Enet Address 08-00-39-00-2F-C3|
                ---------------------------------------
                       Example ARP Response

   The response is received by the original sender computer.  The
   Ethernet driver looks at the Type field in the Ethernet frame then
   passes the ARP packet to the ARP module.  The ARP module examines the
   ARP packet and adds the sender's IP and Ethernet addresses to its ARP
   table.

   The updated table now looks like this:

                   ----------------------------------
                   |IP address     Ethernet address |
                   ----------------------------------
                   |223.1.2.1      08-00-39-00-2F-C3|
                   |223.1.2.2      08-00-28-00-38-A9|
                   |223.1.2.3      08-00-5A-21-A7-22|
                   |223.1.2.4      08-00-10-99-AC-54|
                   ----------------------------------
                    ARP Table after Response


 Routing :  
 Direct Routing
 Indirect Routing


          A      B      C      ----D----      E      F      G
          |      |      |      |   |   |      |      |      |
        --o------o------o------o-  |  -o------o------o------o--
        Ethernet 1                 |  Ethernet 2
        IP network "development"   |  IP network "accounting"
                                   |
                                   |
                                   |     H      I      J
                                   |     |      |      |
                                 --o-----o------o------o--
                                  Ethernet 3
                                  IP network "factory"

                Three IP Networks; One internet

                ----------------------------------------
                |address            source  destination|
                ----------------------------------------
                |IP header          A       E          |
                |Ethernet header    A       D          |
                ----------------------------------------
         Addresses in an Ethernet frame for an IP packet
                         from A to E (before D)


                ----------------------------------------
                |address            source  destination|
                ----------------------------------------
                |IP header          A       E          |
                |Ethernet header    D       E          |
                ----------------------------------------
         Addresses in an Ethernet frame for an IP packet
                         from A to E (after D)


  User Datagram Protocol
   UDP is one of the two main protocols to reside on top of IP.  It
   offers service to the user's network applications.  Example network
   applications that use UDP are:  Network File System (NFS) and Simple
   Network Management Protocol (SNMP).  The service is little more than
   an interface to IP.

   UDP is a connectionless datagram delivery service that does not
   guarantee delivery.  UDP does not maintain an end-to-end connection
   with the remote UDP module; it merely pushes the datagram out on the
   net and accepts incoming datagrams off the net.

   UDP adds two values to what is provided by IP.  One is the
   multiplexing of information between applications based on port
   number.  The other is a checksum to check the integrity of the data.

  Ports
   The path of communication between an application and UDP is through
   UDP ports.  These ports are numbered, beginning with zero.  An
   application that is offering service (the server) waits for messages
   to come in on a specific port dedicated to that service.  The server
   waits patiently for any client to request service.

  Checksum
   An incoming IP packet with an IP header type field indicating "UDP"
   is passed up to the UDP module by IP.  When the UDP module receives
   the UDP datagram from IP it examines the UDP checksum.  If the
   checksum is zero, it means that checksum was not calculated by the
   sender and can be ignored.  Thus the sending computer's UDP module
   may or may not generate checksums.  If Ethernet is the only network
   between the 2 UDP modules communicating, then you may not need
   checksumming.  However, it is recommended that checksum generation
   always be enabled because at some point in the future a route table
   change may send the data across less reliable media.

   If the checksum is valid (or zero), the destination port number is
   examined and if an application is bound to that port, an application
   message is queued for the application to read.  Otherwise the UDP
   datagram is discarded.  If the incoming UDP datagrams arrive faster
   than the application can read them and if the queue fills to a
   maximum value, UDP datagrams are discarded by UDP.  UDP will continue
   to discard UDP datagrams until there is space in the queue.

  Transmission Control Protocol
   TCP provides a different service than UDP.  TCP offers a connection-
   oriented byte stream, instead of a connectionless datagram delivery
   service.  TCP guarantees delivery, whereas UDP does not.

   TCP is used by network applications that require guaranteed delivery
   and cannot be bothered with doing time-outs and retransmissions.  The
   two most typical network applications that use TCP are File Transfer
   Protocol (FTP) and the TELNET.  Other popular TCP network
   applications include X-Window System, rcp (remote copy), and the r-
   series commands.  TCP's greater capability is not without cost: it
   requires more CPU and network bandwidth.  The internals of the TCP
   module are much more complicated than those in a UDP module.

   Similar to UDP, network applications connect to TCP ports.  Well-
   defined port numbers are dedicated to specific applications.  For
   instance, the TELNET server uses port number 23.  The TELNET client
   can find the server simply by connecting to port 23 of TCP on the
   specified computer.

   When the application first starts using TCP, the TCP module on the
   client's computer and the TCP module on the server's computer start
   communicating with each other.  These two end-point TCP modules
   contain state information that defines a virtual circuit.  This
   virtual circuit consumes resources in both TCP end-points.  The
   virtual circuit is full duplex; data can go in both directions
   simultaneously.  The application writes data to the TCP port, the
   data traverses the network and is read by the application at the far
   end.

   TCP packetizes the byte stream at will; it does not retain the
   boundaries between writes.  For example, if an application does 5
   writes to the TCP port, the application at the far end might do 10
   reads to get all the data.  Or it might get all the data with a
   single read.  There is no correlation between the number and size of
   writes at one end to the number and size of reads at the other end.

   TCP is a sliding window protocol with time-out and retransmits.
   Outgoing data must be acknowledged by the far-end TCP.
   Acknowledgements can be piggybacked on data.  Both receiving ends can
   flow control the far end, thus preventing a buffer overrun.

   As with all sliding window protocols, the protocol has a window size.
   The window size determines the amount of data that can be transmitted
   before an acknowledgement is required.  For TCP, this amount is not a
   number of TCP segments but a number of bytes.