Java 网络编程,Http 协议,Https 协议,Tcp/Ip 协议,三次握手以及四次挥手, Http 长链接和短连接概念以及区别,对称加密,非对称加密原理等
Posted haijiao12138
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 网络编程,Http 协议,Https 协议,Tcp/Ip 协议,三次握手以及四次挥手, Http 长链接和短连接概念以及区别,对称加密,非对称加密原理等相关的知识,希望对你有一定的参考价值。
-
Http协议与Https协议
-
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
-
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
-
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
-
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
-
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
-
Https的优点:
-
使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
(2)HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
(3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
(4)谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
-
缺点:
-
(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;
(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;
(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
(5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
-
-
-
Tcp/IP协议
-
它只是利用 IP 进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分。TCP/IP 一词泛指这些协议,因此,有时也称 TCP/IP 为网际协议群。
互联网进行通信时,需要相应的网络协议,TCP/IP 原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。
三握四挥
-
-
认位ACK:当ACK=1时,确认号ack才生效。
-
确认号ack:期望收到的下一个报文段的第一个数据字节的序号,
-
同时选择一个初始序列号seq=x;
-
-
四次挥手
-
段首部的终止控制位FIN=1,序号seq=u
-
:为什么A要等待2MSL的时间?
-
-
为了保证A发送的最后一个报文段能够到达B。因为这个 ACK 有可能丢失,从而导致处在 LAST-ACK 状态的服务器收不到对 FIN-ACK 的确认报文。服务器会超时重传这个 FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待 2MSL,而是在发送完 ACK 之后直接释放关闭,一旦这个 ACK 丢失的话,服务器就无法正常的进入关闭连接状态。
-
可以防止已失效的报文段。客户端在发送最后一个 ACK 之后,再经过经过 2MSL,就可以使本连接持续时间内所产生的所有报文段都从网络中消失,从保证在关闭连接后,不会有仍在网络中滞留的报文段去骚扰服务器。
-
为什么建立连接三次,断开连接四次?
-
因为建立连接时,服务器的确认 ACK 和请求同步 SYN 可以放在一个报文里,而断开连接时,服务器可能还有数据要传送,因此,必须先发一个客户端断开连接请求的确认 ACK,以免客户端超时重传,待服务器的数据传送完毕后,再发送一个请求断开连接的报文段。
-
断开时次数比连接多一次,是因为连接过程,通信只需要处理「连接」,而断开过程,通信需要处理「数据+连接」。
-
为什么要四次挥手?
注:TCP 是全双工通信,因此必须两个方向分别断开连接
-
A 向 B 发送一个连接释放请求报文,代表 A 的数据传送完了,请求释放连接;
-
B 收到后,B 立即向 A 发送一个确认报文,代表 B 已经知道 A 没有数据要传送了,但是 B 可能还有数据要向 A 传送;
-
B 的数据传送完后,向 A 发送一个连接释放请求报文,代表 B 的数据也传送完了,请求释放连接;
-
A 收到后,也立即向 B 发送一个确认报文,同时等待 2MSL 后,连接断开。
-
-
长短连接
-
实质上是TCP协议的长连接和短连接
-
HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。
-
IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。
-
TCP有可靠,面向连接的特点。
-
在HTTP/1.0中,默认使用的是短连接。
-
也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
如果客户端访问的某个html或其他类型的Web资源,如javascript文件、图像文件、CSS文件等。
当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
-
-
但从HTTP/1.1起,默认使用长连接,用以保持连接特性。
-
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭。
如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
-
-
长连接短连接区别:
-
1.服务器端空间管理上:
Keep-Alive不会永久保持连接,因为TCP连接将会越来越多,直到把服务器的TCP连接数量撑爆到上限为止,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间;
短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。
-
2.时间上:
-
在客户请求频繁的情况下:若使用短连接,将在TCP的建立和关闭操作上浪费时间和带宽;
若使用长连接,就可以节省很多这样的消耗;
-
-
-
长连接有两个问题:
a.HTTP 1.1 基于串行文件传输数据,因此这些请求必须是有序的,所以实际上我们只是节省了建立连接的时间,而获取数据的时间并没有减少
b.最大并发数问题,假设我们在 Apache 中设置了最大并发数 300,而因为浏览器本身的限制,最大请求数为 6,那么服务器能承载的最高并发数是 50
对称加密和非对称加密
-
非对称加密:
-
用公钥加密用私钥解密
-
b.加密、解密相对于对称加密效率更低,但是比对称加密更安全。
-
公钥可能被中间人伪造,造成数据不安全。
-
-
Https
-
总结:
-
对称加密的效率最高
-
数字证书、对称加密由于效率比较低适合做身份验证
-
https底层用的还是对称加密传输数据,所谓的数字证书、非对称加密都是为了验证对方的身份。
-
以上是关于Java 网络编程,Http 协议,Https 协议,Tcp/Ip 协议,三次握手以及四次挥手, Http 长链接和短连接概念以及区别,对称加密,非对称加密原理等的主要内容,如果未能解决你的问题,请参考以下文章