C/S模型
TCP/IP协议中的所有的机器都是对等的,但一般数据等资源都是集中存放的,所以网络程序很大一部分采用的就是C/S模型,客户端都通过访问服务器来获取所需的资源。
工作流程
-
服务端启动后创建一个监听socket,并调用bind函数绑定到服务器端口上
-
服务端调用listen函数等待客户连接
-
服务器稳定运行后,客户端可以调用connect函数向服务器发起连接
-
服务端监听到连接请求后,调用accept函数接受连接,并分配一个新的单元(线程,进程)为新的连接服务。
-
linux一搬是fork一个进程,该进程对连接进行操作,把结果返回客户端。
优缺点
- 适用于资源比较集中的场合,并且实现简单
- 服务器是通信中心,当访问量大时,可能所有客户端的响应都会变慢。
P2P模型
P2P模型更符合网络通信的实际情况,所有主机地位对等,不会出现以某台机器为核心的状况。但也可以说P2P是C/S模型的扩展,每台主机既是客户端,又是服务器。
优缺点
- 主机在消耗服务时也给别人提供服务,这样资源能够充分,自由地共享
- 用户间传输的请求过多时,网络的负载将加重
- 还有就是主机之间很难相互发现,一般带有一个专门的发现服务器。