应用层是tcp/ip五层模型的最高层,用于为用户提供服务。从应用层看通讯,应该是两个通信端点之间进程之间的逻辑连接。例如:A主机访问了B主机,对于二者而言,虽然通信过程中存在多个物理链路。但是对应用层而言,他仅仅关注A程序到B程序的连接。
需要注意的是:因为应用层作为最高层的协议集合,所以对应用层协议的添加和去除显得更容易,并不用考虑上层协议的耦合。
标准的应用层协议:
一些我们使用的协议如:http,已经有标准因特网管理,使用中需要严格按照规范。
非标准的应用层协议:
而实际上我们自己可以约定应用层通信之间的一些细节,自己编写非标准的应用层程序,如果仅仅是私人使用,这样的非标准也是可行的。
通讯模式:
客户-服务器(c/s)模式:
通信两端扮演不同角色,客户端需要向一台服务器发送请求,服务器应该一直运行,为客户端提供服务。
对等模式(p2p):
这种模式并不需要一台提供服务的服务器,通信两端是对等的,即可能提供服务,也可能接受服务。
混合模式:
把前两种有点混合的通信模式
客户-服务器模式(c/s):
API(application programming interface):
对计算机而言,总需要一些指令去告诉计算机该怎么做,例如,键盘和显示器,计算机通过键盘的输入读取所需信息,并且在显示器显示,这样的操作实际上发生在我们和应用程序和操作系统之间,操作系统提供了这些操作需要要的api,也就是说,如果有这样一套应用层协议的程序,那么也需要操作系统来解读这样的程序,实际上,操作系统封装了底层协议为应用层提供服务器,包括TCP/ip协议。这样的一套为应用层提供服务的接口即使API(application programming interface),三种这样的网络api分别是:socket(套接字) 接口,Transport Layer Interface,TLI(传输层接口)和Stream(流接口)。
对于socket觉得比较抽象,暂且把Socket理解为一种应用程序创建的抽象数据结构。
也就是说应用程序进程通过对socket访问,来请求和接受响应,其余的可以理解为操作系统以及内置的TCP/IP的工作。
socket地址:
有了接口,数据结构,还需要一个地址来区别两个通信端点之间的位置。
地址由一个32位IP地址和一个16位端口号组成,用:隔开
例如:210.38.136.66:8049
前面的ip是用来区别哪台主机,端口是用来区别那个进程,也就是是浏览器还是你的QQ。
本地Socket地址:
对服务器和客户一样的,都有操作系统提供一个ip地址,对于服务器,端口如果是标准进程,如http,那么就是80,已经事先分配好,对于客户端,发送请求的端口应该是一个临时的端口。
远程Socket地址:
对服务器程序而言,他并不知道稳定的远程通信地址,因为他每天为千千万万用户提供服务,对于客户端程序而言,他可能已经知道需要发送到那个服务器地址获取服务。
cs模式使用来自传输层的服务,比如无连接不可靠,但是速度佳的udp服务。也会使用,面向连接可靠的字节流传输协议tcp协议。也可以是结合两种的sctp协议。
客户-服务器模式的应用:
We