计算机网络

1、网络协议

发送请求的过程是从最顶层(应用层)出发,每一层负责封装属于本身的信息到请求中,最后将一整个请求发送给对方。
接收请求的过程是从最底层(网络接口层)开始,每一层的协议负责解析属于本身的东西,好比网际层(IP)处理ip信息,传输层(TCP)处理点对点的端口,应用层(HTTP)处理Request或Response的Line\Header\Body。web

 

2、TCP(Transmission Control Protocol,传输控制协议)

TCP是一种面向链接(链接导向)的、可靠的基于字节流的传输层通讯协议。TCP将用户数据打包成报文段,它发送后启动一个定时器,另外一端收到的数据进行确认、对失序的数据从新排序、丢弃重复数据。
TCP的特色有:
算法

    • TCP是面向链接的运输层协议
    • 每一条TCP链接只能有两个端点,每一条TCP链接只能是点对点的
    • TCP提供可靠交付的服务
    • TCP提供全双工通讯。数据在两个方向上独立的进行传输。所以,链接的每一端必须保持每一个方向上的传输数据序号。
    • 面向字节流。面向字节流的含义:虽然应用程序和TCP交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅是一连串的无结构的字节流。

 

一、TCP头格式

(1)   Source Port(源端口号):数据发起者的端口号,16bit。
(2)   Destination Port(目的端口号):数据接收者的端口号,16bit。
(3)   Sequence Number(顺序号码,Seq):用于在数据通讯中解决网络包乱序(reordering)问题,以保证应用层接收到的数据不会由于网络上的传输问题而乱序(TCP会用这个顺序号码来拼接数据),32bit。
(4)   Acknowledgment Number(确认号码,ack):是数据接收方指望收到发送方在下一个报文段的顺序号码(Seq),所以确认号码应当是上次已成功收到顺序号码(Seq)加1,32bit。
(5)   Offset(TCP报文头长度):用于存储报文头中有多少个32bit(上图的一行),存储长度为4bit,最大可表示(2^3+2^2+2^1+1)*32bit=60bytes的报文头。最小取值5,5*32bit=20bytes。
(6)   Reserved(保留):6bit, 均为0
(7)   TCP Flags(TCP标志位)每一个长度均为1bit
          CWR:压缩,TCP Flags值0x80。
          ECE:拥塞,0x40。
          URG:紧急,0x20。当URG=1时,表示报文段中有紧急数据,应尽快传送。
          ACK:确认,0x10。当ACK = 1时,表明这是一个确认的TCP包,取值0则不是确认包。
          PSH:推送,0x08。当发送端PSH=1时,接收端尽快的交付给应用进程。
          RST:复位,0x04。当RST=1时,代表TCP链接中出现严重差错,必须释放链接,再从新创建链接。
          SYN:同步,0x02。在创建链接是用来同步序号。SYN=1, ACK=0表示一个链接请求报文段。SYN=1,ACK=1表示赞成创建链接。
          FIN:终止,0x01。当FIN=1时,代表此报文段的发送端的数据已经发送完毕,并要求释放传输链接。
(8)   窗口:用来控制对方发送的数据量,通知发放已肯定的发送窗口上限。
(9)   检验和:该字段检验的范围包括头部和数据这两部分。由发端计算和存储,并由收端进行验证。
(10) 紧急指针:紧急指针在URG=1时才有效,它指出本报文段中的紧急数据的字节数。
(11) TCP选项:长度可变,最长可达40字节浏览器

 

二、TCP协议中的三次握手和四次挥手

 

Seq:是发送方当前报文的顺序号码。
ack:是发送方指望对方在下次返回报文中给回的Seq。缓存

 

3、HTTP(HyperText Transfer Protocol,超文本传输协议)

HTTP是一个应用层协议,虽然在2015年已推出HTTP/2版本,并被主要的web浏览器和web服务器支持。但目前使用最普遍的仍是HTTP/1.1版本。安全

CLOSED: 这个没什么好说的了,表示初始状态。
LISTEN: 这个也是很是容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,能够接受链接了。
SYN_RECV: 这个状态表示接受到了SYN报文,在正常状况下,这个状态是服务器端的SOCKET在创建TCP链接时的三次握手会话过程当中的一个中间状态,很短暂,基本 上用netstat你是很难看到这种状态的,除非你特地写了一个客户端测试程序,故意将三次TCP握手过程当中最后一个ACK报文不予发送。所以这种状态 时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。
SYN_SENT: 这个状态与SYN_RECV遥想呼应,当客户端SOCKET执行CONNECT链接时,它首先发送SYN报文,所以也随即它会进入到了SYN_SENT状 态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。
ESTABLISHED:这个容易理解了,表示链接已经创建了。服务器

 

FIN_WAIT_1: 这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别 是:FIN_WAIT_1状态其实是当SOCKET在ESTABLISHED状态时,它想主动关闭链接,向对方发送了FIN报文,此时该SOCKET即 进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,固然在实际的正常状况下,不管对方何种状况下,都应该马 上回应ACK报文,因此FIN_WAIT_1状态通常是比较难见到的,而FIN_WAIT_2状态还有时经常能够用netstat看到。
FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半链接,也即有一方要求close链接,但另外还告诉对方,我暂时还有点数据须要传送给你,稍后再关闭链接。
TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后便可回到CLOSED可用状态了。若是FIN_WAIT_1状态下,收到了对方同时带 FIN标志和ACK标志的报文时,能够直接进入到TIME_WAIT状态,而无须通过FIN_WAIT_2状态。
CLOSING: 这种状态比较特殊,实际状况中应该是不多见,属于一种比较罕见的例外状态。正常状况下,当你发送FIN报文后,按理来讲是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。可是CLOSING状态表示你发送FIN报文后,并无收到对方的ACK报文,反而却也收到了对方的FIN报文。什 么状况下会出现此种状况呢?其实细想一下,也不可贵出结论:那就是若是双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报 文的状况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET链接。 
网络

CLOSE_WAIT: 这种状态的含义实际上是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给本身,你系统毫无疑问地会回应一个ACK报文给对 方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正须要考虑的事情是察看你是否还有数据发送给对方,若是没有的话,那么你也就能够 close这个SOCKET,发送FIN报文给对方,也即关闭链接。因此你在CLOSE_WAIT状态下,须要完成的事情是等待你去关闭链接。
LAST_ACK: 这个状态仍是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也便可以进入到CLOSED可用状态了。并发

 

 为何TIME_WAIT状态还须要等2MSL后才能返回到CLOSED状态?性能

这是由于:虽然双方都赞成关闭链接了,并且握手的4个报文也都协调和发送完毕,按理能够直接回到CLOSED状态(就比如从SYN_SEND状态到ESTABLISH状态那样);可是由于咱们必需要假想网络是不可靠的,你没法保证你最后发送的ACK报文会必定被对方收到,所以对方处于LAST_ACK状态下的SOCKET可能会由于超时未收到ACK报文,而重发FIN报文,因此这个TIME_WAIT状态的做用就是用来重发可能丢失的ACK报文,并保证于此。学习

 

TCP保证可靠性:

(1)序列号、确认应答、超时重传

数据到达接收方,接收方须要发出一个确认应答,表示已经收到该数据段,而且确认序号会说明了它下一次须要接收的数据序列号。若是发送发迟迟未收到确认应答,那么多是发送的数据丢失,也多是确认应答丢失,这时发送方在等待必定时间后会进行重传。这个时间通常是2*RTT(报文段往返时间)+一个误差值。

(2)窗口控制与高速重发控制/快速重传(重复确认应答)

TCP会利用窗口控制来提升传输速度,意思是在一个窗口大小内,不用必定要等到应答才能发送下一段数据,窗口大小就是无需等待确认而能够继续发送数据的最大值。若是不使用窗口控制,每个没收到确认应答的数据都要重发。

使用窗口控制,若是数据段1001-2000丢失,后面数据每次传输,确认应答都会不停地发送序号为1001的应答,表示我要接收1001开始的数据,发送端若是收到3次相同应答,就会马上进行重发;但还有种状况有多是数据都收到了,可是有的应答丢失了,这种状况不会进行重发,由于发送端知道,若是是数据段丢失,接收端不会放过它的,会疯狂向它提醒......

(3)拥塞控制

若是把窗口定的很大,发送端连续发送大量的数据,可能会形成网络的拥堵(你们都在用网,你在这狂发,吞吐量就那么大,固然会堵),甚至形成网络的瘫痪。因此TCP在为了防止这种状况而进行了拥塞控制。

慢启动:定义拥塞窗口,一开始将该窗口大小设为1,以后每次收到确认应答(通过一个rtt),将拥塞窗口大小*2。

拥塞避免:设置慢启动阈值,通常开始都设为65536。拥塞避免是指当拥塞窗口大小达到这个阈值,拥塞窗口的值再也不指数上升,而是加法增长(每次确认应答/每一个rtt,拥塞窗口大小+1),以此来避免拥塞。

将报文段的超时重传看作拥塞,则一旦发生超时重传,咱们须要先将阈值设为当前窗口大小的一半,而且将窗口大小设为初值1,而后从新进入慢启动过程。

快速重传:在遇到3次重复确认应答(高速重发控制)时,表明收到了3个报文段,可是这以前的1个段丢失了,便对它进行当即重传。

而后,先将阈值设为当前窗口大小的一半,而后将拥塞窗口大小设为慢启动阈值+3的大小。

这样能够达到:在TCP通讯时,网络吞吐量呈现逐渐的上升,而且随着拥堵来下降吞吐量,再进入慢慢上升的过程,网络不会轻易的发生瘫痪。

 

采用慢开始和拥塞避免算法的时候

1. 一旦cwnd>慢开始门限,就采用拥塞避免算法,减慢增加速度

2. 一旦出现丢包的状况,就从新进行慢开始,减慢增加速度

采用快恢复和快重传算法的时候

1. 一旦cwnd>慢开始门限,就采用拥塞避免算法,减慢增加速度

2. 一旦发送方连续收到了三个重复确认,就采用拥塞避免算法,减慢增加速度

 

 

HTTP协议和HTTPS协议区别以下:

1)HTTP协议是以明文的方式在网络中传输数据,而HTTPS协议传输的数据则是通过TLS加密后的,HTTPS具备更高的安全性

2)HTTPS在TCP三次握手阶段以后,还须要进行SSL 的handshake,协商加密使用的对称加密密钥

3)HTTPS协议须要服务端申请证书,浏览器端安装对应的根证书

4)HTTP协议端口是80,HTTPS协议端口是443

HTTPS优势:

HTTPS传输数据过程当中使用密钥进行加密,因此安全性更高

HTTPS协议能够认证用户和服务器,确保数据发送到正确的用户和服务器

HTTPS缺点:

HTTPS握手阶段延时较高:因为在进行HTTP会话以前还须要进行SSL握手,所以HTTPS协议握手阶段延时增长

HTTPS部署成本高:一方面HTTPS协议须要使用证书来验证自身的安全性,因此须要购买CA证书;另外一方面因为采用HTTPS协议须要进行加解密的计算,占用CPU资源较多,须要的服务器配置或数目高

 

 

 

HTTP返回码

HTTP协议的响应报文由状态行、响应头部和响应包体组成,其响应状态码整体描述以下:

1xx:指示信息--表示请求已接收,继续处理。

2xx:成功--表示请求已被成功接收、理解、接受。

3xx:重定向--要完成请求必须进行更进一步的操做。

4xx:客户端错误--请求有语法错误或请求没法实现。

5xx:服务器端错误--服务器未能实现合法的请求。

常见状态代码、状态描述的详细说明以下。

200 OK:客户端请求成功。

206 partial content服务器已经正确处理部分GET请求,实现断点续传或同时分片下载,该请求必须包含Range请求头来指示客户端指望获得的范围

300 multiple choices(可选重定向):被请求的资源有一系列可供选择的反馈信息,由浏览器/用户自行选择其中一个。

301  moved permanently(永久重定向):该资源已被永久移动到新位置,未来任何对该资源的访问都要使用本响应返回的若干个URI之一。

302 move temporarily(临时重定向):请求的资源如今临时从不一样的URI中得到,

304:not modified :若是客户端发送一个待条件的GET请求而且该请求以经被容许,而文档内容未被改变,则返回304,该响应不包含包体(便可直接使用缓存)。

403 Forbidden:服务器收到请求,可是拒绝提供服务。

t Found:请求资源不存在,举个例子:输入了错误的URL。

 

IP地址做用,以及MAC地址做用

MAC地址是一个硬件地址,用来定义网络设备的位置,主要由数据链路层负责。而IP地址是IP协议提供的一种统一的地址格式,为互联网上的每个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差别。

 

 

搜索baidu,会用到计算机网络中的什么层?每层是干什么的

浏览器中输入URL

浏览器要将URL解析为IP地址,解析域名就要用到DNS协议,首先主机会查询DNS的缓存,若是没有就给本地DNS发送查询请求。DNS查询分为两种方式,一种是递归查询,一种是迭代查询。若是是迭代查询,本地的DNS服务器,向根域名服务器发送查询请求,根域名服务器告知该域名的一级域名服务器,而后本地服务器给该一级域名服务器发送查询请求,而后依次类推直到查询到该域名的IP地址。DNS服务器是基于UDP的,所以会用到UDP协议。

 

获得IP地址后,浏览器就要与服务器创建一个http链接。所以要用到http协议,http协议报文格式上面已经提到。http生成一个get请求报文,将该报文传给TCP层处理,因此还会用到TCP协议。若是采用https还会使用https协议先对http数据进行加密。TCP层若是有须要先将HTTP数据包分片,分片依据路径MTU和MSS。TCP的数据包而后会发送给IP层,用到IP协议。IP层经过路由选路,一跳一跳发送到目的地址。固然在一个网段内的寻址是经过以太网协议实现(也能够是其余物理层协议,好比PPP,SLIP),以太网协议须要直到目的IP地址的物理地址,有须要ARP协议。

 

 

一、客户端浏览器经过DNS解析到www.baidu.com 的IP地址220.181.27.48,经过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.181.27.48,而后经过TCP进行封装数据包,输入到网络层。
二、在客户端的传输层,把HTTP会话请求分红报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。而后使用IP层的IP地址查找目的端。
三、客户端的网络层不用关心应用层或者传输层的东西,主要作的是经过查找路由表肯定如何到达服务器,期间可能通过多个路由器,这些都是由路由器来完成的工做,我不做过多的描述,无非就是经过查找路由表决定经过那个路径到达服务器。
四、客户端的链路层,包经过链路层发送到路由器,经过邻居协议查找给定IP地址的MAC地址,而后发送ARP请求查找目的地址,若是获得回应后就可使用ARP的请求应答交换的IP数据包如今就能够传输了,而后发送IP数据包到达服务器的地址。

 

 

其中:

一、DNS协议,http协议,https协议属于应用层

应用层是体系结构中的最高层。应用层肯定进程之间通讯的性质以知足用户的须要。这里的进程就是指正在运行的程序。应用层不只要提供应用进程所须要的信息交换和远地操做,并且还要做为互相做用的应用进程的用户代理,来完成一些为进行语义上有意义的信息交换所必须的功能。应用层直接为用户的应用进程提供服务。

二、TCP/UDP属于传输层

传输层的任务就是负责主机中两个进程之间的通讯。因特网的传输层可以使用两种不一样协议:即面向链接的传输控制协议TCP,和无链接的用户数据报协议UDP。面向链接的服务可以提供可靠的交付,但无链接服务则不保证提供可靠的交付,它只是“尽最大努力交付”。这两种服务方式都颇有用,备有其优缺点。在分组交换网内的各个交换结点机都没有传输层。

三、IP协议,ARP协议属于网络层

网络层负责为分组交换网上的不一样主机提供通讯。在发送数据时,网络层将运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,分组也叫做IP数据报,或简称为数据报。网络层的另外一个任务就是要选择合适的路由,使源主机运输层所传下来的分组可以交付到目的主机。
四、数据链路层

当发送数据时,数据链路层的任务是将在网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上传送以帧为单位的数据。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制、以及流量控制信息等)。控制信息使接收端可以知道—个帧从哪一个比特开始和到哪一个比特结束。控制信息还使接收端可以检测到所收到的帧中有无差错。
五、物理层

物理层的任务就是透明地传送比特流。在物理层上所传数据的单位是比特。传递信息所利用的一些物理媒体,如双绞线、同轴电缆、光缆等,并不在物理层以内而是在物理层的下面。所以也有人把物理媒体当作第0层。

 

 

DNS域名系统,简单描述其工做原理。

当DNS客户机须要在程序中使用名称时,它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息:包括:指定的DNS域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53. 该应用通常不直接为用户使用,而是为其余应用服务,如HTTP,SMTP等在其中须要完成主机名到IP地址的转换。

 

 

TCP和UDP的区别?

TCP提供面向链接的、可靠的数据流传输,而UDP提供的是非面向链接的、不可靠的数据流传输。
TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
TCP注重数据安全性,UDP数据传输快,由于不须要链接等待,少了许多操做,可是其安全性却通常。
TCP对应的协议和UDP对应的协议
TCP对应的协议:
(1) FTP:定义了文件传输协议,使用21端口。
(2) Telnet:一种用于远程登录的端口,使用23端口,用户能够以本身的身份远程链接到计算机上,可提供基于DOS模式下的通讯服务。
(3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应的协议:
(1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。因为网络设备不少,无链接的服务就体现出其优点。
(3) TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

 

TCP保证数据顺序,UDP不保证。

UDP适用于一次传输少许数据,对安全性要求不高的情形。

 

 

了解交换机、路由器、网关的概念,并知道各自的用途 

1)交换机
在计算机网络系统中,交换机是针对共享工做模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的全部的端口都挂接在这条背 部总线上,当控制电路收到数据包之后,处理端口会查找内存中的地址对照表以肯定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪一个端口上,经过内部 交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到全部的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表 中。
交换机工做于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每一个端口成功链接时,经过ARP协议学习它的MAC地址,保存成一张 ARP表。在从此的通信中,发往该MAC地址的数据包将仅送往其对应的端口,而不是全部的端口。所以,交换机可用于划分数据链路层广播,即冲突域;但它不 能划分网络层广播,即广播域。
交换机被普遍应用于二层网络交换,俗称“二层交换机”。
交换机的种类有:二层交换机、三层交换机、四层交换机、七层交换机分别工做在OSI七层模型中的第二层、第三层、第四层盒第七层,并所以而得名。
2)路由器
路由器(Router)是一种计算机网络设备,提供了路由与转送两种重要机制,能够决定数据包历来源端到目的端所通过 的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转 送。路由工做在OSI模型的第三层——即网络层,例如网际协议。
路由器的一个做用是连通不一样的网络,另外一个做用是选择信息传送的线路。 路由器与交换器的差异,路由器是属于OSI第三层的产品,交换器是OSI第二层的产品(这里特指二层交换机)。
3)网关
网关(Gateway),网关顾名思义就是链接两个网络的设备,区别于路由器(因为历史的缘由,许多有关TCP/IP 的文献曾经把网络层使用的路由器(Router)称为网关,在今天不少局域网采用都是路由来接入网络,所以如今一般指的网关就是路由器的IP),常常在家 庭中或者小型企业网络中使用,用于链接局域网和Internet。 网关也常常指把一种协议转成另外一种协议的设备,好比语音网关。
在传统TCP/IP术语中,网络设备只分红两种,一种为网关(gateway),另外一种为主机(host)。网关能在网络间转递数据包,但主机不能 转送数据包。在主机(又称终端系统,end system)中,数据包需通过TCP/IP四层协议处理,可是在网关(又称中介系 统,intermediate system)只须要到达网际层(Internet layer),决定路径以后就能够转送。在当时,网关 (gateway)与路由器(router)尚未区别。
在现代网络术语中,网关(gateway)与路由器(router)的定义不一样。网关(gateway)能在不一样协议间移动数据,而路由器(router)是在不一样网络间移动数据,至关于传统所说的IP网关(IP gateway)。
网关是链接两个网络的设备,对于语音网关来讲,他能够链接PSTN网络和以太网,这就至关于VOIP,把不一样电话中的模拟信号经过网关而转换成数字信号,并且加入协议再去传输。在到了接收端的时候再经过网关还原成模拟的电话信号,最后才能在电话机上听到。
对于以太网中的网关只能转发三层以上数据包,这一点和路由是同样的。而不一样的是网关中并无路由表,他只能按照预先设定的不一样网段来进行转发。网关最重要的一点就是端口映射,子网内用户在外网看来只是外网的IP地址对应着不一样的端口,这样看来就会保护子网内的用户。

 

 

什么是对称加密和非对称加密:

对称加密: 加密和解密的秘钥使用的是同一个.
非对称加密: 与对称加密算法不一样,非对称加密算法须要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
对称加密算法: 密钥较短,破译困难,除了数据加密标准(DES),另外一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,且对计算机性能要求也没有那么高.

优势:

    算法公开、计算量小、加密速度快、加密效率高

缺点:

    在数据传送前,发送方和接收方必须商定好秘钥,而后 使双方都能保存好秘钥。其次若是一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都须要使用其余人不知道的惟一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

常见的对称加密算法有: DES、3DES、Blowfish、IDEA、RC四、RC五、RC6 和 AES 

非对称加密算法: 公开密钥与私有密钥是一对,若是用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;若是用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。由于加密和解密使用的是两个不一样的密钥,因此这种算法叫做非对称加密算法。

非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把做为公用密钥向其它方公开;获得该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用本身保存的另外一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。

优势:

    安全

缺点:

    速度较慢

常见的非对称加密算法有: RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

Hash算法(摘要算法)

Hash算法特别的地方在于它是一种单向算法,用户能够经过hash算法对目标信息生成一段特定长度的惟一hash值,却不能经过这个hash值从新得到目标信息。所以Hash算法经常使用在不可还原的密码存储、信息完整性校验等。

常见的对称加密算法有: MD二、MD四、MD五、HAVAL、SHA