计算机网络——应用层协议(一)

2019 / 08 / 25

前言

应用是计算机网络存在的理由,从网络诞生以来就出现了一批又一批的伟大的网络应用,包括即时通讯,网络冲浪,社交应用,网络游戏,多媒体应用等等等等。应用层协议也是我们学习计算机网络的一个良好的起点,尤其对于开发应用的软件工程师们,因为他是与我们接触最为密切的一部分知识。

基本原理

体系结构

常见的应用程序可以分为两大类,客户服务器体系和p2p体系。

大多数应用程序都是客户服务器体系的,即运行在手机,平板,pc等设备上的应用程序作为客户端和数据中心的服务器相互通信的系统,最常见的如网页浏览。网站开发者的前端开发工程师写客户端的应用,后端开发工程师写服务端应用。

p2p体系是指多个对等的端组成的系统,他们对数据中心的服务器依赖很小甚至没有依赖。许多流行的流量密集型的应用都是这样的,比如迅雷,skype,BitTorrent。这类应用典型的特点就是数据交流量非常大,用户对等的进行数据传输。p2p应用自带拓展性,用户就是服务器,也是客户端,所有用户互相取数据,而不用直接从服务器取,这样人越多就越强大,数据量也越大,当然p2p由于高度不集中,所以也会面临安全性,性能和可靠性的问题。

进程通信

应用会被人理解为程序,或者软件,但事实上应用层用来数据传输和通信的其实是操作系统中的进程。一个应用程序可能会同时跑多个进程,也可能跑多个线程。这完全取决于软件设计师的想法。而网络的通信其实是以进程为主体,用socket(套接字,和socket.io或者websocket不是一个概念)。进程开启一个通信过程,其实就是由进程抛出一个套接字。套接字能力有限仅限于选择传输层的协议或者控制传输层的几个限定的参数。

进程可以根据域名或者ip去找到另一个主机或者服务器,但如果需要知道另一个进程的,就需要输入一个端口号,所以进程总是会和端口关联在一起,如果把进程比作为建筑物,那么端口号就是他的门,而套接字就是传输的物资。

基于tcp还是ucp

http协议给应用提供了服务,那么tcp就是再给http协议提供服务。选择那种服务依然要考量服务的特点,主要包括可靠还是不可靠,吞吐量,时延还有安全性。可靠和安全的区别在于,可靠是指传输数据是否容忍丢失,安全性是说数据是否会被别人偷走甚至调包。

tcp是一种面向连接的,可靠的,同时ssl协议也使得http协议变得更安全。

udp是一种不提供不必要服务的轻量级协议。也就是说他不可靠,不面向链接,不做网络拥塞控制。但是他快呀,时延低。比如打游戏,比如视频聊天,丢帧什么的是可以允许的。

而大多数信息传输都是用了tcp协议,比如文件传输,电子邮件,多媒体下载和web。

http协议

作为一个web开发者最为熟悉的协议便是http了。http是最初只是为了交换html的一种数据交换协议,所以它的全称是hyper text transfer protocol,但后来他变得什么都传,流媒体,二进制或者json和xml,目前的前后端通信主要是json。

http协议经过了很长时间的发展,目前以及迭代到2.0版本,在1.1的时候http协议增加了connection: keep-alive用来建立持续连接。http协议通过set-cookie和一系列的cookie控制使得无状态协议可以识别客户端。当然cookie机制已经被淘汰,目前更多的是token机制。

http也有一系列的状态码和查询或者数据传输机制。通过定义字段来实现。说到定义字段,其实http协议就是一个固定写法的简单文本,就像写邮件最前边写收件人的名字一样,http协议定义前边的请求头的方法,地址等。但他仍然只是一个文本协议,并没有任何功能上的限制,只是所有的应用都去按照他的方式实现了而已。所以get请求也可以传body,服务器如果也去接受就完全没问题,但大多数的应用都在实现http请求的时候过滤了get中的body。

http缓存是一个经常被人问到的话题,http缓存分为强缓存和协商缓存,前者就是通过有效期看,只要没过期就一直返回最新的,后者是通过判断是否被更改过来看返回新数据还是老数据,很多静态资源会采用强缓存,然后通过hash变化来获取新的资源。另一方面浏览器也会有一套专业的缓存处理方式,memory缓存和dist缓存,但这个机制是应用自己的行为,不需要深入理解。缓存服务器可以大幅度减少请求量,改善性能。

SMTP协议

其实这是一个比http还要古老的协议,刚开始的时候网络发明者最先想到的就是发电子邮件了。学习SMTP本身并不是一件很重要的事情,相比之下开发者应该去寻找SMTP和HTTP的异同来帮助理解应用层协议是怎么工作的。

首先需要理解代理是什么意思,代理这个词听起来是一个VPN或者服务器相关的概念,事实上我们使用的客户端也是一种代理,所以如果要看浏览器版本经常需要去查浏览器的User Agent。浏览器是一种用户代理,邮件客户端也是用户代理,他们帮我们去发送或者处理http报文或者smtp报文,而蓝灯或者shadowsockets也是一种代理,他用来帮助浏览器去转发请求,而nginx是一种服务器代理,用来帮助服务器接收以及过滤请求,代理是互联网中非常普遍的一个概念。

其次服务器是什么,客户端是一种User Agent。服务器也可以是一个客户端代理,比如小明的邮件服务器就是小明的客户端代理,帮助小明的客户端手法邮件,就像一个门口的邮箱盒子一样。其实是小明通过小明的客户端代理把邮件放到小明的邮件服务器然后发给小红的邮件服务器,最后小红去服务器中取。

http和smtp的区别

1. http协议其实主要是用来拉取数据的,虽然也有post请求,但诞生之初也只是用来拉数据的,而smtp是一种推协议,把数据推到邮件服务器里。

2. http协议一次传一种格式的数据,比如html,图片,json或者其他格式的文件,而smtp是多种对象同时在一个报文中。

3. http协议不限制编码,smtp严格限制采用7比特的ASCII码格式。

4. smtp只是推邮件的,如果要读邮件需要用POP3协议,要处理邮件的话需要用IMAP协议。

要说smtp和http的区别,其实最核心的是hyper text和email的区别。当然现在web已经可以做游戏开发了,更别说发送一个简单的邮件,所以web实现邮件系统也并不复杂。当然email和hyper text的区别还是需要提及的,email的即时性要求更低,邮箱服务器会在发不出去的时候,每隔一段时间轮询直到对方收到为止。email的内容格式更丰富,图片视频都了能会参合在其中。

参考资料

为什么p2p应用人越多越快

进程和线程

99%的人都理解错了http中get和post的区别

嗨,请先 登录

加载中...
(๑>ω<๑) 又是元气满满的一天哟