主要有三种,分别为:
客户机/服务器结构(c/s结构)——web浏览器就是使用这种结构
点对点结构(p2p结构),端系统直接通讯,一般文件共享类应用使用,优点是高度可伸缩,但是难于管理
混合结构,Napster应用,文件传输使用p2p,搜索使用c/s结构
同一主机下的进程通信由操作系统直接提供进程通信机制,不同的主机通过消息交换进行通信,即客户机进程发起通信,服务器进程等待通信请求。
具体实现有操作系统提供关于网络编程的API——套接字socket,进程通过socket使用网络协议发送接收消息。
不同的主机进行通信,每个进程需要有唯一标识符。
通信过程中使用IP地址寻址主机,主机上每个需要通信对进程分配一个端口号,使用IP地址+端口号可以表示网络上的进程,一般的http使用80端口,mail使用25端口,自己可设定使用除此以外的0~65535的端口。
网络应用遵循的协议,由公开协议和私有协议组成。其中公开协议由RFC定义,目的是允许互操作,私有协议为多数p2p文件共享应用使用。
该协议规定了消息类型(请求回应的方法),语法格式(有那些字段,每个字段如何描述),字段的语义,规则(何时发送响应消息以及如何响应)等。
可靠性:有些应用容忍丢失,比如视频电话,而有些则要求百分百可靠,比如文件传输。
此外时间、带宽和安全性需求等,不同应用的需求见截图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RD2iuZuU-1663502254336)(https://img-*blog.csdnimg.cn/7803d8792fff4f4491f32d46fcb8b558.jpg)]
TCP面相连接和UDP两种全双工服务,具体见截图:

TCP更稳定,不丢包,那为什么我们还需要udp呢?
一来是不是所有情景我们都需要这么稳定的连接,二者是udp给了我们最基本,最自由的发包功能而没有任何束缚,无需握手,发就行了,就像现在微信那么普及,为什么我们还要使用邮箱是一个道理吧。
一些应用的服务使用情况如下图:

网络进程通信方法是通过url+端口号确定网络中唯一进程进行通信,应用再通过操作系统提供的网络编程API——socket进行收发消息。