1.首先要明白应用层协议定义的是应用进程间的通信和交互的规则。
2.主流的应用体系结构有三种:
客户-服务器体系结构(C/S) | 可扩展性低:只有一台服务器,当有成千上万用户同时访问时的高并发场景服务器可能会崩溃。 客户相互之间不能直接通信。 Web、FTP、Telnet和电子邮件都是C/S体系结构。 |
P2P体系结构 | 自扩展性高,既可作为客户端也能作为服务端。但管理较难。 |
混合体 | 综合了C/S和P2P两种体系结构。 |
3.进程间通信
其中进程P1和进程P2通信通过操作系统本身提供的通信方式进行通信(管道、消息队列、共享缓冲区等)。
进程P2和P3则是通过操作系统提供的网络协议报文服务进行通信。
那如何区别不同的应用进程?是如何相互通信的。这就需要解决三个问题:
①进程标识和进程寻址。(服务用户)
②传输层-应用层提供的服务如何。(提供服务)
位置:层间接口的SAP( Socket)
形式:应用程序接口API(Socket API )
③如何使用传输层提供的服务实现应用进程之间的报文交换,实现应用。(用户使用服务)
进程P2和P3通信,实际上是进程P2通过层间接口上的Socket API利用传输层提供的服务以及传输层通过下面几层的服务和P3通信。
提出问题,如何解决问题?
①问题:标识进程和进程寻址。解决:对进程进行编址(IP地址和port标识)
②问题:传输层-应用层提供的服务如何?解决:传输层提供的服务-需要穿过层间接口。那么
就必须要携带的信息
要传输的报文是什么 ?what
传给谁(作为对方应用进程的标识:IP+TCP/UDP 端口号)
谁传的(对方的应用进程的标识:对方的IP+TCP/UDP 端口号)?who
如果每次都要携带这三个信息,太繁琐也易错。
于是就有了TCP Socket(4元组):源IP、源端口、目标IP、目标端口。TCP Socket就是本地的标识,物理上看就是一个整数,在TCP中标识两个应用进程会话的关系。这是一张表,P2通过这张表就能找到想要通信的应用程序。
UDP Socket(2元组):源IP、源UDP端口。发送的时候需要有:UDP socket、携带发送的信息、目标IP和port。
注意不同主机的TCP socket / UDP socket可能不同。如S1和S2通信,S1有自己的socket1,到达运输层,而期间又创建了 TCP Socket11的4元组。而S2又和S3通信,S2有自己的socket2,到达运输层,而期间又创建了 TCP Socket22的4元组。那么这两个TCP Socket是不一样的。
说明一下端口和socket的区别:
端口是用来区别进程的。socket用来确定端系统。