您的位置:首页 > 理论基础 > 计算机网络

Https与TCP原理机制解析

2017-02-21 16:03 239 查看
1、HTTP与HTTPS区别

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密。如果攻击者截取了Web浏览器和网站服务器的传递报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传递一些敏感信息,比如:银行卡号,密码等私密信息。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全, HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并未浏览器和服务器之间的通信加密。

        HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端与服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTPS:是以安全为目标的HTTP通道,简单来说就是HTTP的安全加强版,即HTTP下加入SSL层,HTTPS的安全基础是SSL ,因此为客户端与服务端的通信内容加密是依靠SSL完成的。

HTTPS协议的主要作用可分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;一种是确认网站的真实性。

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTPS协议传输隐私信息非常不安全,为了保证这些隐私数据能够加密传输。于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。

简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。两者的区别主要如下:

A、HTTPS协议需要用到ca申请证书,一般免费证书较少,因而需要一定费用;

B、HTTP是超文本协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议,传输信息比较安全;

C、HTTP和HTTPS使用的是两种完全不同的连接方式,用的端口也不一样,前者是80,后者是443;

D、HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全;

HTTPS的工作原理:

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议中使用了非对称加密、对称加密以及HASH算法。握手的过程如下:

1、浏览器将自己支持的一套加密规则发送给网站;

2、网站从中选取一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址、加密公钥、以及证书的颁发机构等信息;

3、浏览器获得网站证书之后要做以下工作:

a、验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等);如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信任的提示;

b、如果证书受信任,或者是用户接受了不受信任的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密;

c、使用约定好的HASH算法计算握手信息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站;

4、网站接收浏览器发来的数据之后要做以下操作:

a、使用自己的私钥将信息解密去解出密码,使用密码解密浏览器发来的握手消息,并验证HSAH是否和浏览器发来的一致;

b、使用密码加密一段握手信息,发送给浏览器;

5、浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密;

2、TCP 3次握手,4次挥手过程

2.1、建立连接协议(三次握手)

a、客户端发送一个带SYN标志的TCP报文到服务器,这是三次握手过程中的报文1;

b、服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯;

c、客户端必须再次回应服务端一个ACK报文,这是报文段3;

为什么需要“三次握手”

三次握手的目的是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误,或者说是为了解决网络中存在延迟的重复分组的问题。

       “已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络节点长时间的只留了,以致延误到连接释放以后的某个时间才到达server。本来这事一个早已失效的报文段,但是server收到此失效的连接请求报文段后,就误以为是client再次发出的一个新的连接请求。于是就向client再次发出一个新的连接请求,于是就向client发出确认报文段,同意建立连接。假设不采用三次握手,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出简历连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经简历,并一直等待client发来数据,这样,server的很多资源就白白浪费掉了,采用三次握手的办法可以防止上述现象发生。例如上面这种情况,client不会向server的确认发出确认,server由于接收不到确认,就知道client并没有要求建立连接。主要是防止server端一直等待,浪费资源。

2、连接终止协议(四次挥手)

由于TCP连接是全双工(双网工是指交换机在发送数据的同时也能够接收数据,双网工的好处在于迟延小、速度快)的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

a、TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4);

b、服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文5),和SYN一样,一个FIN将占用一个序号;

c、服务器关闭客户端的连接,发送一个FIN给客户端(报文段6);

d、客户端发回ACK报文确认,并将确认序号设置为收到的序号加1(报文段7);

为什么需要“四次挥手”

在TCP连接握手时为何ACK是和SYN一起发送,挥手时ACK却没有和FIN一起发送?原因是TCP是全双工模式,接收到FIN时意味将没有数据再发来,但是还是可以继续发送数据的。

握手、挥手过程中个状态介绍:

3次握手过程状态:

LISTEN:表示服务器端的某个SOCKET处于监听状态,可以接受连接了;

SYN_SENT:当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,随即它就会进入到SYN_SENT状态,并等待服务端的发送三次握手中第二个报文。SYN_SENT状态表示客户端已经发送SYN报文(发送端);

SYN_RCVD:这个状态与SYN_SENT相对应,表示接受到了SYN报文,在正常情况下,这个状态是服务端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,非常短暂,基本上用netstat命令很难看到这种状态。除非你特意写一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。在这种状态时,当收到客户端的ACK报文后,它就会进入到ESTABLISHED状态(服务端);

ESTABLISHED:表示连接已经建立了;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: