应用层协议原理

网络程序核心:写出不同端系统下能彼此通信的程序

体系结构与进程通信

cs架构 p2p架构
原理 有总是打开的服务器,服务来自浏览器的请求 主机(对等方)之间直接通信
特点 客户之间不能直接通信,服务器具有公开的IP地址 不需要服务器,自扩展性(用得人越多越快)
缺点 ISP需要大量配置主机,供电维护,支付带宽费用 “非对称”带宽应用,安全性,用户不愿提供带宽

“非对称”带宽应用就是伸手党太多,大家下完就跑,都不上传的

进程通信原理:两个进程通过一个叫做“套接字”的管道进行发送报文和接受报文,这种管道称为“API”
进程寻址:为了标识接受进程,需要定义主机的IP地址和端口号

可供应用程序使用的运输服务

运输层协议能够为调用他的应用程序提供什么样的服务?
首先我们看应用程序服务要求的分类

要求 定义
可靠数据传输 将数据正确,完全交付
可用吞吐量 发送进程向接收进程交付比特的速率
定时 发送注入进套接字的每个比特到达接收方的套接字不迟于某个时间段
安全性 提供一种以上的安全服务

其中,
有些应用可以进行不可靠(UDP)传输,如视频,因为丢失一点不影响;
有些应用对可用吞吐量要求高,如视频,因为传不过来没法看,称为“带宽敏感应用”,而且,吞吐量越大越好,这句话是对的(尽管不符合哲学直觉~)
有些应用对定时延迟要求高,如王者荣耀

因特网的运输服务


Web和HTTP

Web是一个因特网应用
HTTP是Web的应用层协议,定义了客户向服务器请求页面的,以及服务器传输页面的方式;
TCP是HTTP的支撑协议,每次连接都要先发起TCP连接
服务器不保存客户的任何信息,所以我们称HTTP是一个无状态协议

接下来重点介绍HTTP协议

连接方式——非持续连接和持续连接

在非持续连接下,每次当客户端要请求一个页面时,时延将花费2RTT
第一个RTT建立连接,第二个RTT发送请求和接收对象

同理,如果是持续连接,除了第一个请求是2
RTT外,后面的都只需要一个RTT

HTTP报文

GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr

解释如下

如果你大概能理解,并且能大概记住一些,那么我们来看更一般的表达

当请求发送之后,服务器会先返回一种叫做“状态码”的东西,一般来说,如果不是2开头,都表示失败

状态码 含义 理解
200 请求成功 成功返回页面
301 请求对象已经被永久转移 网页移到了别的网址
400 请求不能被服务器理解 报文格式错了
404 请求文档不在服务器上 网页被删了
505 服务器不支持请求报文的HTTP协议 因为有1.0,1.1两种HTTP版本,不支持报文写的版本

cookie机制

HTTP服务是无状态的,也就是不记录之前访问的消息,难道我们每次上淘宝都要登录吗?显然不是,所以引入cookie机制作为无状态缺陷的补充

假定有一个人用浏览器逛亚马逊的网站

特别注意,cookie内的信息是存在浏览器的cookie文件中,服务器保存的是cookie的id,当用户发来请求的时候,浏览器会从cookie文件获取网站识别码,然后加到请求报文中,服务器根据这个信息,就可以识别用户,自动登录,以及做很多事情

web缓存

简单来讲,和高速缓存一样,装一个缓存器,先把常常访问的服务器页面保存在缓存器里面,然后设置浏览器先访问缓存器,如果有就可以返回,没有就再去服务器找

可以大大缩短时间
这个会和时延结合起来,应该会有很多计算,所以多练就可以了,原理还是挺简单的

如下图,接入链路15M/s速率dr,局域网100M/s速率di,
浏览器每秒15个请求(n),每个请求1M(l),
因特网上时延2秒 (t)

局域网流量强度为 n*l/di=15*1/100=0.15
接入链路流量强度为 n*l/dr=1
也就是说接入链路时延无限大

总时延大概是x分钟+2s

当增加web缓存的时候,有一部分请求可以直接在缓存器中找到,称为命中
,假设命中率为0.4(一般在0.2~0.7)

所以只有60%的请求需要服务器传送
局域网流量强度 0.15 ,时延忽略不计
接入链路流量强度 n*0.6*l/dr=0.6 ,时延约为几十毫秒,与2秒比微不足道

由于每次不命中都会需要2秒因特网时延,每次访问web缓存都花费0.01秒
所以
总时延为 0.4*0.01+0.6*(0.01+2)

只需要1.2秒多一点

条件GET

一句话:每次请求web缓存器命中时,

web缓存器发送get消息询问服务器是否有更新,消息里面包含了web缓存的页面最后更新的时间last-modified,如果服务器发现有更新,就发送页面到web缓存

如果没有更新,服务器同样要发送报文通知,其中包含响应304 Not Modified