网络是可以交换数据的互相连接的计算机的集合。网络的类型很多,如LAN(Local Area Network,局域网)、WAN(Wide Area Network,广域网)、Internet(互联网)。为了确保所有的传输平稳地进行,网络建立在协议之上。
协议就是一组规定,它描述了数据传送的格式。协议描述了通过网络如何交流数据,这可以和人类语言相比较:在最底层每一个人都可以发出和听到声音(比较:电子信号),但是只有使用双方都知道的语言(比较:协议)人们才可以交流信息。
网络工作在通信协议之上,协议有多层,在交流过程中每一层协议有各自的任务。现在非常普遍的是使用TCP/IP的以太局域网(ethernet LAN)。在局域网中,计算机可以用同轴电缆、双交线或光纤连接起来。现在大多数网络使用双交线连接。广域网和Internet(许多局域网的集合)使用了大部分应用于以太网的技术,因此,首先要介绍以太网。
1.介质访问控制(MAC)层
以太网的最底层是硬件层,称为介质访问控制(Media Access Control,MAC)层。例如,网卡属于该层,它包含了串行网络接口和一个控制器,控制器帮助将原始数据转换为电子信号,并发送到正确位置。
通过网络发送的封包当然需要到达它们的目的地,因此必定存在一些寻址方式。以太网接口的各层都有不同的寻址方法,在最下面的MAC层,寻址是通过MAC号进行的。
MAC号是一个48位的标识,它被硬性分配到每一个网络接口单元。这些号码是由IEEE注册权威分配的,他们保证每个以太网分点都有一个世界惟一的号码。MAC号通常用以冒号分割的16进制数表示,如14:74:A0:17:95:D7。
为了将封包发送到其他网络接口,封包应该包含MAC号。LAN使用非常简单的方法——广播发送封包到正确接口。这意味着网卡会发送封包到它所能到达的每个接口。每个接收到封包的接口查看封包的目的MAC号,仅在同自己的MAC号相同时才处理。这个方法在局域网上容易实现,效率非常高,但是更大的网络(WAN、Internet)上,因为很明显的原因不能使用这种方法,您不会希望一个人发送的封包会被互联网上所有其他人都接收到吧。WAN使用更好的路由机制,这里不讨论它。仅仅记住,在最底层寻址是通过MAC号进行的。
2.网际协议(IP)层
硬件层之上是IP(Internet Protocol,网际协议)层。与MAC层相似,IP也有它自己的寻址方式——使用IP地址。
IP地址是用来在网络接口的IP层进行寻址的号码。最广泛使用的版本是IPv4,它是一个32位的值,以众所周知的点格式表示,如209.217.52.4。与MAC地址不同,IP地址没有集成到硬件中,它是在自己的软件层设置的。
互联网使用IP地址来惟一地标识一个计算机。IP地址可以通过软件分配给网络接口,做这项工作时会将IP地址和网络接口的MAC地址关联在一起。为了使用IP寻址,关联的MAC地址需要保存起来,这由ARP(Address Resolution Protocol,地址解析协议)负责。每个主机都维护了一个记录IP和MAC地址对的清单,如果用户使用的IP地址没有在此清单中,主机发出一个询问包到局域网的其他计算机,以获取与之相匹配的MAC地址。如果此局域网中有计算机可以识别此IP地址,它送回对应的MAC地址;如果没有,封包就会被送到网关(gateway)——发送封包到外部网络的计算机。IP到MAC的转化实际上是在数据链接层进行的。
IP协议添加源地址和目的地址到封包,同时也添加其他封包属性,如TTL hops(time to live hops,生存时间),使用的协议版本、效验头等。
3.传输控制协议(TCP)层
IP层之上是TCP层(或者UDP层)。这层距离网络应用程序非常近,要做的事情很多。TCP为寻址增加了最后一个限制——端口号。
IP地址用来寻址指定的计算机或者网络设备,而端口号用来确定运行在目的设备上的哪个应用程序应该接收这个封包。端口号是16位的,范围在0~65536之内。在设备上寻址端口号时经常使用的符号是"IP:portnumber",例如,209.217.52.4:80。连接的两端都要使用端口号,但是没有必要相同。
许多公共服务都使用固定的端口号,例如,WWW(World Wide Web,万维网)默认使用的端口号为80,FTP(File Transfer Protocol,文件传输协议)使用的是21,E-mail使用25(SMTP,简单邮件传输协议)和110(POP3,邮局协议)。自定义服务一般使用高于1024的端口号。
IP层不关心传输是否成功,但TCP层关心。TCP层确保数据正确地到达。它也让接收者控制数据流动,例如,接收者可以决定什么时候接收数据。如果一个封包在到达目的的路途中丢失了,TCP重发此封包。如果封包到达的顺序与原始顺序不同,TCP会重新为它们排序。TCP是面向连接的,它是传输连续数据流的最好选择。
TCP的另一个选择是UDP,它并没有这些特性,不能确保封包的到达。UDP是无连接的面向数据报的传输协议,正因为如此,它的传输效率要比TCP高得多。
4.软件层
TCP层之上是网络软件。在Windows下,应用程序并不直接访问TCP层,而是通过Winsock API访问。软件层提供了非常方便的访问网络的方式。由于所有下层协议的存在,在软件层不必担心封包、封包大小、数据错误、对丢失封包的重发等。
图10.1所示为以太网接口堆栈中每个协议的封装形式,它们都是从软件层开始的。
软件层包含了用户请求发送的数据,有时这块数据会有固定的格式(如HTTP、FTP协议)。用户数据首先取得包含源端口号和目的端口号的TCP头。然后添加IP头,它包含发送者和接收者的IP地址。最后数据链路层添加以太网头,它指定了发送者和接受者的MAC地址,这是真正通过电缆发送的数据。
TCP/IP是面向连接的协议。连接的两个设备之间,每一方都使用它自己的IP地址和端口号。通常,一方称为客户,另一方称为服务器。
客户是发出请求方,服务器响应它们。例如,当打开网站时,浏览器是客户,WebServer是服务器。浏览器发出连接请求,初始化和服务器的连接,请求指定的资源。服务器然后返回响应和请求的数据。
服务器通常是等待客户连接,这叫做监听(listening),这一般是在特定的IP地址和端口号进行。客户仅在有必要时才启动,因为客户总是一个连接的发起者,信息的请求者。为了创建连接,客户需要知道服务器正在监听的IP地址和端口号。
服务器和客户方都需要使用IP地址和端口号,但是服务器的IP地址和端口号通常是固定的。WWW的标准端口是80(使用HTTP协议)。以人民邮电出版社网站为例,它的Web服务器的端口号是80,IP地址是219.238.168.74。每一个访问此网站的客户都需连接到这个IP和端口,因此Web服务器在相同的端口上可以有许多连接。在客户方,端口号并不重要,任何端口都可以使用。
工作在软件层的几个协议,如HTTP、FTP、POP3、SMTP等,大多数是以服务器/客户机方式工作的。例如,客户产生请求,服务器响应。请求和响应数据的准确格式由这些协议定义。