学习完网络的基本结构和一些基本知识之后,我从应用层开始自顶向下学习网络的五层模型。
2.1 网络应用程序体系结构
一个网络程序在设计之初就应该决定下来其架构,今天在网络中存在的程序/软件体系架构有三种:客户-服务器体系结构(C/S)、浏览器-服务器体系结构(B/S)和对等(P2P)体系结构。
2.1.1 C/S结构
在C/S结构中,有一个总是打开的主机称为服务器,它服务于来自许多其它称为客户的主机的请求。比如我们熟悉的各种网络游戏,便是这种结构。可以说大多数有客户端程序的应用一般都是基于这种结构。在一个C-S应用中,常常会有一台单独的服务器跟不上它所有客户请求的情况,这时配备大量主机的数据中心常常被用于创建强大的虚拟服务器。C/S架构的优点是能充分发挥客户端PC的处理能力,许多数据处理可以在客户端做完后再与服务器交互。
![](https://i-blog.csdnimg.cn/blog_migrate/636760563dfdc59151cb4d17f63b767a.png)
2.1.2 B/S结构
B/S架构与C/S类似,全称为浏览器-服务器体系结构,也就是把客户端换为了浏览器,用户通过浏览器发送请求,与服务器交互、收到回复等等。与C/S不同,B/S将大多数的处理逻辑和计算压力放在了服务器上,这对服务器性能提出了更高的需求。当我们打开Chrome,输入某个url(如www.baidu.com),再搜索一些想要的结果,便是B/S架构应用的一次实现。
![](https://i-blog.csdnimg.cn/blog_migrate/ed770b325339fbb50a2bd6ed096fdc9c.png)
2.1.3 P2P结构
P2P结构中的每个用户是对等的,一个主机既可以是客户端又可以是服务端,应用程序在间断连接的主机对之间使用直接通信。P2P的最典型使用是BitTorrent技术,所谓的torrent也就是我们俗称的“种子文件”,下载者先得到种子文件,然后解析其地址,连接到其它下载(上传)同样资源的主机,主机间交换数据,此时不需要其它服务器参与。
![](https://i-blog.csdnimg.cn/blog_migrate/d9d53b9ab27f02df201d143bba3bb471.jpeg)
2.2 进程通信
操作系统告诉我们,进程指正在运行的程序。两个在不同端系统间的进程通过跨越计算机网络交换报文来相互通信,在给定的一对进程间通信会话场景过程中,发起通信的进程被标识为客户(client),等待联络的进程是服务器(server)。进程通过一个称为套接字(socket)的软件接口向网络发送报文/从网络接收报文。如果说进程是一个房子,那么套接字就是一扇门,报文通过这扇门来进入/离开进程。套接字同时也是同一台主机内应用层与运输层间的接口,开发者可以控制套接字在应用层的一切,但是对于套接字的运输层端几乎没有控制权。开发者对运输层的控制仅限于:①选择运输层协议。②设定一些运输层参数。
进程间的通信需要了解彼此的地址,为了标识一个进程的地址需要定义:①主机的地址(IP)②目标主机中接收进程的标识符(端口号)。例如,Web服务器的端口号是80.一个套接字的表示方法也正是(IP:端口号),例如:一个套接字可以表示为(210.37.145.1 :23)。到目前为止,一个报文的旅程可以概述为:从源主机的应用程序推往套接字->从套接字进入网络->从网络进入目的地的套接字->从套接字进入应用程序。值得一提的是,最后一步是由运输层协议负责的,在本章可以先了解一下运输层协议会为调用它的应用程序提供什么服务,大概分为以下4个:
- 可靠数据传输 第一章说过,分组在传输过程中可能丢失(如路由器缓存已满,再进入导致丢失),运输层协议能够提供可靠数据传输来保证数据完好无损地从源传输到目的地,当运输层协议不提供这种服务,往往该应用是容忍丢失的应用(如视频电话等)。
- 吞吐量 运输层协议能够以某种特定的速率提供确保的可用吞吐量,该运输协议能够保证可用吞吐量总是为至少r比特/s。
- 定时 在多方游戏中比较常见(ping),在游戏中我们总是不希望有太多的时延,运输层协议能够提供定时保证。
- 安全性 运输协议能够加密发送的数据,在