速率:比特(bit)是计算机中数据量的单位,也是信息论中使用的信息量的单位。一个比特就是二进制数字中的一个 1 或 0。速率是计算机网络中最重要的一个性能指标,指的是数据的传送速率,它也称为数据率 (data rate)或比特率 (bit rate)。速率的单位是 bit/s,或 kbit/s、Mbit/s、 Gbit/s 等。速率往往是指额定速率或标称速率,非实际运行速率。
带宽:在计算机网络中,带宽用来表示网络中某通道传送数据的能力。表示在单位时间内网络中的某信道所能通过的“最高数据率”。单位是 bit/s ,即 “比特每秒”
注:在时间轴上信号的宽度随带宽的增大而变窄。
吞吐量:吞吐量 (throughput) 表示在单位时间内通过某个网络(或信道、接口)的数据量。吞吐量更经常地用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络。吞吐量受网络的带宽或网络的额定速率的限制。
时延:时延 (delay 或 latency) 是指数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。由四种时延组成:
1、发送时延:传输时延。从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。
发送时延 = 数据帧长度(bit)/ 发送速率(bit/s)
2、传播时延:电磁波在信道中需要传播一定的距离而花费的时间。
传播时延 = 信道长度(米)/ 信号在信道上的传播速率(米/秒)
3、处理时延:主机或路由器在收到分组时,为处理分组(例如分析首部、提取数据、差错检验或查找路由)所花费的时间。
4、排队时延:分组在路由器输入输出队列中排队等待处理所经历的时延。排队时延的长短往往取决于网络中当时的通信量。
注:对于高速网络链路,我们提高的仅仅是数据的发送速率而不是比特在链路上的传播速率。 提高链路带宽减小了数据的发送时延。
时延带宽积:链路的时延带宽积又称为以比特为单位的链路长度。
时延带宽积= 传输时延 * 带宽
往返时间RTT:往返时间表示从发送方发送数据开始,到发送方收到来自接收方的确认,总共经历的时间。在互联网中,往返时间还包括各中间结点的处理时延、排队时延以及转发数据时的发送时延。
利用率:分为信道利用率和网络利用率。
信道利用率:指出某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道的利用率是零。
网络利用率则是全网络的信道利用率的加权平均值。
注:信道利用率并非越高越好。当某信道的利用率增大时,该信道引起的时延也就迅速增加。
OSI七层模型描述了网络活动的特点。
物理层:只负责传输01二进制比特流,为设备之间的数据通信提供传输媒体和互连设备,确保原始的数据可在各种物理媒体上传输,为数据链路层提供物理连接
数据链路层:在通信实体之间建立数据链路连接,将上层数据封装成帧,以帧为单位传送数据。(封装成帧就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。首部和尾部就是确定帧的界限。)
网络层:负责路由寻址和广播内容,选择合适的网间路由和交换结点,确保数据及时传送(网络层协议有:IP协议,ICMP控制报文协议,ARP地址转换协议等)
传输层:向用户提供可靠的端到端的连接(TCP,UDP)
会话层:负责建立、维护、拆除会话。组织同步的两个会话用户之间的对话,并管理数据的交换。
表示层:用于处理两个通信系统间信息交换的表示方式,它包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。
应用层:确定进程之间通信的性质以满足用户需要以及提供网络与用户应用软件之间的接口服务。(应用层协议有:DNS域名系统、FTP文件传输协议,Http网络传输协议,SMTP简单邮件传输协议等)
注:由于七层模型复杂且不太实用,所以出现了TCP/IP协议:网络接口层(组合物理层和数据链路层)、网络层、传输层、应用层(组合会话层、表示层和应用层),但是tcp/ip协议的网络接口层没有什么具体的内容,所以综合两种协议的优点,产生了五层协议:物理层、数据链路层、网络层、传输层、应用层。
先依次增加每一层的首部(数据链路层有首部加尾部):(每一个分组的首部都含有地址(诸如目的地址和源地址)等控制信息。)
然后依次去掉对应层的首部:
分层可以使结构非常清晰,清楚知道各层之间的关系;模块化会使系统的维护、升级更加简化,改变某一层服务的具体实现对其它部分不影响。(但是分层也许会造成每一层都要重复较低层的功能)
IP地址由4个字段表示,每个字段一个字节,一个字节8位,一共32位。IP地址由两部分组成,网络地址(属于互联网中的哪一个网络)和主机地址(属于其网络的哪一台主机),一共分为5类。
从前可到达链接,后可能因为网站迁移、改版或操作不当等,导致链接指向的目标页面不存在而无法访问所遗留的链接。一般会出现“抱歉,您所访问的页面不存在”的提示信息或者404状态页面
网速慢、带宽不足、硬件配置低、内存被占满。
JS脚本过大,阻塞了页面的加载。
网页资源过多、接受数据时间长、加载某个资源慢。
DNS解析速度。
http请求次数太多。
传输控制协议TCP、用户数据协议UDP
tcp提供面向对象的连接,通信前需要建立三次握手机制的连接,udp提供无连接的传输(体现在发送者和接收者不需要握手,且每一个udp处理数据段都是独立的,即多种通信方式),传输前不用建立连接(可以减少延迟)。
Tcp提供全双工通信(同一个连接上的双向数据流,可以同时发送和接收),只能一对一连接(一个发送方,一个接收方),udp可以一对一、一对多、多对一、多对多方式数据通信。
Tcp提供可靠交付的通信,udp尽最大努力交付(不保证可靠交付)。
Tcp面向字节流(把数据看成仅仅是一连串无结构的字节流,流是指流入或流出进程的字节序列),udp面向报文。
Tcp有流量控制和拥塞控制,udp没有(可以尽可能快的速度传输),首部开销小(很小的数据段首部)。
流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收
传输丢包时,tcp会将后续的包缓存,等前面的包重传并接收后,再继续发送,延时会越大;udp考虑时间限制,会采用自定义重传机制。
TCP使用场景:当对网络通讯质量有要求的时候 。HTTP协议,QQ传文件,邮件,登陆
UDP使用场景:当对网络通讯质量要求不高的时候。 DNS协议(因为用UDP快),看视频、发语音、QQ聊天、多媒体教室屏幕广播
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,请求连接,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态(收到SYN报文);
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。四次挥手过程:
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。此时客户端进入FIN_WAIT_1等待对方确认状态
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。(发送确认收到关闭请求),此时服务端进入close_wait半连接状态,等待关闭,客户端进入FIN_WAIT_2等待终止状态。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A,进入last_ack最后确认状态。
(4)客户端A发回ACK确认关闭报文,并将确认序号设置为收到序号加1。此时客户端进入TIME_WAIT状态,服务端进入closed状态,若客户端在2MSL(最长报文段寿命)内没有再收到来自服务端的FIN报文后,就进入closed状态。
注:TIME_WAIT状态是为了当服务器在处于last_ack最后确认状态下未收到来自客户端的ACK确认关闭报文而重发FIN关闭报文时,客户端可以重发可能丢失的ACK报文。
为了防止已失效的链接请求报文突然又传送到了服务端,因而产生错误。客户端发出的连接请求报文并未丢失,而是在某个网络节点长时间滞留了,以致延误到链接释放以后的某个时间才到达Server。这是,Server误以为这是Client发出的一个新的链接请求,于是就向客户端发送确认数据包,同意建立链接。若不采用“三次握手”,那么只要Server发出确认数据包,新的链接就建立了。由于client此时并未发出建立链接的请求,所以其不会理睬Server的确认,也不与Server通信;而这时Server一直在等待Client的请求,这样Server就白白浪费了一定的资源。若采用“三次握手”,在这种情况下,由于Server端没有收到来自客户端的确认,则就会知道Client并没有要求建立请求,就不会建立连接。
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。2MSL是两倍的MSL(Maximum Segment Lifetime),MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
因为当客户机/服务器发送FIN字段后,它还希望收到服务器/客户端发来的确认信息,那么如何指定接收的那条确认信息的序号呢?就得先在发送FIN时就初始化本数据段的序号,而这个数据段里面的数据部分是特殊的一字节。
TCP还设有一个保活计时器,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
转载原文链接:https://blog.csdn.net/yy2017220302028/article/details/104631286
拥塞控制 ≠ 流量控制
什么是流量控制?
TCP连接的接收方有一个接收缓冲区。应用程序可能从这个缓冲区读出数据很慢,因此需要保证发送速率和接收应用程序的提取速率匹配,发送方不能发送的太多太快,让接收缓冲区溢出。流量控制使用接收窗口(即接收缓冲区的剩余空间),接收方在报文段中宣告接收窗口的剩余空间,发送方需要限制没有被确认的数据不能超过接收窗口,从而保证接收缓冲区不溢出。
滑动窗口:接收数据端使用的窗口大小,用来告知发送端它的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制的目的。(由于TCP是全双工链接,因此发送方和接收方都有滑动窗口)
什么是拥塞控制?
从信息角度看,拥塞是:“太多源主机发送太多的数据,速度太快以至于网络来不及处理”。表现为:丢失分组 (路由器的缓冲区溢出)、长延迟 (在路由器的缓冲区排队)
拥塞窗口:发送数据端使用的窗口大小,拥塞窗口不代表缓存,拥塞窗口指某一源端数据流在一个RTT内可以最多发送的数据包数。
拥塞控制是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,和流量控制不同,流量控制指点对点通信量的控制。
TCP的四种拥塞控制算法:
I. 慢启动:
当主机开始发送数据时,如果立即将大量数据字节注入到网络,那么就有可能因为不清楚当前网络的负荷情况而引起网络阻塞。所以,最好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚发送报文段时,先把拥塞窗口cwnd设置为 1 个最大报文段MSS的数值。而在每收到一个新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值(1个确认报文对应2个MSS,即:呈指数增长)。用这样的方法逐步增大发送方的拥塞窗口cwnd,可以使分组注入到网络的速率更加合理。
注意:慢开始当中的“慢”并不是指cwnd的增长速率慢,而是在TCP开始发送报文段时先设置cwnd = 1,使得发送方在开始时只发送一个报文段。
II. 拥塞避免:
让拥塞窗口cwnd缓慢的增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd + 1,而不是加倍,即:呈线性增长。这样拥塞窗口cwnd按线性规律缓慢的增长,比慢开始算法的拥塞窗口增长速率缓慢的多。
III. 快重传:
所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认;即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传。对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞(进而降低拥塞窗口cwnd为1)。使用快重传可以使整个网络的吞吐量提高约20%。
IV. 快恢复:
发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法;发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;开始执行拥塞避免算法。(阈值ssthresh的作用是:当下一次出现超时,慢启动到阈值后开始启动拥塞避免。)
也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一些, 即等于新的ssthresh + 3。因为:既然发送方收到3个重复的确认,就表明有3个数据报文段已经离开了网络;这3个报文段不再消耗网络资源而是停留在接收方的接收缓存中;可见现在网络中不是堆积了报文段而是减少了3个报文段。因此可以适当把拥塞窗口扩大些。
不会冲突。因为在IP数据报首部有“高层”字段,它定义了传输层的协议。而客户机和服务器会根据IP数据报和TCP/UDP报文段中提供的:传输协议、源IP地址、目的IP地址、源端口、目的端口来判别接收者。
三次连接时,最后一次确认数据包没有发送,导致服务器一直等待来自客户端的确认。
请求行+请求头+请求主体
1、请求行:请求方法 URL http协议类型及版本号(HTTP1.1 或HTTP1.0)
注:请求方法共8种
GET:请求获取Request——URL所标识的资源
POST:在Request——URL所标识的资源后附加资源
HEAD:请求获取由Request——URL所标识的资源的响应消息报头
PUT:请求服务器存储一个资源,由Request——URL作为其标识
DELETE:请求服务器删除由Request——URL所标识的资源
TRACE:请求服务器回送收到的请求信息(用于测试和诊断)
CONNECT:保留
OPTIONS:请求查询服务器性能
2、请求头:头部字段:值(希望对请求文件的操作信息)
主要字段有:
Host:接受请求的服务器地址,可以是IP或者是域名
User-Agent:发送请求的应用名称
Connection:指定与连接相关的属性,例如(Keep_Alive,长连接)
Accept-Charset:通知服务器端可以发送的编码格式
Accept-Encoding:通知服务器端可以发送的数据压缩格式
Accept-Language:通知服务器端可以发送的语言
Referer: 让服务器判断当前正在访问的URL是从哪个页面URL跳转过来的, 如果不是在本域中, 则认为是非法访问资源, 用来防止盗链
3、请求主体:包含数据的主体部分(传递给后台的参数)
状态行+响应头+响应体(响应正文)
1、状态行:协议类型及版本号 状态码 状态码描述
状态码:5大类
100~199表示请求已收到继续处理
200~299表示成功
300~399表示资源重定向
400~499表示客户端请求出错
500~599表示服务器端出错
如:100继续
200:响应成功
301资源被永久转移到其它url 302:跳转,重定向到临时的url 304:请求资源未更新
400:客户端有语法错误,非法请求 401:未授权 403:服务器拒绝提供服务 404:请求资源不存在,没有找到,页面不存在
500:服务器内部错误 501:服务器无法识别 502:错误网关 503服务出错,服务器超载或停机维护 504:网关超时
2、响应头:头部字段:值
主要字段有:
Server:服务器应用软件的名称和版本
Content-Type:响应正文的类型
Content-Length:响应正文的长度
Content-Charset:响应正文所使用的编码
Content-Encoding:响应正文使用的数据压缩格式
Content-Language:响应正文使用的语言
Location:重定向,让客户端跳转到新的URL进行访问
Last-Modified:服务器发来的当前资源的最后一次修改时间,如果下一次请求时,服务器上当前资源的修改时间比这个大(更晚),就返回新的资源内容。
3、响应正文:客户端所请求的文件
GET:从指定的资源请求数据。POST:向指定的资源提交要被处理的数据。
后退按钮/刷新:get无害,post重新发送请求
缓存:get会被浏览器主动缓存,post不能(只能手动设置)
书签:get产生的url可以被收藏为书签,post不行
编码:get只能url编码,post支持多种
参数:get参数长度有限且只接收ASCII字符,post没有限制
历史性:get请求能保存在历史记录中,post不会
可见性:get参数通过url传递,可见;post在request body中,不可见
安全性:post比get更安全,因为get请求参数暴露在url中
1、费用不一样:https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、传输协议不一样:http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、连接方式不一样:http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、安全性不一样:http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
无状态:数据包的发送,传输和接收都是相互独立的
无连接:指通信双方都不能长久的维持对方的任何信息
无状态是指协议对于事务处理没有记忆能力,因为http协议目的在于支持超文本的传输,更加广义一点就是支持资源的传输,那么在客户端浏览器向服务器发送请求,继而服务器将相应的资源发回客户这样一个过程中,无论对于客户端还是服务器,都没有必要记录这个过程,因为每一次请求和响应都是相对独立的,一般而言,一个url对应唯一的超文本,正因为这样的唯一性,所以http协议被设计为无状态的链接协议符合他本身的需求。
注:http运行于tcp之上,https运行于ssl之上,ssl运行于tcp之上。HTTPS协议并非是应用层的一种新的协议,只是在HTTP通信接口部分用SSL协议代替而已。原本HTTP与TCP之间直接进行通信,但加入SSL后就先是HTTP与SSL进行通信,再是SSL与TCP进行通信。
SSL:位于TCP/IP协议与各种应用层协议之间。
SSL协议基本内容:
1、SSL记录协议:建立在可靠传输协议的基础之上(如TCP),为高层协议提供数据封装、压缩、加密等基本功能。
2、SSL握手协议:建立在SSL记录协议之上,在数据传输之前,双方进行身份验证、协商加密算法、交换加密密钥等。
SSL协议原理:公钥加密法。客户端向服务端索要公钥,收到后用自己的私钥加密信息,服务端收到密文后用自己的私钥解密。
网断了、网络阻塞、请求超时、浏览器出问题、服务器出问题
整个过程大致如下:
1、查询DNS,获取域名对应的IP。
( 浏览器会从主机的Hosts文件中查看是否有该域名和IP地址的映射;如果Hosts文件没有,浏览器会查看自己的缓存;当上面两个方法都行不通时,只能去请求DNS服务器来获取IP地址;)
2、得到目标服务器的IP地址及端口号(http 80端口,https 443端口),会调用系统库函数socket,请求一个TCP流套接字。客户端向服务器发送HTTP请求报文:
(1)应用层:客户端发送HTTP请求报文。
(2)传输层:(加入源端口、目的端口)建立连接。实际发送数据之前,三次握手客户端和服务器建立起一个TCP连接。
(3)网络层:(加入IP头)路由寻址。
(4)数据链路层:(加入frame头)传输数据。
(5)物理层:物理传输bit。
3、服务器端经过物理层→数据链路层→网络层→传输层→应用层,解析请求报文,发送HTTP响应报文。
4、关闭连接,TCP四次挥手。
5、客户端解析HTTP响应报文,浏览器开始显示HTML
注:html页面渲染过程:
1)构建DOM树(从上到下解析html文件,生成dom树,即构建结点,把所有结点构建出来)
2)构建CSSOM树:解析css构建cssom树
3)构建渲染树:使用CSSOOM+DOM构建渲染树
4)布局:根据渲染树,浏览器开始计算各个节点的样式及位置
5)绘制:遍历渲染树,在页面上绘制各个节点
6)重排:js改变样式或添加节点,渲染树重新计算
7)重绘
DNS :计算机域名。用于将用户提供的主机名解析为ip地址 。
DNS服务器:
地址解析协议,用于实现IP地址到mac地址的映射,即询问目标IP对应的mac地址(物理地址)。工作过程如下:
1.查源主机的缓存里的ARP列表中是否有这个IP地址及其mac地址的对应
2.若有,则发送数据。若没有,则向本网段所有主机发送广播,发送自己的IP地址和mac地址,询问谁是这个IP,其mac地址是什么
4.其它主机对照查看,是的话从数据包中提取源主机的IP地址和mac地址写入到自己的ARP列表中,并将自己的mac地址写入响应包,回复源主机。
5.源主机发送数据
注:在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。)
注:为什么要用ARP地址解析协议:
因为osi把网络分为7层,每层之间不直接交流(除非特定接口),IP是第3层网络层,mac工作在第2层数据链路层。协议发包时,需封装IP和mac地址,但只知道IP,又不能跨层找,所以用ARP协议帮助获取目的节点的mac地址.(ARP协议是第三层协议,工作在第二层)
由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。
缓存是一种保存资源副本并在下次请求中直接使用该副本的技术,缓存能够节约网络资源,提升页面响应速度。常见的缓存类型分为共享缓存和私有缓存。
根据TCP协议的规定,用户和服务器建立连接需要三次握手:第一次握手用户向服务器发送SYN数据包发出请求(SYN, x:0),第二次握手服务器向用户发送SYN/ACK数据包发出回应(SYN/ACK, y:x+1),第三次握手用户向服务器发送ACK数据包发出确认(ACK, x+1:y+1),至此一个TCP连接建立成功。其中x为用户向服务器发送的序列号,y为服务器向用户发送的序列号。
关键字检测,针对明文或者base64等弱加密通讯内容,与准备好的敏感词库进行匹配,当发现敏感词时,将服务器发回的SYN/ACK包改成SYN/ACK, Y:0,这代表TCP连接被重置,用户便主动放弃了连接,提示连接失败。让用户误认为服务器拒绝连接,而主动放弃继续与服务器连接,自动阻断记录含有敏感词的网页。
因为HTTP请求是无状态的,它不会认识当前的用户是谁。cookie的出现就为了解决这个问题。用户第一次请求服务器时,服务器会返回一些数据(cookie)给浏览器,浏览器保存到本地,等下一次再请求服务器时就会自动带上本地的cookie数据,服务器拿到这个数据就知道该请求用户是谁了。但是cookie只能存少量数据,不同浏览器存储大小不同,但一般不超过4KB。session的作用和cookie的类似,都是为了保存用户的信息,只不过session放在服务器上,数据更安全,但是会占用服务器资源。