HTTP、SSL VPN简单理解

此文章有什么理解不当的地方,欢迎随时提出您的建议,谢谢!

HTTP协议

HT超文本:用超链接的方式,将各种不同空间的文字信息组织在一起的网状文本。包含可以链接到其他位置或文档的链接,允许从当前位置切换到链接所指向的位置。超文本就是收集、存储和浏览离散信息以及建立和表现信息之间关联的一门网络技术。这些链接用URL表示。 常见的超文本格式是超文本标记语言HTML。
Hyper Text Transfer Protocol超文本文件传输协议:按照URL指示,将超文本文档从web服务器传输到本地浏览器的应用层协议。
URL:用来唯一的标识万维网中的某一个文档。
统一资源定位符
http://www.qq.com:80/nems/index.html
协议:// 主机端口:80 文件名及路径

浏览器访问网页的一般过程:
1、分析超链接中的URL;
2、查询是否有本地缓存、host文件、如果都没有,再去启动DNS;
3、浏览器向DNS服务器发出请求,查找URL对应的IP地址;
4、DNS服务器将解析出来的URL对应的IP地址发送给浏览器;
5、浏览器拿解析出来的IP地址与服务器建立TCP的连接(端口号为80);
6、浏览器先向Web服务器发出Http请求报文同时发出请求文档;
7、Web服务器向浏览器发出Http响应报文同时发出响应文档给浏览器;
8、释放TCP的连接;(因为HTTP是无状态的协议,一个是无状态(请求完以后就释放掉了)、一个是无连接(每次请求跟上一次没关系,服务器对一个主机的上一次请求是无记忆的)–做成无状态、无连接主要是为了服务器方便,减轻服务器的负荷);
9、客户机浏览器上显示要访问的页面内容;

请求报文的方法主要有PostGet:Get和Post的区别
Post的特点,提交的内容不会直接显示在URL部分,会在post包的data字段中。
Get的特点,提交的内容经过URI编码直接在URL栏中显示。
响应报文的状态码(Status-code)
在这里插入图片描述
USER-agent:浏览器标识
Server:响应头包含处理请求的原始服务器的软件信息
Referer:浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 当前请求中的网址/URL,简而言之就是携带有到达当前网页之前点击的一个网页的URL
Location:WEB 服务器告诉浏览器,试图访问的对象已经被移到别的位置了,到该头部指定的位置去取。

套接字:传输层和应用层之间,是用套接字连接的、API
套接字是网络编程中的一种通信机制,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。

HTTP的连接方式和无状态性
(1)非持久性连接
即浏览器每请求一个Web文档,就创建一个新的连接,当文档传输完毕后,连接就立刻被释放。 HTTP1.0、HTTP0.9采用此连接方式。对于请求的Web页中包含多个其他文档对象(如图像、声音、视频等)的链接的情况,由于请求每个链接对应的文档都要创建新连接,效率低下。
(2)持久性连接
即在一个连接中,可以进行多次文档的请求和响应。服务器在发送完响应后,并不立即释放连接,浏览器可以使用该连接继续请求其他文档。连接保持的时间可以由双方进行协商。
(3)无状态性
是指同一个客户端(浏览器)第二次访问同一个Web服务器上的页面时,服务器无法知道这个客户曾经访问过。HTTP的无状态性简化了服务器的设计,使其更容易支持大量并发的HTTP请求。

接着说一说session和cookie
Session:
在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。通常大家认为,只要关闭浏览器,Session就消失,其实这是错误的理解。对Session来说也是一样的,除非程序通知服务器删除一个Session,否则服务器会一直保留。由于关闭浏览器不会导致Session被删除,迫使服务器为Seesion设置了一个失效时间,当距离客户端上一次使用Session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把Session删除以节省存储空间.
(1)第一次访问某个web站点资源时,客户端提交没有带Session ID的请求(请求报文头没有Cookie头域信息)。而Web 服务器会检查是否有Session ID过来,没有则创建Session ID,并根据web程序自身定义在请求哪个资源时添加属于当前会话的信息(也可为空),这个信息列表以Session ID作为标识。然后将Session ID返回给客户端(通过响应报文头的Set-Cookie头域)。
(2)客户端再次访问同个web站点时,提交带有Session ID的请求(通过Cookie头域存储Session ID)。由服务端判断Session是否失效,如果未失效,可查询属于当前会话的信息列表。如果失效,则创建新的Session(产生新的Session ID),而原先的Session(包含Session带的信息列表)则丢失,无法访问。
Session的工作原理
①当一个Session第一次被启用时,一个唯一的标识被存储于本地的Cookie中。
②首先使用session_start()函数,PHP从Session仓库中加载已经存储的Session变量。
③当执行PHP脚本时,通过使用session_register()函数注册session变量。
④当PHP脚本执行结束时,未被销毁的Session变量会被自动保存在本地一定路径下的Session库中,这个路径可以通过php.ini文件中的Session.save_path指定,下次浏览网页时可以加载使用。
Cookie:
是储存在用户本地终端上的数据,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。
一般在交互过程中浏览器可以自动的按照规则把这个Session ID发回给服务器。Cookie的命名方式类似于Session ID。有时Cookie被人为的禁止,所以出现了其他机制以便在Cookie被禁止时仍然能够把Session ID传递回服务器。这种技术叫做URL重写,就是把Session ID直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://www.wantsoft.com/index.asp;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 。
另一种是作为查询字符串附加在URL后面,表现形式为http://www.wantsoft.com/index?js … 99zWpBng!-145788764 。
简单说Cookies:第一次登陆网站时,服务器会给你一个令牌,第二次是客户端带着令牌去找服务器的。最经典的应用:购物车

TCP拥塞控制、拥塞避免、慢启动算法、快速恢复

拥塞:即对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。

拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。

流量控制:指点对点通信量的控制,是端到端正的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

拥塞控制代价:需要获得网络内部流量分布的信息。在实施拥塞控制之前,还需要在结点之间交换信息和各种命令,以便选择控制的策略和实施控制。这样就产生了额外的开销。拥塞控制还需要将一些资源分配给各个用户单独使用,使得网络资源不能更好地实现共享。

慢启动与拥塞避免:
在这里插入图片描述
(1)当TCP连接进行初始化时,把拥塞窗口cwnd置为1MSS,慢开始门限的初始值设置为16个MSS,即 ssthresh = 16 。
(2)在执行慢开始算法时,拥塞窗口 cwnd 的初始值为1。以后发送方每收到一个对新报文段的确认ACK,就把拥塞窗口cwnd加1,则每个传输轮次拥塞窗口cwnd翻倍,因此在慢开始阶段拥塞窗口cwnd 随着传输轮次按指数规律增长。
(3)当拥塞窗口cwnd增长到慢开始门限值ssthresh时(即当cwnd=16时),就改为执行拥塞控制算法,每个传输轮次拥塞窗口cwnd加1,因此在拥塞控制阶段拥塞窗口cwnd 随着传输轮次按线性规律增长。
(4)假定拥塞窗口的数值增长到24时,超时计时器RTO时限已到但还没有收到确认,则认为网络出现超时(这很可能就是网络发生拥塞了)。更新后的ssthresh值变为ssthresh/2=12,拥塞窗口cwnd=1,然后回到第2步继续运行。

快恢复过程:
在这里插入图片描述
快恢复过程依赖于3个重复的Acks。因为,3个重复的Acks并不代表只丢了一个数据包,很有可能是丢了好多包。但这个算法只会重传一个,而剩下的那些包只能等到RTO超时,于是,进入了恶梦模式——超时一个阻塞窗口减半,多个超时会超成TCP的传输速度呈级数下降,而且也不会触发快速恢复算法了。

三次握手四次断开:
三次握手的过程:
(1)建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号seq=x,并进入SYN_SENT状态,等待服务器确认。(其中,SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x)。
(2)服务器收到请求后,必须确认客户的数据包。同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。(其中确认报文段中,标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含服务端的初始序号seq(服务器)=y,以及服务器对客户端初始序号的确认号ack(服务器)=seq(客户端)+1=x+1)。
(3)客户端收到服务器的SYN+ACK包,向服务器发送一个序列号(seq=x+1),确认号为ack(客户端)=y+1,此包发送完毕,客户端和服务器进入ESTAB_LISHED(TCP连接成功)状态,完成三次握手。

四次断开过程:
(1)首先,客户端发送一个FIN,用来关闭客户端到服务器的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,序列号seq=u。
(2)服务器收到这个FIN,它发送一个ACK,确认ack为收到的序号加一。
(3)关闭服务器到客户端的连接,发送一个FIN给客户端。
(4)客户端收到FIN后,并发回一个ACK报文确认,并将确认序号seq设置为收到序号加一。首先进行关闭的一方将执行主动关闭,而另一方则被动关闭。
客户端发送FIN后,进入终止等待状态,服务器收到客户端连接释放报文段后,就立即给客户端发送确认,服务器就进入CLOSE_WAIT状态,此时TCP服务器进程就通知高层应用进程,因而从客户端到服务器的连接就释放了。此时是“半关闭状态”,即客户端不可以发送给服务器,服务器可以发送给客户端。
此时,如果服务器没有数据报发送给客户端,其应用程序就通知TCP释放连接,然后发送给客户端连接释放数据报,并等待确认。客户端发送确认后,进入TIME_WAIT状态,但是此时TCP连接还没有释放,然后经过等待计时器设置的2MSL后,才进入到关闭状态。
在这里插入图片描述
为什么 TCP 握手需要三次?为什么 TCP 的挥手需要四次?
之所以需要三次握手,是源于TCP要保证其可靠性以及效率。假如服务端经过两次握手之后认为连接已建立,并且向客户端发送数据,但是因为网络缘故使得数据没有传输到客户端,那么客户端将会认为连接没有建立,导致客户端再次向服务端发送syn包请求建立连接,这种情况如果大量出现,不就是所谓的“syn攻击”吗?那么如果四次、五次握手的话又使得协议的效率降低。综上所述,TCP使用三次握手的机制。
需要四次的原因:双方关闭连接要经过双方都同意。所以,首先是客服端给服务器发送FIN,要求关闭连接,服务器收到后会发送一个ACK进行确认。服务器然后再发送一个FIN,客户端发送ACK确认,并进入TIME_WAIT状态。等待2MSL后自动关闭。

DNS:DNS使用TCP和UDP端口53
DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。DNS就是这样的一位“翻译官”,它的基本工作原理如下图。
在这里插入图片描述

SSL

1、 SSL(Secure Sockets Layer安全套接层)为Netscape(美国网景通信公司)所研发用以保障在Internet上数据传输的安全,Netscape倒闭之后将SSL捐献给了公有组织,公有组织对其进行继续开发,现在我们一般使用的是其继任者TSL(Transport Layer Security传输层安全),用以保障网络通信的安全性和完整性。如图所示,是启用SSL的数据包结构:
在这里插入图片描述
2、SSL协议可用于保护正常运行于TCP之上的任何应用协议,如HTTP、FTP、SMTP(邮件协议)或Telnet的通信,最常见的是用SSL来保护HTTP的通信(HTTPS,端口号为443)。
SSL协议的优点在于它是与应用层协议无关的。高层的应用协议(如HTTP、FTP、Telnet等)能透明地建立于SSL协议之上。SSL协议在应用层协议之前就已经完成加密算法、通信密钥的协商以及服务器的认证工作(这里可以参考IPSEC的IKE第一阶段)。在此之后应用层协议所传送的数据都会被加密,从而保证通信的安全性。

3、SSL的三大功能:
(1)客户对服务器的身份认证(SSL服务器允许客户的浏览器使用标准的公钥加密技术和一些可靠的认证中心(CA)的证书,来确认服务器的合法性。)
(2)服务器对客户的身份认证(可通过公钥技术和证书进行认证,也可通过用户名,password来认证。
)
(3)建立服务器与客户之间安全的数据通道(SSL要求客户与服务器之间的所有发送的数据都被发送端加密、接收端解密,同时还检查数据的完整性)。

4、SSL协议的工作原理(分层的思想—类比IPSEC两个阶段):
SSL协议是一个分层的协议,共有两层组成。处于SSL协议的底层的是SSL记录层协议(SSL Record Protocol),它位于可靠的传输层协议(如TCP)之上,用于封装高层协议的数据。其中SSL握手协议(SSL Handshake Protocol)允许服务方和客户方互相认证,并在应用层协议传送数据之前协商出一个加密算法和会话密钥(类似于IPSEC的第一阶段),每次握手都会建立一个全新的连接。
在这里插入图片描述
5、SSL记录协议(记录层的报文如图所示):
在这里插入图片描述
SSL记录协议功能:保护传输数据的私密性,对数据进行加密和解密、验证传输数据的完整性,计算报文的摘要、提高传输数据的效率,对报文进行压缩、保证数据传输的可靠和有序

6、SSL握手协议的握手过程:
1)无客户端认证的全握手过程
在这里插入图片描述
2)有客户端认证的全握手过程
在这里插入图片描述
3)会话恢复过程
在这里插入图片描述
SSL通信的整体过程:
在这里插入图片描述
通信过程主要分为4步:
1、协商
1)网络连接建立,SSL客户端发送消息,消息中包含客户端支持的SSL版本号、加密套件、协商压缩算法列表、sessionid=0、随机数(主要为了防重放攻击);
2)SSL服务器端回应消息,确定SSL版本号、加密算法和压缩算法、、计算sessionid、随机数;
2、做认证
1)SSL服务器发出服务器数字证书、服务器发送秘钥交换附加信息–就是向客户端索要证书、服务器通知客户端消息发送完毕;
2)SSL客户端的认证服务器端身份之后,发送自身的认证证书,认证成功进入下一步,若认证不成功,则会话终止;
3、密钥交换DH
1)客户端生成预主密钥pre_master_key(后续秘钥与此秘钥有关系,可以通过算法推导出来),用服务端的公钥加密后发送到服务器端
2)并且客户机会向服务器发送之前握手消息生成的数字签名,改变加密约定消息,并通知之后的消息开始启用加密参数。
3)客户端说明客户端部分SSL协商成功结束,并发送握手验证报文确定数据的完整性。
4)服务器使用私钥解密pre_master_key后,根据随机数执行相应算法生成会话密钥(该密钥是对称密钥,用于加密和解密在SSL会话期间交换的信息,检验信息完整性)。
5)然后服务端改变加密约定消息,并通知客户端之后的消息开始启用加密参数。
6)客户端说明客户端部分SSL协商成功结束,并发送握手验证报文确定数据的完整性。
至此双方SSL过程完成
4、服务端客户端双方开始传递数据。

握手协议功能:协商SSL协议的版本、协商加密套件、协商密钥参数、验证通信双方的身份(可选)、建立SSL连接

7、SSL存在的问题简要分析:

(1)SSL默认是不会对客户端进行认证的,因为双方都要进行认证的话就会增加网络承载的负荷,从而导致网络性能的下降。
解决方案:在必要的网络环境下开启服务器对于客户端的认证。

(2)SSL协议需要在握手之前建立TCP连接,因此不能对UDP应用进行保护。
解决方案:如果要兼顾UDP协议层之上的安全保护,可以采用IP层的安全解决方案(例如IPSEC)。

(3)SSL只是对应用层的数据进行了加密,数据包的IP头与TCP头仍然是裸漏在公网之上的,有一定安全隐患。

(4)密钥泄漏问题:除非SSL的工程实现大部分驻留在硬件中,否则主密钥将会存留在主机的主存储器中,这就意味着任何可以读取SSL进程存储空间的攻击者都能读取主密钥,因此,不可能面对掌握机器管理特权的攻击者而保护SSL连接。
解决方案:依靠用户管理策略来解决。

8、SSL协议的实现(主要是通过三个协议来实现的):
(1)SSL握手协议:SSL握手协议被封装在记录协议中,该协议允许服务器与客户机在应用程序传输和接收数据之前互相认证、协商加密算法和密钥。在初次建立SSL连接时,服务器与客户机交换一系列消息。
(2)SSL修改密文协议:保障SSL传输过程的安全性,客户端和服务器双方应该每隔一段时间改变加密规范。
(3)SSL报警协议:SSL报警协议是用来为对等实体传递SSL的相关警告。如果在通信过程中某一方发现任何异常,就需要给对方发送一条警示消息通告。

9、SSL VPN的三种应用场景:
(1)SSL VPN的Web代理应用以及SSL Web代理的数据封装结构:
原理:客户端与SSL设备建立SSL VPN连接,SSL vpn设备把server服务转换为client可以打开的链接,客户端访问服务器时,直接走VPN隧道;SSL vpn设备收到数据后解封装,HTTPS协议变为http,SSL vpn设备再以自己为源访问服务器,得到应答后,回应客户端。Web代理(一般穿越公网加密 ) Web页面套着Web。

不足:只能搜索URL相关的,只能使用Web应用。

优点:是四层VPN,不需要对三层进行处理,所有的封装和校验针对的是TCP后面的东西,穿透性极强。很适合如今的移动端办公。不需要装客户端,十分方便、控制的颗粒度更细,具体到页面。
在这里插入图片描述
在这里插入图片描述
注:路由器一般是栈到栈的VPN,防火墙一般是远程VPN。

(2)SSL VPN的端口映射应用以及SSL VPN的端口映射的数据封装结构:
该方法适用于TCP的所有应用,关键在于映射

优点:可以处理所有有关TCP的应用
对审计的影响:法律规定,企业要对员工的流量进行审计
可以做到应用资源的下发(只要是TCP的资源,因为其基于TCP应用)

不足:没有Web做的精细,想在该协议下处理Web,可以加入Web代理,两者结合使用、需要安装软件
在这里插入图片描述
在这里插入图片描述
(3)SSL VPN的IP连接以及IP连接的数据封装结构:
IP连接 支持所有基于TCP、UDP、ICMP的应用
原理:Client安装虚拟网卡,虚拟网卡在客户端生成路由表指向虚拟网卡,客户端登录vpn,访问服务器,查询路由表,发现数据包应该交给虚拟网卡处理,虚拟网卡将原来的数据包加密封装在新数据的应用数据中,送入VPN隧道,SSL VPN将数据解封后,露出原数据,然后以SSL VPN为源访问服务器,得到回应后,再将数据封装在新数据包中,发给客户端。
SSL VPN IP连接即建立四层的隧道。

优点:数据的传输更加安全。

缺点:负荷过大,性能上比不了三层的隧道,做不了协议。
在这里插入图片描述
在这里插入图片描述
10、SSL VPN简要总结分析:
SSL VPN与IPSEC VPN的不同之处,如图所示:
在这里插入图片描述
(1)SSL VPN主要用于终端远程接入公司内部实现移动办公,IPSec VPN主要用于分支总部多点互联实现总部分支内网互联;
(2)SSL VPN是一种远程安全接入技术(如日中天的VPN,四层VPN技术),因为采用SSL协议而得名。因为Web浏览器都内嵌支持SSL协议,使得SSL VPN可以做到“无客户端”部署,从而使得远程安全接入的使用非常简单,而且整个系统更加易于维护。SSL VPN一般采用插件系统来支持各种TCP和UDP的非Web应用,使得SSL VPN真正称得上是一种VPN,并相对IPSec VPN更符合应用安全的需求,成为远程安全接入主要手段和选择。

作者:苏小酱

猜你喜欢

转载自blog.csdn.net/qq_43371350/article/details/89043997
今日推荐