本节书摘来自异步社区《Windows网络与通信程序设计(第3版)》一书中的第1章,第1.1节,作者: 陈香凝 , 王烨阳 , 陈婷婷 , 张铮 更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.2 计算机网络参考模型
了解网络的相关概念之后,本节将讨论计算机网络中主机之间是如何进行通信的,以及各种通信协议之间的关系等。
1.2.1 协议层次
为了降低设计难度,大部分网络都以层(layer或level)的形式组织在一起,每一层都建立在它的下层之上,使用它的下层提供的服务,下层对它的上层隐藏了服务实现的细节。这种方法几乎应用于整个计算机科学领域,也可以称为信息隐藏、数据类型抽象、数据封装、面向对象编程等。
一个机器上的第n层和另一个机器的第n层交流,所使用的规则和协定合起来称为第n层协议。这里的协议,是指通信双方关于如何进行通信的一种约定。各层和各层协议的集合称为网络体系(network architecture)。特定系统所使用的一组协议称为协议堆栈(protocol stack)。下面介绍Inernet网络分层情况和它的协议堆栈。
1.2.2 TCP/IP参考模型
为了帮助不同的厂商标准化和一体化它们的网络软件,1974年,国际标准化组织(ISO,International Organization for Standardization)为在机器之间传送数据定义了一个软件模型,就是著名的OSI模型(Open Systems Interconnection,开放式系统互联模型)。这个模型共有7层,如图1.1所示。
OSI参考模型仅是一个理想方案,几乎没有什么系统能够完全实现它,它存在的作用是给人们一个设计网络体系的框架。机器上的每一层都假设它正在直接与另一机器的同一层“交谈”,它们“说”相同的语言,或者协议,各层的目的是向更高的层提供服务,抽象低层的实现细节。TCP/IP实现了OSI参考模型中的5层,如图1.2所示,各层使用的协议连在一起便是互联网协议堆栈。
1.2.3 应用层(Application Layer)
应用层是网络应用程序和它们的应用层协议存在的地方。Internet应用层包含许多协议,如HTTP(它提供Web文档的请求和传输)、SMTP(它提供e-mail消息的传输)和FTP(它提供两个终端系统间的文件传输)。一些特定的网络功能,如映射主机名到它们的网络地址的DNS(Domain Name System,域名服务器)也在此层完成。
应用层程序设计在现实生活中应用最广泛,因为它是直接面向用户的。本书在后面要讨论的客户端和服务器端程序、P2P通信程序等都属于此层。本书使用应用层消息来表示应用层的数据传输单元。
1.2.4 传输层(Transport Layer)
Internet的传输层在应用程序的客户和服务器之间传递应用层消息,在这里定义了两个点对点的传输协议——TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)。
TCP 是一个可靠的面向连接的协议,它允许源于一个机器的字节流被无错误地传输到Internet 上的任何其他机器。TCP将上层传递的字节流分成封包,再接着传递到它的下层——网络层。在接收方,TCP重新集合接收到的封包,将其转化成为输出流。TCP也处理流控制,以确保一个快的发送者不会发送太多的封包而淹没接收者。
UDP是一个不可靠的无连接的协议,它是为那些不需要TCP的序列号管理和流控制,而想自己提供这些功能的应用程序设计的。
Windows为传输层的编程接口提供了Socket函数,即通常所说的Winsock。网络程序设计者可以非常方便地使用Winsock开发基于TCP或者UDP的应用程序。本章后面要详细讨论这些编程接口。
本书使用节(segment)来表示传输层封包。
1.2.5 网络层(Network Layer)
Internet的网络层负责将网络层封包从一个主机移动到其他主机,这里的网络封包称为数据报(datagram)。在源主机,Internet传输层协议(TCP或UDP)向网络层传递一个传输层节和一个目的地址,就如同你给邮递员一个带有地址的信。然后,网络层提供将这个节邮递到目的主机传输层的服务。
Internet的网络层有两个基本组件。一个是IP协议,它定义了数据报中各域以及终端系统和路由器如何在这些域上进行操作。仅有一个IP(Internet Protocol)协议,所有网络层的Internet组件都必须运行这个协议。另一个是路由协议,它们用来决定数据报所走的路径。网络层的路由协议很多,因为Internet含有多种不同类型的网络,各个网络使用的路由协议有可能不同。即便是这样,网络层还是经常被人们简单地称为IP层,反映了IP是将Internet绑在一起的胶带。
网络层包含了子网的操作,是懂得网络拓扑结构(网络中机器的物理配置、带宽的限制等)的最高层,也是内网通信的最高层。它的责任是确定数据的物理路径。
1.2.6 链路层(Link Layer)
Internet的网络层通过一系列的路由器在源地址和目的地址之间传输数据报。为了将封包从路径上的一个节点移动到下一个节点,网络层依赖于链路层的服务。在每个节点,网络层传递数据报到下面的链路层,让它将之发送到路径上的下一个节点。在下一个节点,链路层再把这个数据报传递给网络层。
链路层间的通信方式有两种,一种是将数据发给它所有相邻的节点,这便是广泛用于LAN(Local Area Network,局域网)的广播通信;另一种是应用于WAN中的点对点通信,例如,两个路由器之间或者住宅的拨号调制解调器(Modem)和ISP路由之间的通信。对应这两种通信方式的常用协议有Ethernet和Point-to-Point(PPP)。
对一个给定的连接来说,链路层协议主要实现在适配器中,即我们平常所说的NIC(Network Interface Card,网卡),它有一个主机总线接口和一个连接接口。传输节点的网络层把网络层数据报传递到适配器,由适配器将此数据报封装到链路层的帧中,然后把这个帧传输到物理层通信链路。在另一方,接收适配器接收到整个帧,从中萃取出网络层数据报,将它传给网络层。
本书将使用帧(frame)来表示链路层封包。
1.2.7 物理层(Physical Layer)
链路层的工作是从一个网络节点向其临近的网络节点传送整个帧,其下面的物理层的工作是将帧中的原始比特流从一个节点传送到下一个节点。应用于此层的协议在TCP/IP参考模型中并没有定义,它们与连接有关,更依赖于传输介质。例如,以太网有许多物理层协议,有针对双绞线的,有针对同轴电缆的,有针对光纤的,等等。它们都以不同的方式在链接中传送数据位。