Module 3
Systems Software and Networking
A. System Software
Even if you write the program correctly, your work is still not done. A program
for a Von Neumann computer must be stored in memory prior to execution. Therefore,
you must now take the program and store its instructions into sequential cells in memory.
On a naked machine, the programmer must perform this task, one instruction at a time.
Assuming that each instruction occupies one memory cell, the programmer loads the first
instruction into address 0, the second instruction into address 1, the third instruction into
address 2, and so on, until all have been stored.
Finally, what starts the program running? A naked machine does not do this
automatically. (As you are probably coming to realize, a naked machine does not do
anything automatically, except fetch, decode, and execute machine language
instructions.) The programmer must initiate execution by storing a 0, the address of the
first instruction of the program, into the program counter (PC) and pressing the START
button. This begins the fetch/decode/execute cycle described in Chapter 5. The control
unit fetches from memory the contents of the address in the PC, currently 0, and executes
that instruction. The program continues sequentially from that point while the user prays
that everything works because he or she cannot bear to face a naked machine again!
By way of analogy, let’s look at how people use another common tool—an
automobile. The internal combustion engine is a highly complex piece of technology. For
most of us, the functions of fuel-injection systems, distributors, and camshafts are a total
mystery. However, most people find driving a car quite easy. This is because the driver
does not have to lift the hood and interact directly with the hardware; that is, he or she
does not have to drive a “naked automobile.” Instead, there is an interface, the dashboard,
which simplifies things considerably. The dashboard hides the details of engine operation
that a driver does not need to know. The important things—such as oil pressure, fuel
level, and vehicle speed—are presented in a simple, “people-oriented” way: oil indicator
warning light, fuel gauge, and speed in miles or kilometers per hour. Access to the engine
and transmission is achieved via a few easy-to-understand devices: a key to start and
stop, pedals to speed up or slow down, a shift lever to go forward or backward, and a
steering wheel to direct movement.
System software is a collection of computer programs that manage the resources
of a computer and facilitates access to those resources. This contrasts with application
software that allows a user to address some specialized task of interest to that user, for
example, write a document, create an image, browse the web, or solve a system of
equations. (Application software is addressed in Level 5 of this text.) It is important to
remember that we are describing software, not hardware. There are no black boxes wired
to a computer labeled “system software.” Software consists of sequences of instructions
—namely, programs—that solve a problem. But again, instead of solving user problems,
system software solves the problem of making a computer and its resources easier to
access and use.
System software acts as an intermediary between the users and the hardware, as
shown in Figure 6.1. System software presents the user with a set of services and
resources across the interface labeled A in Figure 6.1. These resources may actually exist,
or they may be simulated by the software to give the user the illusion that they exist. The
set of services and resources created by the software and seen by the user is called a
virtual machine or a virtual environment.
System software is not a single monolithic entity but a collection of many
different programs. The types found on a typical computer are shown in Figure 6.2. The
program that controls the overall operation of the computer is the operating system, and it
is the single most important piece of system software on a computer. It is the operating
system that communicates with users, determines what they want, and activates other
system programs, applications packages, or user programs to carry out their requests.
All modern operating systems provide a powerful graphical user interface (GUI)
that gives the user an intuitive visual overview as well as graphical control of the
capabilities and services of the computer. Control of the GUI is typically done with
keystrokes, mouse clicks, finger taps, voice activation, or biometric scans such as
fingerprints.
On a virtual machine, the low-level details of machine operation are no longer
visible, and a user can concentrate on higher-level issues: writing the program, executing
the program, and saving and analyzing results. There are many types of system software,
and it is impossible to cover them all in this section of the text. Instead, we will
investigate two types of system software and use these as representatives of the entire
group. Section 6.3 examines assemblers, and Section 6.4 looks at the design and
construction of operating systems. These two packages create a friendly and usable
virtual machine. In Chapter 7, we will extend that virtual environment from a single
computer to a collection of computers by looking at the system software required to
create one of the most important and widely used virtual environments—a computer
network. Finally, in Chapter 8 we will investigate one of the most important services
provided by the operating system—system security.
B. Assemblers and Assembly Language
One of the first places where we need a friendlier virtual environment is in our
choice of programming language. Machine language, which is designed from a
machine’s point of view, not a person’s, is complicated and virtually impossible to
understand. What specifically are the problems with machine language? It uses binary.
There are no natural language words, mathematical symbols, or other convenient
mnemonics to make the language more readable. It allows only numeric memory
addresses (in binary). A programmer cannot name an instruction or a piece of data and
refer to it by name. It is difficult to change. If we insert or delete an instruction, all
memory addresses following that instruction will change. For example, if we place a new
instruction into memory location 503, then the instruction previously in location 503 is
now in 504. All references to address 503 must be updated to point to 504. There may be
hundreds of such references. It is difficult to create data. If a user wants to store a piece of
data in memory, he or she must compute the internal binary representation for that data
item. These conversion algorithms are complicated and time consuming.
Programmers working on early first-generation computers quickly realized the
shortcomings of machine language. They developed a new language, called assembly
language, designed for people as well as computers. Assembly languages created a more
productive, user-oriented environment, and assemblers were one of the first pieces of
system software to be widely used. When assembly languages first appeared in the early
1950s, they were one of the most important new developments in programming—so
important, in fact, that they were considered an entirely new generation of language,
analogous to the new generations of hardware described in Section 1.4.3. Assembly
languages were termed second-generation languages to distinguish them from machine
languages, which were viewed as first-generation languages. Today, assembly languages
are more properly called low-level programming languages, which means they are
closely related to the machine language of Chapter 5. Each symbolic assembly language
instruction is translated into exactly one binary machine language instruction.
This contrasts with languages like C++, Java, and Python, which are high-level
programming languages. High-level languages are more user oriented, they are not
machine specific, and they use both natural language and mathematical notation in their
design. A single high-level language instruction is typically translated into many machine
language instructions, and the virtual environment created by a high-level language is far
more powerful than the one produced by an assembly language.
A program written in assembly language is called the source program; it uses the
features and services provided by the language. However, the processor does not
“understand” assembly language instructions, in the sense of being able to fetch, decode,
and execute them as described in Chapter 5. The source program must be translated into a
corresponding machine language program, called the object program. This translation is
carried out by a piece of system software called an assembler. (Translators for high-level
languages are called compilers. They are discussed in Chapter 11.) The assembler goes
through the entire program, carrying out a translation of one instruction at a time.
Another advantage of assembly language is that it lets programmers use symbolic
addresses instead of numeric addresses. In machine language, to jump to the instruction
stored in memory location 17, you must refer directly to address 17; that is, you must
write JUMP 17 (in binary, of course). This is cumbersome, because if a new instruction is
inserted anywhere within the first 17 lines of the program, the jump location changes to
18. The old reference to 17 is incorrect, and the address field must be changed. This
makes modifying programs very difficult, and even small changes become big efforts. It
is not unlike identifying yourself in a waiting line by position—as, say, the 10th person in
line. As soon as someone in front of you leaves (or someone cuts in line ahead of you),
that number changes. It is far better to identify yourself using a characteristic that does
not change as people enter or exit the line. For example, you are the person wearing the
green jacket and the orange shirt. Those characteristics won’t change (though maybe they
should).
Say a new instruction is added to the program at point A. When the modified
program is translated by the assembler into machine language, all instructions following
point A are placed in a memory cell whose address is 1 higher than it was before
(assuming that each instruction occupies one memory cell). However, the JUMP refers to
the LOAD instruction only by the name LOOP, not by the address where it is stored.
Therefore, neither the JUMP nor the LOAD instruction needs to be changed. We need
only retranslate the modified program. The assembler determines the new address of the
LOAD X instruction, makes the label LOOP equivalent to this new address, and places
this new address into the address field of the JUMP LOOP instruction. The assembler
does the messy bookkeeping previously done by the machine language programmer.
The final advantage of assembly language programming is data generation. In
Section 4.2.1 we showed how to represent data types such as unsigned and signed
integers, floating-point values, and characters in binary. When writing in machine
language, the programmer must do these conversions. In assembly language, however,
the programmer can ask the assembler to do them by using a special type of assembly
language op code called a pseudo-op. A pseudo-op (preceded in our notation by a period
to indicate its type) does not generate a machine language instruction like other operation
codes. Instead, it invokes a useful service of the assembler. One of these useful services is
generating data in the proper binary representation for this system. There are typically
assembly language pseudo-ops to generate integer, character, and (if the hardware
supports it) real data values. In our sample language, we will limit ourselves to one data
generation pseudo-op called .DATA that builds signed integers. This pseudo-op converts
the signed decimal integer in the address field to the proper binary representation.
Today, software development is rarely performed in assembly language except for
very special-purpose tasks; most programmers use higher-level languages such as those
mentioned in Figure 6.3 and described in Chapters 9 and 10. Our purpose in offering
these examples is to demonstrate how system software, in this case an assembler, can
create a user-oriented virtual environment that supports effective and productive problem
solving.
The program in Figure 6.8 is an important milestone in our discussion of
computer science in that it represents a culmination of the algorithmic problemsolving
process. Earlier chapters introduced algorithms and problem solving (Chapters 1, 2, 3),
discussed how to build computers to execute algorithms (Chapters 4, 5), and introduced
system software that enables us to code algorithms into a language that computers can
translate and execute (Chapter 6). The program in Figure 6.8 is the end product of this
discussion: This program can be input to an assembler, translated into machine language,
loaded into a Von Neumann computer, and executed to produce answers to our problem.
This algorithmic problem-solving cycle is one of the central themes of computer science.
What must happen in order for the assembly language program in Figure 6.8 to be
executed on a processor? Figure 6.4 shows that before our source program can be run, we
must invoke two system software packages—an assembler and a loader. An assembler
translates a symbolic assembly language program, such as the one in Figure 6.8, into
machine language. We usually think of translation as an extremely difficult task. In fact,
if two languages differ greatly in vocabulary, grammar, and syntax, it can be quite
formidable. (This is why a translator for a high-level programming language is a very
complex piece of software.) However, machine language and assembly language are very
similar, and therefore an assembler is a relatively simple piece of system software.
Understanding how an assembler works will give you a good appreciation for the tasks
that system software must carry out in order to create a user-friendly virtual environment.
To look up the code in the op code table, we could use the sequential search
algorithm introduced in Chapter 2 and shown in Figure 2.13. However, using this
algorithm could significantly slow down the translation of our program. The analysis of
the sequential search algorithm in Chapter 3 showed that locating a single item in a list of
N items takes, on the average, N/2 comparisons if the item is in the table and N
comparisons if it is not. In Chapter 5, we stated that modern computers may have as
many as 300 machine language instructions in their instruction set, so the size of the op
code table of Figure 6.9 could be as large as N 5 300. This means that using sequential
search, we must perform an average of N/2, about 150, comparisons for every legal op
code in our program. If our assembly language program contains 500,000 instructions
(not an unreasonably large number for a complex piece of system software), the op code
translation task requires a total of 500,000 instructions 3 150 comparisons/ instruction 5
75 million comparisons. That is a lot of searching, even for a high-speed computer.
After the op code has been converted into binary, the assembler must perform a
similar task on the address field. It must convert the address from a symbolic value, such
as X or LOOP, into the correct binary address. This task is a bit more difficult than
converting the op code because the assembler itself must determine the correct numeric
value of all symbols used in the label field. There is no “built-in” address conversion
table equivalent to the op code table of Figure 6.9. In assembly language, a symbol is
defined when it appears in the label field of an instruction or data pseudo-op.
Specifically, the symbol is given the value of the address of the instruction to which it is
attached. Assemblers usually make two passes over the source code, where a pass is
defined as the process of examining and processing every assembly language instruction
in the program, one instruction at a time. During the first pass over the source code, the
assembler looks at every instruction, keeping track of the memory address where this
instruction will be stored when it is translated and loaded into memory. It does this by
knowing where the program begins in memory and knowing how many memory cells are
required to store each machine language instruction or piece of data. It also determines
whether there is a symbol in the label field of the instruction. If there is, it enters the
symbol and the address of this instruction into a special table that it is building called a
symbol table.
After completion of pass 1 and pass 2, the object file contains the translated
machine language object program, referred to in Figure 6.4. One possible object program
for the assembly language program of Figure 6.10(a) is shown in Figure 6.13. (Note that
a real object file contains only the address and instruction fields. The meaning field is
included here for clarity only.) The object program shown in Figure 6.13 becomes input
to yet another piece of system software called a loader. It is the task of the loader to read
instructions from the object file and store them into memory for execution. To do this, it
reads an address value—column 1 of Figure 6.13—and a machine language instruction—
column 2 of Figure 6.13—and stores that instruction into the specified memory address.
This operation is repeated for every instruction in the object file. When loading is
complete, the loader places the address of the first instruction (0 in this example) into the
program counter (PC) to initiate execution. The hardware, as we learned in Chapter 5,
then begins the fetch, decode, and execute cycle starting with the instruction whose
address is located in the PC, namely, the beginning of this program.
C. Operating Systems
To carry out the services just described (translate a program, load a program, run
a program), a user must issue system commands, which are commands sent to the
operating system to perform a service on the user’s behalf. Regardless of how the process
is initiated, the important question is: Which program examines these commands? Which
piece of system software waits for requests from a user and activates other system
programs like a translator or information manager to service these requests? The answer
is the operating system, and, as shown in Figure 6.2, it is the “top-level” system software
component on a computer. Some of the more well-known operating systems in
widespread use today include Windows 10, macOS, and Linux for mainframes, desktops,
and laptops, and Google Android and Apple iOS for mobile devices.
The operating system is executing whenever no other piece of user or system
software is using the processor. Its most important task is to wait for a user command
delivered via a keypad, mouse, finger tap, voice command, or other input device. If the
command is legal, the operating system activates and schedules the appropriate software
package to process the request. In this sense, the operating system acts like the
computer’s receptionist and dispatcher.
Operating system commands usually request access to hardware resources
(processor, output device, communication line, camera), software services (web browser,
application program), or information (data files, contact lists). Examples of typical
operating system commands are shown in FigureK6.14. Modern operating systems can
typically recognize and execute hundreds of unique commands. After a user enters a
command, the operating system determines which software package needs to be loaded
and put on the schedule for execution. When that package completes execution, control
returns to the operating system, which waits for a user to enter the next command.
The user interfaces on the operating systems of the 1950s, 1960s, and 1970s were
text oriented. The system displayed a prompt character on the screen to indicate that it
was waiting for input, and then it waited for something to happen. The user entered
commands in a special, and sometimes quite cryptic, command language. As you can see,
commands were not always easy to understand, and learning the command language of
the operating system was a major stumbling block for new users. Unfortunately, without
first learning some basic commands, no useful work could be done. Because users found
text-oriented command languages very cumbersome, all modern operating systems utilize
a graphical user interface, (GUI). To communicate with a user, a GUI supports visual
aids and point-and-click or touchscreen operations, rather than textual commands. These
interfaces use icons, pull-down menus, scrolling, resizable windows, and other visual
elements and graphical metaphors that make it much easier for a user to formulate
requests. Operating systems for mobile devices such as tablets and smartphones allow
users to employ finger taps and voice-activated commands to specify the operations they
wish to perform.
In addition to being a receptionist, the operating system also has the
responsibilities of a security guard—controlling access to the computer and its resources.
It must prevent unauthorized users from accessing the system and prevent authorized
users from doing unauthorized things. At a minimum, the operating system must not
allow people to access the computer if they have not been granted permission. In the
“olden days” of computing (the 1950s and 1960s), security was implemented by physical
means— walls and locked doors around the computer and security guards at the door to
prevent unauthorized access. However, when telecommunications networks appeared on
the scene in the late 1960s and 1970s (we will discuss them in detail in Chapter 7), access
to computers over networks became possible from virtually anywhere in the world, and
responsibility for access control migrated from the guard at the door to the operating
system inside the machine.
Programs cycle from running to waiting to ready and back to running, each one
using only a portion of the resources of the processor. (However, there are situations in
which a program must be started immediately, ahead of other programs on the waiting
list. For example, when a phone call arrives we immediately suspend whatever we are
doing and execute the program that displays an “Incoming Call” message and allows us
to accept the call. If we do not do that, the caller will most likely hang up.)
Not only must resources be used efficiently, they must also be used safely. That
doesn’t mean an operating system must prevent users from sticking their fingers in the
power supply and getting electrocuted! The job of the operating system is to prevent
programs or users from attempting operations that cause the computer system to enter a
state in which it is incapable of doing any further work—a “frozen” state where all useful
work comes to a grinding halt.
If the operating system satisfies the first request of each program, then A “owns”
data file D, and B has the laser printer. When A requests ownership of the laser printer, it
is told that the printer is being used by B. Similarly, B is told that it must wait for the data
file until A is finished with it. Each program is waiting for a resource to become available
that will never become free. This situation is called a deadlock. Programs A and B are in
a permanent waiting state, and if there is no other program ready to run, all useful work
on the system ceases.
Essentially, this resource allocation algorithm says, “If you cannot get everything
you need, then you get nothing.” If we had used this algorithm, then after program A
acquired the laser printer but not the data file, it would have had to relinquish ownership
of the printer. Now B could get everything it needed to execute, and no deadlock would
occur. (It could also work in the reverse direction, with B relinquishing ownership of the
data file and A getting the needed resources. Which scenario unfolds depends on the
exact order in which requests are made.)
Regardless of whether we prevent deadlocks from occurring or recover from
those that do occur, it is the responsibility of the operating system to create a virtual
machine in which the user never sees deadlocks and does not worry about them. The
operating system should create the illusion of a smoothly functioning, highly efficient,
error-free environment—even if, as we know from our glimpse behind the scenes, that is
not always the case. (We all know how frustrating it can be when our computer or tablet
freezes up, and we must restart the entire system. A well-designed operating system
should make this an extremely rare event.)
Like the hardware on which it runs, system software has gone through a number
of changes since the earliest days of computing. The functions and capabilities of a
modern operating system described in the previous section did not appear all at once but
evolved over many years. During the first generation of system software (roughly 1945–
1955), there really were no operating systems and there was very little software support
of any kind—typically just the assemblers and loaders described in Section 6.3. All
machine operation was “hands-on.” Programmers would sign up for a block of time and,
at the appointed time, show up in the machine room carrying their programs on punched
cards or tapes. They had the entire computer to themselves, and they were responsible for
all machine operation. They loaded their assembly language programs into memory along
with the assembler and, by punching some buttons on the console, started the translation
process. Then they loaded their program into memory and started it running. Working
with first-generation software was a lot like working on the naked machine described at
the beginning of the chapter. It was attempted only by highly trained professionals
intimately familiar with the computer and its operation.
System administrators quickly realized that this was a horribly inefficient way to
use an expensive piece of equipment. (Remember that these early computers cost
millions of dollars.) A programmer would sign up for an hour of computer time, but the
majority of that time was spent analyzing results and trying to figure out what to do next.
During this “thinking time,” the system was idle and doing nothing of value. Eventually,
the need to keep machines busy led to the development of a second generation of system
software called batch operating systems (1955–1965).
In second-generation batch operating systems, rather than operate the machine
directly, a programmer handed the program (typically entered on punched cards) to a
trained computer operator, who grouped it into a “batch”—hence the name. After a few
dozen programs were collected, the operator carried this batch of cards to a small I/O
computer that put these programs on tape. This tape was carried into the machine room
and loaded onto the “big” computer that actually ran the users’ programs, one at a time,
writing the results to yet another tape. During the last stage, this output tape was carried
back to the I/O computer to be printed and handed to the programmer.
By the mid-1960s, integrated circuits and other new technologies had boosted
computational speeds enormously. The batch operating system just described kept only a
single program in memory at any one time. If that job paused for a few milliseconds to
complete an I/O operation (such as read a disk sector or print a file on the printer), the
processor simply waited. As computers became faster, designers began to look for ways
to use those idle milliseconds. The answer they came up with led to a third generation of
operating systems called multiprogrammed operating systems (1965–1985).
The basic idea in a time-sharing system is to service many users in a circular,
round-robin fashion, giving each one a small amount of time and then moving on to the
next. If there are not too many users on the system, the processor can get back to a user
before he or she even notices any delay. Each one will believe that they have the entire
system to themselves. Time-sharing was the dominant form of operating system during
the 1970s and 1980s, and time-sharing terminals appeared throughout government
offices, businesses, and campuses. The early 1980s saw the appearance of the first
personal computers (known as PCs or microcomputers), and in many business and
academic environments the “dumb” terminal began to be replaced by these PCs. Initially,
the PC was viewed as simply another type of terminal, and during its early days it was
used primarily to access a central time-sharing system. However, as PCs became faster
and more powerful, people soon realized that much of the computing being done on the
centralized machine could be done much more conveniently and cheaply by the
microcomputers sitting on their desktops.
During the late 1980s and the 1990s, computing rapidly changed from the
centralized environment typical of batch, multiprogramming, and timesharing systems to
a distributed environment in which much of the computing was done remotely in the
office, laboratory, classroom, and factory. Computing moved from the computer center
out to where the real work was being done. The operating systems available for early
personal computers were simple single-user operating systems that gave one user total
access to the entire system. Because personal computers were so cheap, there was really
no need for many users to share their resources, and the time-sharing and
multiprogramming designs of the third generation became less important.
Although personal computers were relatively cheap (and were becoming cheaper
all the time), many of the peripherals and supporting gear—laser printers, large disk
drives, tape backup units, and specialized software packages— were not. In addition,
email was growing in importance, and stand-alone PCs were unable to communicate
easily with other users and partake in this important new application. The personal
computer era required a new approach to operating system design. It needed a virtual
environment that supported both local computation and remote access to other users and
shared resources.
This led to the development of a fourth-generation operating system called a
network operating system (1985–present). A network operating system manages not only
the resources of a single computer but also the capabilities of a telecommunications
system called a local area network, or LAN for short. (We will take a much closer look at
these types of networks in Chapter 7.) A LAN is a network that is located in a
geographically contiguous area such as a room, a building, or a campus. It is composed of
personal computers (workstations), and special shared resources called servers, all
interconnected via a high-speed link, either wireless or constructed from coaxial or fiber-
optic cable.
One important variation of the network operating system is called a real-time
operating system. During the 1980s and 1990s, computers got smaller and smaller, and it
became common to place them inside other pieces of equipment to control their
operation. These types of computers are called embedded systems; examples include
computers placed inside automobile engines, microwave ovens, thermostats, assembly
lines, airplanes, homes, and even the treadmill at your local fitness center. For example,
the Boeing 787 Dreamliner jet contains hundreds of embedded computer systems inside
its engines, braking system, wings, landing gear, and cabin. The central computer
controlling the overall operation of the airplane is connected to these embedded
computers that monitor system functions and send status information.
The discussions in this chapter show that, just as there have been huge changes in
hardware over the last 50 years, there have been equally huge changes in system
software. We have progressed from a first-generation environment in which a user had to
personally manage the computing hardware, to current fourth-generation systems in
which users can request services from anywhere in the world using networking
capabilities and powerful and easy-touse graphical user interfaces. And just as hardware
capabilities continue to improve, there is a good deal of computer science research
directed at further improving the highlevel virtual environment created by a modern
fourth-generation operating system. A fifth-generation operating system is certainly not
far off.
Finally, new fifth-generation operating systems will create a truly distributed
computing environment in which users do not need to know the location of a given
resource within the network. This is analogous to the way that the manager of a business
gives instructions to an assistant: “Get this job done. I don’t care how or where. Just do it,
and when you are done, give me the results.” The details of how and where to get the job
done are left to the underling. The manager is concerned only with the final results.
D. Basic Networking Concepts
Every once in a while there occurs a technological innovation of such importance
that it forever changes society and the way people live, work, and communicate. The
invention of the printing press by Johannes Gutenberg in the mid-15th century was one
such development. The books and manuscripts it produced helped fuel the renewed
interest in science, art, and literature that came to be called the Renaissance, an era that
influenced Western civilization for more than 500 years. The Industrial Revolution of the
18th and early 19th centuries made consumer goods such as clothing, furniture, and
cooking utensils affordable to the middle class and changed European and American
societies from rural to urban and from agricultural to industrial. In the 20th century we
are certainly aware of the massive social changes, both good and bad, wrought by
inventions such as the telephone, automobile, airplane, television, computer, and
smartphone.
We are no doubt witnessing yet another breakthrough, one with the potential to
make as great a change in our lives as those just mentioned. This innovation is the
computer network—computers connected together for the purpose of sharing personal
communications, hardware and software resources, and information. During the early
stages of network development, the only information exchanged was text such as email,
database records, and technical papers. However, the material sent across a network
today can be virtually anything—television and radio shows, videos, music, photographs,
and movies, to name just a few. If information can be represented in binary, it can be
transmitted across a network.
Networking can also foster the growth of democracy and global understanding by
providing unrestricted access to newspapers, magazines, radio, and television, as well as
supporting the unfettered exchange of diverse and competing thoughts, ideas, and
opinions. However, it can also be a vehicle for spreading rumors, falsehoods, and
disinformation around the world in a fraction of a second. Because we live in an
increasingly information-oriented society, network technology contains the seeds of
massive social and economic change. It is no surprise that during civil uprisings, political
leaders who want to prevent the dissemination of opposing ideas often move quickly to
restrict access to the Internet, especially social media sites.
A computer network is a set of independent computer systems interconnected by
telecommunication links for the purpose of sharing information and resources. The
individual computers on a network are referred to as nodes or hosts, and they can range in
size from smartphones, tablets, and tiny laptops to massively parallel supercomputers. In
this section, we describe some of the basic technical characteristics of a computer
network. The communication links used to build a network vary widely in physical
characteristics, error rate, and transmission speed. In the approximately 50K years that
networks have existed, telecommunications facilities have undergone enormous changes.
In the early days of networking, the most common way to transmit data was via
switched, dial-up telephone lines. The term switched, dial-up means that when you dial a
telephone number, a circuit (i.e., a path) is temporarily established between the caller and
the call recipient. This circuit lasts for the duration of the call, and when you hang up it is
terminated. The voice-oriented dial-up telephone network was originally an analog
medium. As we first explained in Chapter 4, this means that the physical quantity used to
represent information, usually voltage level, is continuous and can take on any value.
In the early days of telecommunications—the 1970s and 1980s—the bandwidth,
or rate at which information could be sent and received, was limited to about 1,200–9,600
bits per second (bps). Advances in dial-up modem design produced devices that could
transmit at 56,000 bps, or 56KKbps, an order-of-magnitude increase. However, this is still
much too slow to handle the transmission of large multimedia-based documents such as
webpages, sound files, and streaming video.
Today, a technology called broadband has replaced modems and analog phone
lines for virtually all data communications. The term broadband generally refers to any
communication link with a transmission rate exceeding 256,000 bps. Today, most
broadband links have speeds well in excess of that, often 25 million bps or more. In the
case of home users, there are two widely available broadband options—digital subscriber
lines (DSL) and cable modems. A digital subscriber line (DSL) uses the same wires that
carry regular telephone signals into your home and therefore is provided by either your
local telephone company or someone certified to act as its intermediary. Although it uses
the same wires, a DSL signal uses a different set of frequencies, and it transmits digital
rather than analog signals. Therefore, the voice traffic generated by talking with a friend
on the phone does not interfere with a webpage being simultaneously downloaded by
someone else in the family. Furthermore, unlike the modem that requires that you
explicitly establish a connection (dial a number) and end a connection (hang up), a DSL
is a permanent “always-on” link, which eliminates the aggravating delay of dialing and
waiting for the circuit to be established.
In the commercial and office environment, the most widely used broadband
technology is Ethernet. Ethernet was developed in the mid-1970s by computer scientists
at the Xerox PARC research center in Palo Alto, California. It was originally designed to
operate at 10 Mbps using coaxial cable. However, 10 Mbps proved too slow for many
emerging applications, so in the early 1990s researchers developed a “new and
improved” version, called Fast Ethernet, which transmits at 100 Mbps across coaxial
cable, fiber-optic cable, or regular twisted-pair copper wire.
Because even 100 Mbps may not be fast enough for multimedia applications,
computer science researchers began investigating the concept of gigabit networking—
transmission lines that support speeds of 1 billion bits per second (Gbps). In 1998 the first
international gigabit Ethernet standard was adopted by the IEEE (Institute of Electrical
and Electronics Engineers), an international professional society responsible for, among
other things, developing industrial standards in the area of telecommunications. The
standard supports communication on an Ethernet cable at 1,000 Mbps (1KGbps), 100
times faster than the original 10 Mbps standard. Most classrooms and office buildings
today are wired to support Ethernet speeds of 1,000 Mbps—18,000 times faster than a
56K modem! In addition, virtually every desktop and laptop sold today comes with a
built-in Ethernet interface, and new homes and dorm rooms are often equipped with
Ethernet links.
However, not willing to rest on their laurels (and realizing that even faster
networks will be needed to support future research and development), work immediately
began on a new 10-gigabit Ethernet standard, a version of Ethernet with a data rate of 10
billion bits per second. That standard was adopted by the IEEE in 2003. To get an idea of
how fast that is, in a single second a 10 Gbps Ethernet network could transmit the
contents of 1,700 books, each 300 pages long. In June 2010, the IEEE ratified the 100-
gigabit Ethernet standard defining a local area network that can transmit data at the
almost unimaginable rate of 100 billion bits of information per second!
An extremely important development in the field of telecommunications is the
explosive growth in the use of wireless data communication using radio, microwave, and
infrared signals. Although devices such as DSLs and cable modems provide high-speed
network links, they require a user to be physically adjacent to the communication device
and to have a plug and cable with the appropriate connector. This is often inconvenient or
impossible. However, in the wireless world, users’ devices no longer need to be
physically connected to a wired network to communicate across a network. Wireless data
networks have liberated computer users just as mobile phones liberated telephone users.
Using wireless, you can be sipping coffee in your favorite café, riding in a car, or
working on the factory floor and still send and receive email, access online databases,
post to a social networking account, and surf the web, provided you can connect
(wirelessly, of course) to a wireless network. The ability to deliver data to users
regardless of their physical location is called mobile computing.
There are three types of wireless networks, and they are classified by the distance
that the wireless signal must travel—short, medium, and long distance. In a wireless local
area network (WLAN), a short-distance form of wireless networking, a user transmits
from his or her computer, tablet, or smartphone to a local wireless base station, often
referred to as a wireless router, access point, or hot spot, that is no more than a few
hundred feet away. This base station is then connected to a traditional wired network,
such as a DSL or cable modem, to provide full Internet access. This is the type of short-
distance wireless configuration typically found in a home, library, office, or coffee shop
because it is cheap, simple, low powered, and easy to install.
One of the most widely used standards for wireless local access is Wi-Fi, also
referred to by its official name, the IEEE 802.11 wireless network standard. Wi-Fi is used
to connect a computer to the Internet when it is within range (typically 150–300 feet or
45–90 meters) of a wireless base station, often advertised as a Wi-Fi hot spot. Wi-Fi
systems generally use the 2.4 GHz radio band for communications and support download
transmission speeds of about 10–50 Mbps. Researchers are investigating the use of higher
radio frequencies to support gigabit Wi-Fi communication speeds. Another popular short-
distance wireless standard is Bluetooth. It is a low-power wireless standard used to
communicate between devices located very close to each other, typically no more than
20–30 feet (6–10 meters) apart. Bluetooth is often used to support communication from
wireless peripherals such as mice, printers, earphones, or keyboards, to a laptop or
desktop system located close by. It also supports exchanges between other digital devices
including mobile phones, cameras, speakers, video game consoles, and your automobile’s
sound system. Bluetooth is a popular technique for implementing what is termed a
personal area network (PAN), a collection of privately owned interconnected digital
devices all located in close proximity.
A relatively new development in wireless networking is the mediumdistance
metropolitan area network (MAN). This is a wireless network whose scope is larger than
the few hundred feet of a WLAN, typically a few blocks up to an entire city. Its purpose
is to provide full Internet connectivity to all computers within a neighborhood or
metropolitan area. A number of cities in the United States, Europe, and Asia have
installed public access Wi-Fi routers every few blocks, often on top of telephone poles or
tall buildings. These routers provide convenient, low-cost wireless Internet access to all
residents. The idea behind a MAN is to treat Internet services as a public utility, much
like electricity, gas, and water, which is provided to individuals by a local or regional
government agency.
The third wireless network category (after the short-distance LAN and the
medium-distance MAN) is long-distance wireless service, called a wireless wide area
network (WWAN). A wide area network or WAN connects devices that are not in close
proximity but are across town, across the country, or across the ocean. In a WWAN, the
computer (often a tablet or smartphone) transmits messages to a remote base station
provided by a telecommunications company, which may be located many miles away.
The base station is usually a large cellular antenna placed on top of a tower or building,
providing both long-distance voice and data communication services to any system
within sight of the tower. One of the most popular wide area wireless technologies is
called 4G, for fourth generation technology. It offers voice services as well as data
communication at rates of 50 to 500 Mbps, with peak speeds reaching 1 Gbps.
Although wireless data communication is an exciting development in computer
networking, it is not without problems that must be studied and solved. For example,
some forms of wireless, such as microwaves, are line of sight, traveling only in a straight
line. Because of the curvature of the Earth, transmitters must be placed on top of hills or
tall buildings, and they cannot be more than about 10–50 miles (15–80 kilometers) apart,
depending on height. This can leave small geographical regions (often termed “dead
zones”) that do not have access to cellular data or voice services. Other types of wireless
media suffer from environmental problems; they are strongly affected by rain and fog,
cannot pass through obstacles such as buildings or large trees, and have higher error rates
than wired communication. Although a few random “clicks” and “pops” do not disrupt
voice communications over a mobile phone, it can be disastrous for some types of data
communications. For example, if you are transmitting data at 100 million bits per second
(Mbps), a breakup on the line that lasts only one one-hundredth of a second could cause
the loss of one million bits of data. Although the loss of one million bits might not
significantly affect your ability to enjoy an HD movie, it could have serious
consequences on the transmission of financial data. Finally, there is the issue of security.
Currently, it is not difficult to intercept wireless transmissions and gain unauthorized
access to user messages. All of these are ongoing concerns being investigated by the
computer science and telecommunications research community. However, the rapid
increase in the number of mobile devices along with the ease and convenience of remote
access guarantees the continuing growth and popularity of wireless data communications.
A local area network (LAN) connects hardware devices such as computers,
printers, and storage devices that are all in relatively close proximity (150–300 ft/45–90
m). (A diagram of a LAN was provided in Figure 6.20.) Examples of LANs include the
interconnection of machines in one room or in the same office building. An important
characteristic of a LAN is that the owner of the computers is also the owner of the means
of communications. Because a LAN is located entirely on private property, the owner can
install telecommunications facilities without having to purchase services from a third-
party provider such as a phone or cable company, although a thirdparty provider is still
needed to connect the LAN to the outside world.
The previous section described how a wireless local area network can be set up
using Wi-Fi and a router connected to a wired network. Here we take a look at the
properties of that wired network. Wired LANs can be constructed using a number of
different topologies; some of the most common are shown in Figure 7.5. In the bus
topology, Figure 7.5(a), all nodes are connected to a single, shared communication line. If
two or more nodes use the link at the same time, the messages collide and are unreadable,
and, therefore, nodes must take turns using the line. The cable modem technology
described in Section 7.2.1 is based on a bus topology. A number of homes are all
connected to the same shared coaxial cable. If two users want to download a webpage at
the exact same time, then the effective transmission rate is lower than expected because
one of them must wait. The ring topology of Figure 7.5(b) connects the network nodes in
a circular fashion, with messages circulating around the ring in either a clockwise or
counterclockwise direction until they reach their destination. Finally, the star topology,
Figure 7.5(c), has a single central node that is connected to all other sites. This central
node can route information directly to any other node in the LAN. Messages are first sent
to the central site, which then forwards them to the correct location.
There are two ways to construct an Ethernet LAN. In the first method, called the
shared cable, a wire (such as twisted-pair copper wire, coaxial cable, or fiber-optic cable)
is literally strung around and through a building. Users tap into the cable at its nearest
point using a device called a transceiver, as shown in Figure 7.6(a). Because of technical
constraints, an Ethernet cable has a maximum allowable length. For a large building or
campus, it may be necessary to install two or more separate cables and connect them via
hardware devices called repeaters or bridges. A repeater is a device that simply amplifies
and forwards a signal. In Figure 7.6(b), if the device connecting the two LANs is a
repeater, then every message on LAN1 is forwarded to LAN2, and vice versa. Thus,
when two Ethernet LANs are connected by a repeater, they function exactly as if they
were a single network.
As defined previously, a wide area network (WAN) connects devices that are not
in close physical proximity. Because WANs cross public property, the WAN owner must
purchase telecommunications services, like those described in Section 7.2.1, from an
external provider. Typically, these are dedicated point-to-point lines or wireless links that
directly connect two machines, not the shared channels found on a LAN such as Ethernet.
The typical structure of a WAN is shown in Figure 7.8. This type of interconnection
system in which a node is connected to other network nodes via direct links is called a
mesh network.
We have defined three classes of networks, LANs, MANs, and WANs, but all
real-world networks, including the Internet, are a complex mix of all three of these
network types. For example, a company or a college would typically have one or more
LANs connecting its local computers—a computer science department LAN, a
humanities division LAN, an administration building LAN, and so forth. These individual
LANs might then be interconnected into a private company or campus network that
allows users to send email to other employees in the company and access the resources of
other departments. These individual networks are interconnected via a device called a
router. Like the bridge in Figure 7.6(b), a router transmits messages between two distinct
networks. However, unlike a bridge, which connects two identical types of networks,
routers can transmit information between networks that use totally different
communication techniques—much as an interpreter functions between two people who
speak different languages. For example, a router, not a bridge, is used to send messages
from a wireless Wi-Fi network to a wired Ethernet LAN or from an Ethernet LAN to a
packet-switched, store-and-forward WAN.
E. Communication Protocols
When you talk on the telephone, there is an accepted set of procedures that you
follow. For example, when you answer the phone, you say “Hello,” and then wait for the
individual on the other end to respond. The conversation continues until someone says
“Goodbye,” at which time both parties hang up. You might call this “telephone
etiquette”—the conventions that allow orderly exchanges to take place. Imagine what
would happen if someone were unaware of them. Such a person might pick up the phone
but not say anything. Hearing silence, the caller would be totally confused, think the call
did not get through, and hang up.
In networking, a protocol is a mutually agreed-upon set of rules, conventions, and
agreements for the efficient and orderly exchange of information. Even though the
Internet has more than 1 billion host machines made by dozens of different manufacturers
and located in hundreds of countries, they can all exchange messages correctly and
efficiently for one simple reason: They have all agreed to use the same protocols to
govern that exchange. You might think that something as massive and global as the
Internet would be managed by either the governments of the major industrialized nations
or an international agency like the United Nations. In fact, the Internet is operated by the
Internet Society, a nonprofit, nongovernmental, professional society composed of 145
worldwide organizations (foundations, government agencies, educational institutions,
companies) along with 80,000 individual members in 100 countries united by the
common goal of maintaining the viability and health of the Internet. This group, along
with its subcommittees, the Internet Architecture Board (IAB) and the Internet
Engineering Task Force (IETF), establishes and enforces network protocol standards.
The Internet protocol hierarchy, also called a protocol stack, has five layers, and
their names and some examples are listed in Figure 7.14. This hierarchy is also referred
to as TCP/IP, after the names of two of its most important protocols. The Physical layer
protocols govern the exchange of binary digits (bits) across a physical communication
channel, such as a fiber-optic cable, copper wire, or wireless radio channel.
The Physical layer protocols create a bit pipe between two machines connected by
a communication link. However, this link is not an error-free channel, and due to
interference or weather or any number of other factors, errors can be introduced into the
transmitted bit stream. The bits that come out might not be an exact copy of the bits that
went in. This creates what is called the error detection and correction problem—how do
we detect when errors occur, and how do we correct them? Also, because we want to
receive complete messages, not just raw streams of bits, we need to know which bits in
the incoming stream belong together; that is, we need to identify the start and the end of a
message. This is called framing.
However, although shared by many machines, at any single point in time, this line
is capable of sending and receiving only a single message. Attempting to send two or
more messages at the same time results in all messages being garbled and none getting
through. In this environment, a necessary first step in transmitting a message is
determining how to allocate this shared line among the competing machines. The
Medium Access Control protocols determine how to arbitrate ownership of a shared
communication line when multiple nodes want to send messages at the same time.
If your network uses point-to-point links like those in Figure 7.8, rather than
shared lines, you do not need the Medium Access Control protocols just described
because any two machines along the path are connected by a dedicated line. Therefore,
regardless of whether you are using a shared channel or a point-to-point link, you now
have a sender and a receiver, who want to exchange a single message, and these two
nodes are directly connected by a channel. It is the job of the Layer 2b Logical Link
Control protocols to solve the error detection and correction problem and ensure that the
message traveling across this channel from source to destination arrives correctly. How is
it possible to turn an inherently error-prone bit pipe like the one in Figure 7.15 into an
error-free channel? In fact, we cannot eliminate errors, but we can detect that an error has
occurred and retransmit a new and unblemished copy of the original message. The ARQ
algorithm, for automatic repeat request, is the basis for all Data Link Control protocols in
current use.
The first two layers of the protocol stack enable us to transmit messages from
node A to node B, but only if these two nodes are directly connected by a physical link. If
we look back at the model of a wide area network shown in Figure 7.8, we see that the
great majority of nodes are not directly connected. It is the job of the end-to-end Network
layer protocols to deliver a message from the site where it was created to its ultimate
destination. To accomplish this delivery task, every node must agree to use the same
addressing scheme so that everyone is able to identify that ultimate destination.
F. Network Services and Benefits
Email (electronic mail) has been the single most popular application of networks
for the last 35 years. It is estimated that about 400 billion email messages are transmitted
across the Internet every day! When the Internet was first developed, its designers
thought it would be an ideal way for scientists and engineers to access important software
packages and data files stored on remote computers. However, the first Internet “killer
app” was rather unexpected and something quite different—email.
While some early email messages did contain technical content, even more were
of the “Wanna meet for lunch today?” variety. Linking people together for purposes of
social interaction has been a popular use of computer networks since their earliest days.
Following the enormous success of email in the early 1970s, there were many other
attempts to foster online communities. In 1980, a system called Usenet was developed. It
was similar to a BBS with the added feature of having newsgroups—subgroups with a
mutual interest in one specific topic, such as space flight, Chinese cooking, or Minnesota
Vikings football. BBSs and Usenet were popular from the 1980s until the mid-1990s
when they began to be replaced by web-based applications with a similar goal—allowing
people to exchange thoughts, ideas, opinions, and stories. However, the web’s powerful
graphics capabilities and hypertext linking features allowed the scope of that sharing to
increase dramatically, from text to all types of sound, graphics, videos, and imaging, and
from the simple exchange of messages to advanced features such as mobile access, online
profiles, trust-based recommendation systems, “friending” controls, blog postings,
contact lists, privacy management, and geosocial networking that organize users on the
basis of geographic location. The applications that support these types of social
exchanges are called social networks.
Another important network service is resource sharing, the ability to share
physical resources, such as a 3-D printer or massive terabyte storage device, as well as
logical resources, such as software and data, among multiple users. The prices of
computers and peripherals have been dropping for many years, so it is tempting to think
that everyone can buy their own specialized I/O units or mass storage devices. However,
that is not always a cost-effective way to configure computer systems. For example, a
high-volume color laser printer may be used infrequently. Buying everyone in the office
his or her own printer would leave most of the printers idle for long periods of time and
would cost huge amounts for all the toner cartridges. It would be far more efficient to
have a few shared printers, called print servers, which can be accessed whenever needed.
Similarly, if a group of users requires access to a data file or a piece of software, it may
make sense to keep a single copy on a set of shared network disks, called a file server. A
network file server can be a cost-effective way to provide backup services as well as
make it easier to access information from multiple devices such as your desktop
computer at work, your tablet computer at home, and your smartphone on the road.
Electronic commerce (or just ecommerce) is a general term applied to any use of
computers and networking to support the paperless exchange of goods, information, and
services in the commercial sector. The idea of using computers and networks to do
business has been around for some time; the early applications of ecommerce include (1)
the automatic deposit of paychecks, (2) automatic teller machines (ATMs) for handling
financial transactions from remote sites, and (3) the use of scanning devices at checkout
counters to capture sales and inventory information in machine-readable form.
G. Cloud Computing
It is not cost effective to replicate expensive and infrequently used hardware,
software, or data resources on every machine on your campus, office, or research center.
Because of the economies of scale, it is far cheaper for an organization to purchase a
shared resource (such as a server) and make it available on demand to users (clients) via a
local area network. For over two decades the client/server model was the most widely
used technique for sharing computational resources. However, this model is not without
problems, many of them quite serious. For example, the client/server approach can
require large up-front capital expenditures to purchase the server, buy the software
needed to access it, create the appropriate physical space, and install the system.
The new server may incur significant operating costs for network connections,
power, cooling, spare parts, staff training, documentation, and repair. When clients
request enhanced services, your organization either has to purchase the necessary
upgrades or design, implement, and test these new services using in-house technical staff.
Finally, you must purchase enough capacity to handle the maximum theoretical needs of
the entire client community. Otherwise, when a user requests a service he or she could be
turned down because the system is overloaded. Unfortunately, providing sufficient
capacity for peak needs leaves servers underutilized a majority of the time.
Because of these shortcomings, a new model for shared access to computing
resources has begun to emerge, a model called cloud computing. (The term comes from
the cloud diagram used to represent this model, as shown in Figure 7.25.) Cloud
computing behaves much like the client/server model of Figure 7.24 in that there are
server nodes that provide services and client nodes that access those services. However,
with cloud computing the servers no longer need to be local to the client population, and
they no longer must be provided by your own organization. A client requests the services
of a server via a communication network such as the Internet using a desktop computer,
laptop, tablet, or mobile device, but the client has no idea of where the physical server is
or even if the server is a single device or part of a larger server farm—an integrated
collection of machines providing services over a network that would not be possible
using only a single device.
The logical concept of a computational resource (hardware, software, data) has
been divorced from the physical realization of how that service is provided (its location,
manufacturer, ownership, or technical structure). The term for the separation of a service
from the entity (or entities) providing that service is virtualization, and it is one of the
fundamental properties of cloud computing. For example, you use the concept of
virtualization whenever you back up a smartphone or tablet to “the cloud.” You have no
idea where this data is going, how it is being stored, or who is managing the storage. You
don’t even know if it is being stored in a single location or distributed to multiple
machines around the globe. You only know that it has been stored securely, and that you
will be able to retrieve it if and when it is needed. Contrast this approach with how you
backed up the hard drive on your desktop just a few years back. You would copy the
information to a flash drive or an external hard drive that you purchased for this task and
for which you took full responsibility to keep safe and secure.
he philosophy of cloud computing is to sell hardware, software, and data
capabilities as complete, prepackaged services in which the technical details of
networking, management, support, and implementation are hidden from users, who
simply request and receive designated services at a specified cost. The user is freed from
the messy and often quite complex details about how that service is being provided.
There are many types of cloud services provided by a huge number of cloud
computing companies, but the services typically fall into one of three categories. The
simplest and most basic is infrastructure services, where a provider offers access to
shared resources that users do not wish to purchase and maintain themselves, resources
such as storage and data backup facilities or access to specialized input/output devices.
This is the type of service you use whenever you back up a tablet or smartphone to the
cloud rather than to your own desktop or laptop. Application services provide shared
access to software packages such as email, games, accounting, finance, or document
creation. By sharing these software resources users are freed from the costs associated
with buying, maintaining, and upgrading these expensive packages. This is the type of
cloud service you exploit if you use Google Mail to manage your email or Google Drive
to collaborate with others in writing and editing shared documents. The most
sophisticated form of cloud computing is platform and development services. Companies
that create new software such as apps for the Apple iPhone often need sophisticated and
expensive development platforms to design, code, and test their new applications. Cloud
computing can provide, in a totally transparent way, a powerful software development
environment that includes such tools as language translators, debuggers, testers,
efficiency metrics, and documentation systems—basically everything a programmer
could possibly need to create and market new software packages.
In the past two chapters we have described how system software can create a
virtual environment that is easier for users to operate and understand. In the last 50 or so
years, that virtual environment has grown ever more powerful and provided users with
greater access to an enormous range of resources. The next step in that ongoing process is
cloud computing. With cloud computing, not only are the resources of a single system
and shared local servers accessible in a transparent way, the entire communications
network as well as a global network of computational facilities becomes available in a
totally transparent manner. With the simple push of a key, click of a mouse, tap of a
finger, or voice command, a plethora of powerful services is available to a user without
any concern about who is providing this service or where it is happening. This is certainly
a most powerful virtual environment in which to work.
H. A History of the Internet and the World Wide Web
In the preceding sections, we discussed the technical characteristics and services
of networks in general. However, to most people, the phrase computer network isn’t a
generalized term but a very specific one—the global Internet and its most popular
component, the World Wide Web. In this section, we highlight the history, development,
and growth of the Internet and the World Wide Web. Much of the information in the
following pages is taken from the original 1997 article “A Brief History of the Internet,”
written by its original designers and available on the web.
The Internet is an idea that has been floating around for more than 50 years. The
concept first took shape during the early 1960s and was based on the work of computer
scientists at MIT and the RAND Corporation in the United States and the NPL Research
Laboratory in Great Britain. The first proposal for building a computer network was
made by J. C. R. Licklider of MIT in August 1962. He wrote his colleagues a memo titled
(somewhat dramatically) “The Galactic Network,” in which he described a globally
interconnected set of computers through which everyone could access data and software.
He convinced other researchers at MIT, including Larry Roberts and Leonard Kleinrock,
of the validity of his ideas. From 1962 to 1967, they and others investigated the
theoretical foundations of wide area networking, especially such fundamental technical
concepts as protocols, packet switching, and routing.
Farsighted researchers at ARPA, in particular Robert Kahn, realized that this
rapid and unplanned proliferation of independent networks would lead to
incompatibilities and prevent users on different networks from communicating with each
other, a situation that brings to mind the problems that national railway systems have
sharing railcars because of their use of different gauge track. Kahn knew that to obtain
maximum benefits from this new technology, all networks need to communicate in a
standardized fashion. He developed the concept of internetworking, which stated that any
WAN is free to do whatever it wants internally. However, at the point where two
networks meet, both must use a common addressing scheme and identical protocols—that
is, they must speak the same language.
Tim Berners-Lee, a researcher at CERN, the European High Energy Physics
Laboratory in Geneva, Switzerland, first developed the idea for a hypertextbased
information distribution system in 1989. Because physics research is often done by teams
of people from different universities, he wanted to create a way for scientists throughout
Europe and North America to easily exchange information such as research articles,
journals, and experimental data. Although they could use existing Internet services such
as FTP and email, Berners-Lee wanted to make information sharing easier and more
intuitive for people unfamiliar with computer networks.
Beginning in 1990, Berners-Lee designed and built a system using the concept of
hypertext, a collection of documents interconnected by pointers, called links, as shown in
Figure 7.28. Traditional documents are meant to be read linearly from beginning to end,
but users of hypertext documents (called pages in web parlance) are free to navigate the
collection in whatever order they want, using the links to move freely from page to page.
Berners-Lee reasoned that the idea of hypertext matched up very well with the concept of
networking and the Internet. Hypertext documents could be stored on the machines of the
Internet, and a link would be the name of a page along with the IP address of the machine
where that page is stored. He called his hypertext link a URL, an acronym for Uniform
Resource Locator, and it is the worldwide identification of a webpage located on a
specific host computer on the Internet.
Berners-Lee named his new information system the World Wide Web, and it was
completed and made available to all researchers at CERN in August 1991, the date that
marks the birth of the web. It became an instant success, and traffic on the CERN web
server increased by 1,000% in its first two years of use. In April 1993, the directors of
CERN, realizing the beneficial impact that the web could have on research throughout the
world, announced that, effective immediately, all web technology developed at CERN
would be freely available to everyone without fees or royalties. For many people, this
important announcement really marks the emergence of the World Wide Web on a global
scale.
Computer networking has changed enormously in the 50 years that it has been
around. From a specialized communication system devoted to academic research, it has
blossomed into a worldwide information system. What was once the esoteric domain of a
few thousand scientists is now used by billions of people, the vast majority of whom have
no formal training in computer science. From providing access to technical databases and
research journals, it has become a way for the average citizen to shop, chat, stay
informed, and be entertained. There is every reason to believe that the Internet will
continue to grow and evolve as much in the coming years as it has in the past.
The most pressing issue facing the Internet today is not better technology or new
killer apps. Those issues have been and will continue to be addressed and solved. The
biggest concern today is how the growth and direction of networking will be managed
and controlled. In its early days, the Internet was run by a core group of specialists
without a financial stake in its future, and its management was relatively simple. Now
that it is a global phenomenon that affects billions of people and generates hundreds of
billions of dollars in revenue, the Internet is being pulled and tugged by many new
constituencies and stakeholders, such as corporations, politicians, lawyers, advertisers,
government agencies, and manufacturers. The important question now is who will speak
for the Internet in the future and who will help shape its destiny.