[wiki:NetworkingComments Leave Comments, Critiques, and Suggestions Here] = An Introduction to Networking with Tango = Here we discuss the network components provided by the Tango API. Anyone with even a vague recollection of the old C socket interfaces will recall why network software development has always been such a "trial by ordeal". It is just not fun working with cryptic API's, seemingly inconsistant conventions, and confusing preprocessor macros. Tango, of course, [i]really[/i] tries to make it all easier. The approach, once again, is to make the network API clear and consistant across platforms. While claiming an API to be easy does not make it so, we hope the examples and explanations in this chapter will be adequate testimony that Tango "gets it right." The Tango network interface is foundational to many powerful and more complex network objects which will be discussed later. First, however, let us present a little history of networking. This should give a background as to why fundamental entities like sockets, ports, and internet addresses exist in the first place. == A Brief History of Networking == In the early days of UNIX (circa 1977), it was Berkley Software Distribution's UNIX that made some critical contributions to the field of network API's. BSD UNIX (as the academic-born UNIX operating system came to be called) was a direct competitor with AT&T Bell Lab's UNIX distribution. Bell Lab's UNIX was the original design for what became the most popular OS model of the last half a century. Both UNIX designs eventually contributed important network protocols and interfaces that are in common use today. The Internet is the most obvious example of the UNIX influence. Already a luminary in business and academics, the BSD UNIX phenomenon exploded in popularity when Sun released its own derivative called SunOS. Unfortunately, this only widened the divergence of the two UNIX styles -- BSD and Bell Lab's -- which were distinctly incompatible for a number of years. However, later versions of these two operating systems shared more in common. Bell Lab's final major release, called System V, merged features and tools from the ever popular BSD UNIX. The shared features made the two operating systems more independently useful but did little to improve cross-compatibility. (citation) While in the process of enriching the distribution, BSD managed to invent several innovative programming interfaces. In the network programming sector, one of the most important of these became known as "BSD Sockets." In short order, BSD Sockets was practically a standard across many UNIX-derivative distributions. Ironically, the purpose of the socket API was to create a "simple" programming interface for interprocess communication, specifically oriented to network operation. The socket concept was the high level rendition of network communication. Years later, sockets have become synonymous with network software development, promoted even further by their ready adoption by the ever pervading Linux movement. Despite incompatible implementations sprouting across old and new operating systems, still the sockets API has managed to gain an increasingly universal audience. == All about Networking == Simply, a network is a collection of computers that communicate with each other through a transmission medium. The communication mechanism must be managed like any other resource to prevent complete pandemonium amongst the connected computers, much like a group of children must be made to talk in turn in order for their speech to be intelligible. Even so, communication is usually managed on several levels using hardware and software protocols. Some protocols help prioritize transmissions; others route the communication to the correct computer; still others help guarantee that connections are established and maintained between specific points. These protocols are rules that state how network components agree to communicate. They are integrated into hardware or software and are present in multiple levels of any network model. Networks were coming into such prominence that eventually a standard model was designed to describe how to connect combinations of devices for communication. (Complete Encyclopedia of Networking, p 727). The Open Systems Interconnection (OSI Reference Model) is a seven-layer model meant to demonstrate the functional layers of a network and the features available in each layer. (REWORD LAST SENTENCE COMPLETELY) A layer represents a functional contributer to a portion of the network model. For example, a software application with its protocols represents the highest level Application Layer of the OSI (FTP and Telnet are application layer protocols); TCP and UDP protocols represent a middle layer called the Transport Layer; and the transmission line (wired or wireless) represents the the lowest layer called the Physical Layer. (Ibid. p 734) See the figure for a full view of the seven layer model. The OSI model acts as a guideline only, an abstract breakdown of how network systems operate. Most networks systems will implement most of these layers, but they won't be so clearly defined. Some layers may be logically merged for convenience. What the OSI model should indicate is that communication happens in layers. The model helps us understand how network systems work: when we make a connection with another computer, there are several processes that go on, each playing an important part in carrying the payload (the packet) to the destination. Each level generates overhead in carrying the payload; this overhead is the price paid by the delivery system in exchange for reliability and functionality. Each layer at the destination sees its equivalent layer at the source. This means that packets are passed down the layers at the source and back up the layers at the destination; the destination levels strip off the pertinent information designated for their specific layer until the packet is presented in its naked form to the Application Layer. This process will be useful to understand when we discuss the Tango Socket in the next section. == Tango Socket == The socket is our fundamental network component and the basis for many higher level Tango network objects. In Tango this class represents a BSD Socket equivalent. The major difference is that Tango sockets are cross-platform: whether we use them on Apple OS X, MS Windows, or Linux, the interface remains the same. Learning the details of Socket class, therefore, is the first step to learning to program a network application or library. Like the name implies, a socket is a medium for connecting one entity to another. The entities involved are always processes (software running on an operating system) that may exist on local or distributed network nodes (computers). Each process must create a socket in order to establish a communication portal. From the application perspective, the location of the communicating nodes is unimportant so long as the nodes are members of an operational network. This is because lower level mechanisms, not visible to the application, take care of details important to actual delivery of the information submitted to the sockets. For these reasons, sockets are really just a generic mechanism for interprocess communication (often known as IPC). (CLEANUP) A data collection that is sent or received in this model is called a packet. A packet contains useful information that one processes delivers to another for further processing. Examples of packets would be anything from email's sent out on the Internet to web pages being downloaded from a distant server. Though packets may be almost any size, practicality in network communication design dictates that information transferred must be broken up into smaller parts before transmission. While the application may see the received web page as a whole, lower level layers will usually partition large payloads into smaller. These packets are sections of the whole transmitted in designated byte sizes.(CLEANUP) == More on Networking == An excellent guide to low-level socket programming is right [http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html here] == More than Sockets == Tango exposes this kind of low-level access via tango.net.Socket, but that is just too low-lowel for general usage. Thus, Tango provides a number of higher level wrappers to make Internet programming more productive. TO BE WRITTEN: SocketConduit ServerSocket DatagramConduit MulticastConduit == Graphs == Uri represents Internet URLS: [[Image(source:/trunk/doc/images/Uri.gif)]] This is the internet equivalent of !FileConduit: [[Image(source:/trunk/doc/images/SocketConduit.gif)]] == References == http://www.coe.berkeley.edu/labnotes/history_unix.html