为什么要有应用层
想想为什么要有系统调用,针对用户程序来说,系统调用可以让其使用计算机提供的各种接口,来实现其功能。
对应的,针对应用层来说,应用层可以使用调用下一层(传输层)提供的能力来完成网络能力,传输层为应用层提供了网络接口,帮助其实现网络应用。
网络应用程序体系结构
体系结构是有应用程序的研发者设计的,至于怎么设计都是限制在应用层上的,设计可以根据你所需要的业务场景决定,但大部分场景也就一种客户端-服务端体系结构
,针对部分应用有对等网络结构(P2P)
。
客户端-服务端体系结构,当你打开一个浏览器,或者用手机打开抖音,其都是在使用这种结构,你通过一个浏览器进程或者APP进程访问一个固定的IP地址,从对应的进程中获取数据并返回到你的屏幕上。所以这种结构需要一个处理各种业务数据的服务端,这个服务端要对来及各地的客户端的请求都要做处理,因此这种结构下服务器的成本很大。
P2P体系结构,对等网络体系,也就是你既是客户端又是服务端,你相当于一个节点,在P2P网络体系中有很多节点,你负责提供一部分资源,同时你也可以从其他节点获取你想要的资源,这就是P2P结构,他很少或者完全没有依赖中心服务器,在流量密集型场景就非常适用P2P结构,例如网络电话,视频通信,种子下载等。同时,也因为P2P应用的非高度集中式应用,也面临安全性、性能、可靠性等诸多挑战,毕竟有得必有失嘛。
进程通信
其实就是作为研发怎么去使用计算机网络,给你一个客户端与一个服务端,怎么能让他俩通信起来,很简单
- 构建一个客户端进程,你可以在任意电脑或手机上构建
- 构建一个服务端进程,通常服务端的IP是固定的,保证客户端能稳定的请求到你。
- 服务器进程绑定到一个端口上,从该等待到来的数据
- 客户端使用socket将数据传输到服务器的socket上,socket在根据报文中的端口号将报文分配给对应的进程
- socket是什么,可以简单理解为网卡与计算机应用中间那一层,为计算机提供网络接口,将网卡中接收到的数据分配给对应的客户端进程。
- socket位于应用层。
两种运输服务
使用socket时,你可以决定使用什么样的运输服务,也即TCP还是UDP,两种方式各有千秋。
TCP保证了可靠的数据传输服务。
对应的,UDP就是非可靠数据传输服务了。
应用层协议
就是由应用研发者设计的几套报文标准,我们最关注的就是HTTP协议,后面也会继续深究,这里先放过。
HTTP
SMTP
POP3
DNS
DNS就有趣了
他只提供一个能力:域名到IP的映射,很重要的一项能力。
也位于应用层。
看下面两篇文章,绝对懂了。