0%

网络、密码与安全

TodoItem

JWT todo

互联网 20 大安全隐患 todo

CSRF 攻击的应对之道 todo

https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/

https://segmentfault.com/a/1190000006944760?utm_source=tag-newest

https://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

RS256加密算法研究 todo

http vs https todo

SSL vs TLS todo

AES 是对称加密,不安全? todo

TCP vs WebSocket vs KCP

两种基本的加解密算法类型

  1. 对称加密(symmetrcic encryption):密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES,RC5,3DES等;对称加密主要问题是共享秘钥,除你的计算机(客户端)知道另外一台计算机(服务器)的私钥秘钥,否则无法对通信流进行加密解密。解决这个问题的方案非对称秘钥。

  2. 非对称加密:使用两个秘钥:公共秘钥和私有秘钥。私有秘钥由一方密码保存(一般是服务器保存),另一方任何人都可以获得公共秘钥。
    这种密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

网络通讯协议

参考来源

TCP

TCP协议主要是在传输层,基于三次握手原理。

三次握手

  • 第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认;
  • 第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

四次挥手

Http

TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性,Http协议是建立在TCP协议基础之上的。

Http的特点

  • 简单快速(只需传送请求方法和路径。请求方法常用的有GET、POST等。每种方法规定了客户与服务器交互的类型不同,由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快)
  • 灵活(请求头部的Content-Type信息可以代表任意类型的数据,比如图片、文件、字符串数据等)
  • 短连接(限制每次连接只处理一个请求。服务器处理完客户的请求,收到客户的应答后,即断开连接,节省端到端的交互成本)
  • 无状态(无状态是指协议对于事务处理没有记忆能力,在没有自定义特定的标示时,服务端无法判断两个请求的相互关联性,缺少状态意味着如果后续处理需要前面的信息,则它必须重传关键数据信息,这样可能导致每次连接传送的数据量增大)

HTTP的请求方法

  • GET(根据url请求指定的页面信息,并返回实体主体)
  • HEAD(类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头)
  • POST(向指定资源提交数据进行处理请求,例如提交表单或者上传文件,数据被包含在请求体中)
  • PUT(从客户端向服务器传送更新数据)
  • DELETE(请求服务器删除指定的页面)
  • CONNECT(HTTP1.1协议中预留给能够将连接改为管道方式的代理服务器)
  • OPTIONS(允许客户端查看服务器的性能)
  • TRACE(回显服务器收到的请求,主要用于测试或诊断)

Unsupported Media Type

在PostMan中调用后端微服务的Post接口,报了这个错,解决方法:
Headers增加Content-Type:application/json
Body采用raw和JSON(application/json)的方式发送,然后再下方填入json数据。

Socket

Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。
通过Socket编程使用TCP协议的时候,因为我们自己可以通过代码区控制什么时候打开连接什么时候关闭连接,只要我们不通过代码把连接关闭,这个连接就会在客户端和服务端的进程中一直存在。

实现原理

生成套接字,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
要通过互联网进行通信,至少需要一对套接字,一个运行于客户机端,称之为ClientSocket,另一个运行于服务器端,称之为serverSocket。
Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。
套接字之间的连接过程可以分为三个步骤:

  • 服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态;
  • 客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须,首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
  • 连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了,而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。 实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、 listen、connect、accept、send、read和write等等。
实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。socket是对端口通信开发的工具,它要更底层一些。

HTTP VS Socket

HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

工具

Apache Jmeter(高并发模拟测压)

网站或服务请求压力模拟测试工具。