There are two types of network applications. One type is an implementation
whose operation is specified in a protocol standard, such as an RFC or some
other standards document; such an application is sometimes referred to as
“open,” since the rules specifying its operation are known to all. For such an
implementation, the client and server programs must conform to the rules dictated by the RFC. For example, the client program could be an implementation
of the client side of the FTP protocol, described in Section 2.3 and explicitly
defined in RFC 959; similarly, the server program could be an implementation of
the FTP server protocol, also explicitly defined in RFC 959. If one developer
writes code for the client program and another developer writes code for the
server program, and both developers carefully follow the rules of the RFC, then
the two programs will be able to interoperate. Indeed, many of today’s network
applications involve communication between client and server programs that
have been created by independent developers—for example, a Firefox browser
communicating with an Apache Web server, or a BitTorrent client communicating with BitTorrent tracker.