Java面试之网络通信

1、HTTP

超文本传输协议,一种应用层协议。简而言之,就是一种发布和接收html页面的方法,被用于在浏览器和服务器之间传递信息。

默认工作在TCP协议80端口,以明文传输数据,不安全。

2、HTTPS

超文本传输安全协议,由HTTP进行通信,但是利用SSL/TLS来加密数据。默认工作在TCP协议443端口。
SSL:安全套接层
TSL:传输层安全

HTTPS的工作流程

  • TCP三次握手建立连接
  • 客户端验证服务端的数字证书
  • DH算法协商对称加密算法的密钥、hash算法的密钥
  • SSL安全加密隧道协商完成
  • 数据以加密的方式传输,对称加密算法和密钥加密保证了数据的机密性,hash算法保证数据的完整性

HTTP和HTTPS的区别

  • HTTP 明文传输,安全性差;HTTPS(SSL+HTTP) 加密传输,安全性较好。
  • 使用 HTTPS 协议需要到 CA(数字证书认证机构) 申请证书。
  • HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
  • HTTP 端口号80,HTTPS端口号443。
  • HTTPS 比 HTTP 要更耗费服务器资源。

2.1、TCP三次握手

作用:建立一个可靠的连接,用于端对端传输数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lMzM0FAq-1678200584690)(D:\picture\学习\tcp三次握手.jpg)]

2.2、TCP四次挥手

作用:断开客户端和服务端的连接

在这里插入图片描述

2.3、HTTPS工作原理

HTTPS在传输数据之前需要客户端和服务端进行一次握手,握手过程中将确定密钥信息(对称加密算法的密钥)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YvkEn5Bs-1678200584697)(D:\picture\学习\HTTPS工作原理.png)]

Step1 客户端将自己支持的加密规则发送给服务端

Step2 服务端从中选出一组加密算法和hash算法,并传送证书给客户端,用于向客户端表明自己的身份(不是黑客的服务端),证书里包含公钥、颁发机构和过期时间等

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LHt2GH3m-1678200584698)(C:\Users\zilvx\AppData\Roaming\Typora\typora-user-images\image-20230221173542067.png)]

Step3 客户端的TSL解析证书。首先验证证书的有效性(颁发机构、过期时间等),若证书无异常,会生成一个随机值再使用证书中公钥进行加密。使用约定好的hash算法计算握手信息,并使用该随机值对握手信息进行加密。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HBoVeQfN-1678200584699)(C:\Users\zilvx\AppData\Roaming\Typora\typora-user-images\image-20230221181413674.png)]

Step4 客户端传送之前生成的所有信息(随机值和握手信息),服务端接收到后,使用私钥解密得到客户端传来的随机值和握手信息,该随机值作为密钥(客户端和服务端都知道这个密钥)。服务端验证hash是否与客户端发来的hash一致。

Step5 服务端使用密钥加密一段握手信息发送给客户端,客户端解密并计算握手信息中的hash

Step6 握手阶段结束,之后端对端传输数据将使用对称加密。

证书:类似于身份证,用来证明网站的身份。

根据证书的用途进行分类

  • SSL证书:负责传输公钥,加密HTTP协议,即HTTPS
  • 代码签名证书:用于签名二进制文件,如windows内核驱动、firefox插件、java代码签名等
  • 客户端证书:用于加密邮件
  • 双因素证书

SSL证书:HTTPS的握手阶段服务端会向客户端发送一个SSL证书,用来向客户端证明自己的身份。

SSL证书的安全问题

对HTTPS最常见的攻击手段就是SSL证书欺骗或者叫SSL劫持,是一种典型的中间人攻击。当黑客发起SSL劫持时,会伪造一个SSL证书发给浏览器,由于伪造的SSL证书不受信任,浏览器会给出提示。

不过SSL劫持并非只是用于攻击目的,在一些特殊情况下利用SSL劫持我们可以更顺畅的访问网络。

3、TCP/IP

TCP/IP:定义了电子设备如何连入因特网,数据如何在电子设备之间传输的标准

TCP/IP中用于处理数据通信的协议:

  • TCP:传输控制协议——应用程序之间的通信
  • UDP:用户数据报协议——应用程序之间的通信
  • IP:网际协议——计算机之间的通信
  • ICMP:因特网消息控制协议——针对错误和状态
  • DHCP:动态主机配置协议——针对动态寻址

TCP 用于应用程序之间的通信。在TCP中,程序A在与程序B通信前,会发送一个通信请求,双方握手后会建立一个全双工通信。

IP 用于计算机之间的通信。IP 是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路。通过 IP,数据被分割为小的独立的包,并通过因特网在计算机之间传送。IP 负责将每个包路由至它的目的地。

TCP/IP 是基于 TCP 和 IP 这两个最初的协议之上的不同的通信协议的协议簇。

TCP/IP协议簇分为四层,每一层都呼叫它的下一层所提供 的网络来完成自己的需求。这4层分别为:

  • 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、 网络远程访问协议(Telnet)等。
  • 传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、 用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中, 这一层负责传送数据,并且确定数据已被送达并接收。
  • 网络互连层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目 的主机(但不检查是否被正确接收),如网际协议(IP)。
  • 主机到网络层:对实际的网络媒体的管理,定义如何使用实际网络 (如Ethernet、Serial Line等)来传送数据。

4、对称加密算法

加密和解密使用的是同一个密钥。

优点:加解密的高速度和使用长密钥时的难破解性。

缺点:发送方和接收方在协商过程中密钥可能会泄露。

经典对称加密算法:AES

4.1、AES加解密过程

加密过程

  • 1、对齐:约定块的大小固定是128bit(16个字节),即所有加解密过程都是按照16个字节独立进行的。若待加密的明文不是16个字节的整数倍,则进行填充。
    填充要求:明文长度模16的结果以16进制表示出来,然后在明文后面追加该字节直至明文达到16个字节的整数倍。

  • 2、分块:对齐后,将明文分成相同大小的快,后续加密过程以块为单位独立进行,块与块之间无关联。

  • 3、轮:对一个块的加密过程是循环往复的。一个块经过加密计算后,还是一个16字节的块,循环往复多次。

  • 4、块加密:查表映射、取异或、移位、矩阵乘法

解密:加密过程的逆运算

加密模式:AES加解密只管块内,不管块与块之间。为了解决块间的混淆扩散问题,引入加密模式。经典的加密模式有CBC和CRT。

  • CBC:将当前块的明文与前一个块的密文进行异或,再进行当前块的AES加密过程。对于第一个块,与额外输入的IV向量进行异或。

  • CRT:AES不对明文进行加密,而是对一个数字进行加密,用加密后的内容与明文异或,产生密文。数字由输入的IV初始化,按照快的顺序依次递增,为每一个块分配一个数字。

5、非对称加密算法

加密和解密使用不同的密钥。发送方使用公钥加密数据,接收方使用私钥解密数据。非对称算法不仅有加密功能,还有提供签名的功能。发送方使用私钥加密,接收方通过公钥解密成功,就说明发送方拥有对应的私钥,可以证明发送方的身份。私钥加密就是我们说的签名。

优点:公钥是公开的信息,不需要保密,解决了密钥分发的问题。

缺点:加解密速度要远远慢于对称加密

场景:SSH登录、Git上传等,都可以将公钥上传到服务器,客户端保存私钥。

6、散列算法

使用散列算法往往不是为了加密,而是利用它可以对任意长度的输入,计算出一个定长的摘要。大量应用于使用MD5或者SHA算法计算出唯一id。散列算法更大的价值在于它的不可逆性。

场景1:Git中的提交记录、文件的完整性校验、字典或者Map的实现等
场景2:注册时对用户密码通过散列算法进行计算,存储最终的散列值。后续登陆时比较散列值即可。

散列算法的要求:

  • 不可逆性
  • 鲁棒性:同样的信息生成同样的摘要。
  • 唯一性:不存在两个不同的信息,能生产同样的摘要。

注意:使用散列算法时,注意加“盐”。“盐”指的是一串随机的字符串,是可以公开的。将密码加“盐”再进行散列计算,即使有两个用户的密码一样,也会拥有不同的散列值。“盐”越长,越安全。

6.1、MD5

概述:信息-摘要算法5,用于确保信息传输完整的一致性。

特点

  • 压缩性:任意长度的数据,算出的MD5值长度固定

  • 容易计算:从原数据算出MD5值很容易

  • 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别

  • 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的

MD5加密步骤

  • 1、填充:对信息进行填充,使其位长除以512的结果是448。填充过程是必须的,即使信息位长除以512的结果已经是448。
    填充办法:填充一个1和多个0,直至满足条件

  • 2、初始化变量

  • 3、处理分组数据

6.2、SHA256

任意长度的数据经过SHA256都会产生一个256位的哈希值,称为信息摘要。

对称加密用 AES+CTR、非对称加密用 ECC、散列算法用 SHA256 加盐,就能够满足大部分的使用场景了。

7、cookie和session

我们知道HTTP协议是无状态的。假设我们登录淘宝,一秒后关闭了淘宝页面,接着又打开淘宝页面发现需要再次登录。上述场景称为登录无状态。无状态指对交互性场景没有记忆性。为了弥补HTTP协议的无状态性,引入了cookie和session。

7.1、cookie

cookie是服务器发送到客户端并保存(暂时保存或者永久保存)在客户端的一小块数据。cookie会再下一次请求服务器时候携带发送到服务器上。通常用来告诉服务器两次请求是否来自同一浏览器,用于保持用户登陆状态。

作用:为了网站(服务端)辨识用户身份

7.2、session

session是指端对端的一次会话过程。当用户访问不同的网站时,session对象中的变量不会丢失,在整个用户会话中一直存在;当客户端关闭或者session超时失效时,会话结束。

作用:存储用户会话所需要的属性和配置信息

7.3、cookie和session结合使用

在cookie中存储session_id,将具体数据保存在session中。如果用户已经登录了,服务器会在cookie中存储session_id;下次请求时,会携带session_id,服务器根据session_id获取用户session信息,就能知道用户是谁以及之前保存的信息。

7.4、cookie和session的区别

  • 保存位置不同。
    • cookie保存在客户端
    • session保存在服务端
  • 有效期不同。
    • cookie可以设置长时间保持
    • session一般有效期比较短
  • 存储大小不同。
    • 单个cookie保存的数据一般小于4K
    • session存储数据远远多于4K
  • 安全性
    • session更安全,cookie不安全
  • 对服务器的压力
    • session占用了服务器性能
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值