首页 » PHP教程 » php掌握304技巧_收集基本功http报文及TCP拥塞控制机制

php掌握304技巧_收集基本功http报文及TCP拥塞控制机制

访客 2024-11-25 0

扫一扫用手机浏览

文章目录 [+]

1.1、通用报文General: //通用报文Request Method: GETStatus Code: 200 OKRemote Address: 47.111.45.248:80Referrer Policy: origin1.2、要求报文

Request Headers: //客户端要求头Accept : image/webp,image/apng,image/,/;q=0. //浏览器客户端见告见告做事端能接管什么样类型的数据Accept-Encoding: gzip, deflate //浏览器客户端见告做事器能接管什么编码格式,包括字符编码,压缩办法Accept-Language: zh-CN,zh;q=0.9 //客户端见告浏览器接管什么样的措辞Accept-Ranges: bytes //断点续传ETag: "23411b8a827d31:0”. //304Cache-Control : no-cacheConnection : keep-alive //客户端见告做事真个连接办法: 长连接X-UA-Compatible: IE=10X-Frame-Options: SAMEORIGINCookie: _ga=GA1.2.1796862747.1547952793; __gads=ID=60d16307ea494dae:T=1547952794:S=ALNI_MYsoIBtEfg7-PJNMTds68JgtxnQrw; UM_distinctid=168832d7c157de-0ad85a26ff65a-35617601-13c680-168832d7c168b3;Host: www.cnblogs.com。
//要要求的主机及端口 目的地Pragma: no-cacheReferer: http://www.cnblogs.com/ //客户端见告浏览器这个要求是从哪里过来的,要求来源User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36。
//浏览器指定,见告做事器,利用的浏览器的版本和名称自动发送

嵌入式进阶教程分门别类整理好了,看的时候十分方便,由于内容较多,这里就截取一部分图吧。

php掌握304技巧_收集基本功http报文及TCP拥塞控制机制

须要的朋友私信【内核】即可领取

php掌握304技巧_收集基本功http报文及TCP拥塞控制机制
(图片来自网络侵删)
1.3、相应报文

Response Headers: //做事器返回http头HTTP/1.1 200 OKDate: Tue, 16 Apr 2019 05:13:48 GMT //什么时候相应会浏览器Content-Type : image/x-icon。
//相应的内容是什么类型,采取的是什么编码, 对应要求的accept设置内容Content-Length : 1332 //做事端见告浏览器相应实体的大小Connection: keep-alive /close //做事端见告浏览器连接的办法为长连接, 管道连接,异步相应http的要求,http1.1,提高效率;Cache-Control : max-age=120. //做事端见告浏览器缓存的韶光最长为120sLast-Modified : Fri, 28 Jul 2017 09:18:56 GMT //做事器文本末了一次修正的韶光. 304

ps:在实际情形中利用: response.setContentType("text/html;charset=UTF-8”); 来设置编码以办理中文的乱码问题。

(0)、Connection: keep-alive /close 做事端见告浏览器连接的办法为长连接, 管道连接,异步相应http的要求,http1.1,提高效率;

(1)、MIME Type:是描述内容类型的因特网标准, 常见的数据几种类型

文本文件:text/html,text/plain,text/css,application/xhtml+xml,application/xml图片文件:image/jpeg,image/gif,image/png.视频文件:video/mpeg,video/quicktime

我们可以通过两种办法来设置文件的渲染类型,

第一种是 Accept-客户端第二种是 Content-Type-做事器

Accept : 表示 客户端希望接管的数据类型,即见告做事器我须要什么媒体类型的数据,此时 做事器该当根据 Accept 要求头生产指定媒体类型的数据。

Content-Type : 表示发送端发送的实体数据类型,比如我们该当写过类似的: resposne.setContentType(“application/json;charset=utf-8”)的代码,表示做事端返回的数据 格式是 json。

如果 Accept 和 Content-Type 不一致,如果说 Accept 要吸收的类型是 image/gif,但是做事 端返回的数据是 text/html,那么浏览器将会无法解析。

(2) .Cache-Control 浸染:

客户端浏览器用来判断是否须要用本地缓存。
默认值为private;常用值有private、no-cache、max-age、must-revalidate。

详细场景举例:

a.打开新窗口市价为 private、no-cache、must-revalidate ,那么打开新窗口访问时都会重新访问做事器。
而如果指定了 max-age 和 expire 值(单位为秒),那么在此值内的韶光里就不会重新访问做事器:

例如:Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不会去做事器)

b.在地址栏回车.值为 private或must-revalidate则只有第一次访问时会访问做事器,往后就不再访问。

值为 no-cache,那么每次都会访问。

值为 max-age 和 expire,则在过期之前不会重复访问。

c.按退却撤退按扭

值为private、must-revalidate、max-age,则不会重访问,

值为no-cache,则每次都重复访问

d.按刷新按钮

无论为何值,都会重复访问;

(3) 、Cookie 浸染:客户端浏览器用来存储一些用户信息以便让做事器辨别用户身份的(大多数须要登录的网站上面会比较常见),比如用户名和密码,sessionId等。

(4) 、If-Modify-Since 浸染:

把浏览器端缓存页面的末了修正韶光(精确到秒)发送到做事器去,做事器会把这个韶光与做事器上实际文件的末了修正韶光进行比拟。
如果韶光同等,那么返回304,客户端就直策应用本地缓存文件。
如果韶光不一致,就会返回200和新的文件内容以及新的修正韶光(Last-Modify)。
客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。

(5) 、Etag的利用场景:

1.有些文件须要频繁更新,但是文件内容并没有变革。

聪明的开拓者会把 Last-Modified和ETags要求的http报头一起利用,提高浏览器性能。
这样可利用客户端(例如浏览器)的缓存。
由于做事器首先产生Last-Modified/Etag标记,做事器可在稍后利用它来判断页面是否已经被修正。
实质上,客户端通过将该暗号传回做事器哀求做事器验证其(客户端)缓存。

过程如下:

1.客户端要求一个页面(A)。
2.做事器返回页面A,并在给A加上一个Last-Modified/ETag。
3.客户端展现该页面,并将页面连同Last-Modified/ETag一起缓存。
4.客户再次要求页面A,并将上次要求时做事器返回的Last-Modified/ETag一起通报给做事器。
5.做事器检讨该Last-Modified或ETag,并判断出该页面自上次客户端要求之后还未被修正,直接返回相应304和一个空的相应体。

(6) 、如果做事器又设置了Cache-Control:max-age和Expires呢,怎么办?

答案是同时利用,也便是说在完备匹配If-Modified-Since和If-None-Match即检讨完修正韶光和Etag之后,做事器才能返回304.(不要陷入到底利用谁的问题怪圈)

(7) 、如果传输的文件很大怎么办?

方案一:通过压缩文件: Accept-Encoding: gzip , deflate ;

方案二:分割传输,浏览器逐步显示;

状态码

1XX : 接管的要求正在处理

200: 要求正常处理

3xx开头,资源文件

301: 资源被永久删除,永久重定向到新的网址

302: 旧的资源还在,只是暂时性的重定向资源

重定向缘故原由:

(1)网站调度(如改变网页目录构造);

(2)网页被移到一个新地址;

(3)网页扩展名改变(如运用须要把.php改成.Html或.shtml)。

304: 返回上次要求资源未作改动,验证浏览器的缓存机制 Etag307: 资源的重定向,但是不会把post改为get操作;4xx开头:客户端400: 要求参数缺点401: 客户端无权访问,要去输入用户名\密码之类的授权信息403: 禁止访问(读写权限等影响)404: 要求的资源不存在5xx开头:做事端500: 做事内部缺点502: 网关缺点503: 临时过载或者掩护,导致做事端无法正常处理要求拥塞

打算机网络中的带宽,交流节点中的缓存和处理机制,都是网络资源。
在某段韶光内,若对网络中某一资源的需求超过了该资源所能供应的可用部分,网络的性能就会变坏。

这种情形就叫做拥塞。
拥塞发生的紧张缘故原由是网络能够供应的资源不敷以知足用户的需求,这些资源包括缓存空间、链路带宽容量和中间节点的处理能力。

由于互联网的设计机制(任何人任何韶光都能共享网络资源)导致其缺少“收受接管掌握”能力,因此在网络资源不敷时不能限定用户数量,只能靠降落做事质量来连续为用户做事,也便是“尽力而为”做事。
但是也不是说增加网络资源,就可以避免网络拥塞。

拥塞虽然是由于网络资源的缺少引起的, 但是纯挚增加资源并不能避免拥塞的发生。
有时增加缓存空间到一定程度时,只会加重拥塞,而不是减轻拥塞,这是由于当数据包经由长期韶光排队完成转发时,他们可能早已经超时,从而引起源端超时重发,而这些数据包还会连续传输到下一个路由器,从而摧残浪费蹂躏网络资源,加重网络拥塞。
事实上, 缓存空间不敷导致的丢包更多的是拥塞的“症状”而非缘故原由。

其余,增加链路宽带及提高处理能力也不能办理拥塞问题。

例如我们有4台ABCD主机和一个路由,所有的链路带宽都是1Gbps,如果A和B 同时以1Gbps的速率发送数据,则路由器的输入速率为2Gpbs,从而产生拥塞。
避免拥塞的方法是掌握AB的发送速率,例如AB都是0.5Gpbs,但是如果此时D也以1Gpbs的速率发送,那么拥塞还是无法避免,况且用户主机不可能只有4个。
以是说拥塞只是一个动态问题,我们没有办法用一个静态方案去办理,从这个意义上说,拥塞是不可避免的!

拥塞是一个全局掌握的过程,他不像点对点的流控机制,是一个局部的掌握!

TCP的拥塞掌握算法

TCP的拥塞掌握由4个核心的算法组成: 慢启动(slow start)、拥塞避免(Congestion voidance)、快速重传(Fast Retransmit)和快速规复(Fast Recovery)。

拥塞掌握,在发送方坚持着一个拥塞窗口cwmd(congestion window)的状态量。
拥塞窗口的大小取决于网络的拥塞程度,并且动态的变革。
发送方让自己的发送窗口即是拥塞窗口,其余考虑到吸收方的吸收能力,发送窗口可能小于拥塞窗口。

4.1、慢启动(slow start)

早期的开拓的TCP运用在启动一个连接时会向网络中发送大量的数据包,这样很随意马虎导致路由器缓存空间耗尽,网络发生拥塞,使得TCP连接的吞吐量急剧低落。
由于TCP源端一开始并不知道网络资源当前的利用状况,因此新建立的TCP连接不能一开始就发送大量的数据,而只能逐步增加每次发送的数据量,以避免上述征象的发生。
详细来说,当新建立一个连接时,CWND初始化为1个最大报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文被确认,cwnd就增加1个MSS大小。
这样cwnd的值就随着网络来回韶光(Round trip time,RTT)呈指数级增长,事实上,慢启动的速率一点也不慢,只是他的出发点比较低一点儿而已,指数级的增长率是十分快的。

该算法的思想紧张是一种探测一下网路的拥塞程度,便是不要一开始就发送大量的数据,也便是说有小到大逐渐增加(指数)拥塞窗口的大小。

我们可以大略打算:

开始cwnd=1经由1个RTT后, cwnd=21=2经由2个RTT后, cwnd=22=4经由3个RTT后, cwnd=24=8如果宽带为W,那么经由RTTlog2W韶光就可以占满带宽;4.2、拥塞避免(Congestion voidance)

如果按上述的慢启动的思想如果不加以掌握的话,毫无疑问地发生网络拥塞,当cwnd很快增长上来的时候,也很快利用了网络的资源,但是cwnd不能一贯这样增长,一定须要某个限定。
TCP利用了一个慢启动门限(ssthresh)的变量,当cwnd超过该值后,慢启动结束,进入拥塞避免阶段。
对付大多数的TCP是吸纳来说,ssthresh的值是65535(同样以16bit来打算)。
拥塞避免的思想便是转指数增大变为加法线性增大。
这样就可以避免增长过快导致网络拥塞,逐步地增加调度到网络的最佳值。

期详细ssthresh的用法如下:当cwnd<ssthresh时,利用慢开始算法。
当cwnd>ssthresh时,改用拥塞避免算法。
当cwnd=ssthresh时,慢开始与拥塞避免算法任意。

把稳:如果当前的cwnd达到慢启动的阈值,则试探性的发送一个segment,如果做事器没有相应,TCP认为网络能力低落,必须降落慢启动阈值,同时为了避免形式连续恶化,有可能将窗口降落为1

4.3、快速重传(Fast Retransmit)

正常情形下,按照上一节讲的重传是等到定时器超时(RTO)后在重传,但有时候不须要等那么久也可以重传。
比如客户端向做事器发送了5个段数据包。
第三个丢失,其他正常,那么客户端会收到3个包2的ACK,而4、5正常到达后会被做事器缓存起来但是不会发送相应包的ACK,由于TCP是基于积累确认机制,以确保丢失的包能被重发,数据吸收准确,ACK必须是连续的。
这个时候就不必在等待RTO的超时时间了,做事器判断已经丢失了就可以立时快速重传,提高效率。

快速重传算法规定,发送方只要持续收到三个重复确认就应该立即重传对方尚未收到的报文文件,而不必连续等待设置重传计时器韶光到期。

4.4、快速规复(Fast Recovery)

实在快速规复并不是单独存在的,它是快速重传的后续处理。
常日认为客户端吸收到3个ACK后,就会开始快速重传,但是如果还有更多的重复ACK呢,这个时候便是快速规复要做的。

a、当发送方连续收到三个重复确认时,就实行“乘法减小”算法,把ssthresh门限减半(也即cwnd=ssthresh/2).但是接下去并不实行慢开始算法;

b、考虑到此时能连续收到3个ACK,解释网络没有拥塞,实行加法原则,有几个ACK就加几个段的字节数, 或者可以将cwnd=ssthresh,直接进入拥塞避免算法。

四种算法相互间的互助运行图如下所示:

问题思考

问题一:如何检测拥塞?

首先来看一下TCP是如何确定网络进入拥塞的,TCP认为网络拥塞的紧张依据是它重传了一个报文段。
上面提到过,TCP对每一个报文段都有一个定时器,称为重传定时器(RTO),当RTO超时且还没有得到数据确认,那么TCP就会对该报文段进行重传,当发生超时时,那么涌现拥塞的可能性就很大,某个报文段可能在网络中某处丢失,并且后续的报文段也没有了,在这种情形下,TCP反应比较“强烈”:

(1)把ssthresh降落为cwnd值的一半;(2)把cwnd重新设置为1;(3)重新进入慢启动过程;

可以看出,从整体上讲,TCP拥塞掌握窗口变革的原则是: AIMD(Additive Increase Multiplicative Decrease)。
TCP/IP模型中,属于运输层,即:加性增,乘性减, 或者叫做“和式增加,积式减少”。
该原则很好地担保了流之间的公正性,由于一旦涌现丢包,那么立即减半退避,可以给其他新建的流留有足够的空间,从而担保全体的公正性。

问题二:为什么客户端没吸收到一个ACK,会把cwnd增加一个segment呢?

这是基于管道模型的“数据包守恒”原则,及同一时候在网络中传输的数据包数量是恒定的,只有当“旧”数据包离开网路后,才能发送“新”数据包进入网络。
如果发送方收到一个ACK,则认为有一个数据已经离开了网络,于是将拥塞窗口+1,如果网路能够严格遵守该“数据包守恒”原则,则拥塞的法神会大大减少。

有趣的遐想: TCP拥塞的办理就像是我们生活中的交通堵车?

个中有两个原则:

一、拥塞不可避免,纯挚增加资源并不能避免拥塞的发生;

二、数据包守恒原则。
如果政府只是花资金修路,拓宽公路,并不能避免堵车,由于车的数量是不定的,旅游季可能有很多,大概一韶光段没有车,这时候只能从源头掌握。
对车流量进行掌握:例如限定车辆进入主公路,根据实际的情形,如果某一韶光段车辆少,则可以逐步增加车辆进入该公路段,但是当达到一个 阈值,就要放缓车辆进入的速率,并实时地探测整条路的状况,如果情形紧急,则急速将车流量减少一半,将车流量降到最低,然后在重新回到慢启动转态。
使整条公路能够保持畅通,达到最大的运行效率。

标签:

相关文章

Java代码虚拟化保护技术与应用前景

软件应用的需求日益增长,软件开发过程中对代码的保护成为了一个重要议题。Java作为一种广泛应用于企业级应用的编程语言,其代码虚拟化...

PHP教程 2025-03-02 阅读1 评论0

CAD插件错误代码与应对步骤

CAD(计算机辅助设计)软件在工程设计领域得到了广泛应用。CAD插件作为提升设计效率的重要工具,在提高设计师工作效率的也带来了一定...

PHP教程 2025-03-02 阅读1 评论0

上古卷轴代码规则大全游戏背后的编程奥秘

《上古卷轴》作为一款深受玩家喜爱的角色扮演游戏,自问世以来便以其丰富的世界观、独特的游戏体验和深厚的文化底蕴吸引了无数玩家。在这款...

PHP教程 2025-03-02 阅读1 评论0