一、计算机体系模型
- 1.各层模型
- 2.各层常用的协议
- 3.各个协议作用
- 4.对路由协议的了解与介绍
- 5.介绍一下ping的过程,分别用到了哪些协议
- 6.DNS的工作过程和原理
- 7.IP寻址的过程(ARP协议工作)
二、TCP相关
- 1.TCP/UDP/IP 报文结构
- 2.TCP和UDP的区别
- 3.TCP和UDP相关的协议和端口号
- 4.TCP如何保证可靠传输
- 5.使用UDP如何实现可靠传输
- 6.TCP拥塞控制
- 7.流量控制,采用滑动窗口法存在的问题
- 8.TCP滑动窗口协议
- 9.拥塞控制和流量控制的区别
- 10. TCP的三次握手和四次挥手(热门问题)
- 11.建立TCP服务器连接的各个系统调用
- 12.TCP三次握手时第一次的seq序号是如何产生的?
- 13.一个机器能够使用的端口号上限是多少,为什么?可以改变吗?那如果想要用的端口超过这个限制怎么办?
- 14.服务器出现大量close_wait的连接的原因以及解决方法
- 15.TCP的黏包和避免
- 16.TCP的封包与拆包
三、HTTP协议
- 1.网页的解析过程与实现方法
- 2.在浏览器中输入URL后执行的全部过程
- 3.网络层分片的原因
- 4.http协议和TCP的区别和联系
- 5.http/1.0和http:1.1的区别
- 6.http的请求方法有哪些?get和post的区别
- 7.http状态码含义
- 8.http和https的区别,由http升级为https需要做哪些 *** 作
- 9.HTTP2.0有哪些改动?
- 10.https的具体实现,怎么确保安全性
- 11.对称密码和非对称密码体系
- 12.数字证书的了解(高频)
四、网络编程 poll、epoll、select
一、计算机体系模型 1.各层模型
七层模型:物理层、数据链路层、网络层、传输层、会话层、应用层
tcp/ip四层模型:网络接口层、网络层、传输层、应用层
五层模型:物理层、数据链路层、网络层、传输层、应用层
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP
传输层:TCP、UDP
应用层:DNS、Telnet、SMTP、HTTP
IP(Internet Protocol,网际协议)是为计算机网络相互连接进行通信而设计的协议。
ARP(Address Resolution Protocol,地址解析协议)
ICMP(Internet Control Message Protocol,网际控制报文协议):ICMP 是 TCP/IP 模型中网络层的重要成员,ping 和 tracert是两个常用网络管理命令,
ping: 用来测试网络可达性,
traceroute(路由追踪): 用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具。
IGMP(Internet Group Management Protocol,网际组管理协议)
IGP(内部网关协议):是在一个自治网络内网关(主机和路由器)间交换路由信息的协议。
路由信息能用于网间协议(IP)或者其它网络协议来说明路由传送是如何进行的。
IGP协议包括RIP、OSPF、IS-IS、IGRP、EIGRP。
距离矢量路由协议:
距离矢量是指以距离和方向构成的矢量来通告路由信息。
距离按跳数等度量来定义,方向则是下一跳的路由器或送出接口。
距离矢量协议通常使用贝尔曼-福特 (Bellman-Ford) 算法来确定最佳路径。
尽管贝尔曼-福特算法最终可以累积足够的信息来维护可到达网络的数据库,但路由器无法通过该算法了解网际网络的确切拓扑结构。
路由器仅了解从邻近路由器接收到的路由信息。
距离矢量协议适用于以下情形:
(1) 网络结构简单、扁平,不需要特殊的分层设计。
(2)管理员没有足够的知识来配置链路状态协议和排查故障。
(3)特定类型的网络拓扑结构,如集中星形(Hub-and-Spoke)网络。
(4)无需关注网络最差情况下的收敛时间。
链路状态路由协议
配置了链路状态路由协议的路由器可以获取所有其它路由器的信息来创建网络的“完整视图”(即拓扑结构)。
并在拓扑结构中选择到达所有目的网络的最佳路径(链路状态路由协议是触发更新,就是说有变化时就更新)。
链路状态协议适用于以下情形:
(1)网络进行了分层设计,大型网络通常如此。
(2)管理员对于网络中采用的链路状态路由协议非常熟悉。
(3)网络对收敛速度的要求极高。
RIP:路由信息协议(Route Information Protocol)”的简写,主要传递路由信息,通过每隔30秒广播一次路由表,维护相邻路由器的位置关系,同时根据收到的路由表信息使用动态规划的方式计算自己的路由表信息。
RIP是一个距离矢量路由协议,最大跳数为16跳,16跳以及超过16跳的网络则认为目标网络不可达。
OSPF:OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。
是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部.
5.介绍一下ping的过程,分别用到了哪些协议ping通过ICMP协议来进行工作。
ICMP:网络报文控制协议
首先,ping命令会构建一个ICMP请求数据包,然后由ICMP协议将这个数据包连同目的IP地址,源IP地址一起交给IP协议;
然后IP协议会构建一个IP数据包并在映射表中查找目的IP对应的MAC地址,将其交给数据链路层。
数据链路层会构建一个数据帧,附上源mac地址和目的mac地址发送出去;
目的主机收到数据帧后,会检查数据包上的mac地址和本机mac地址是否相符,如果相符,就把其中的信息提取出来交给IP协议,IP协议提取信息后交给ICMP协议,然后构建一个ICMP应答包,用相同的过程发回去。
DNS解析有两种方式:递归查询和迭代查询
递归查询:用户先向本地域名服务器查询,如果本地域名服务器的缓存没有IP地址映射记录,就向根域名服务器查询,根域名服务器就会向顶级域名服务器查询,顶级域名服务器向权限域名服务器查询,查到结果后依次返回。
迭代查询:用户向本地域名服务器查询,如果没有缓存,本地域名服务器会向根域名服务器查询,根域名服务器返回顶级域名服务器的地址,本地域名服务器再向顶级域名服务器查询,得到权限域名服务器的地址,本地域名服务器再向权限域名服务器查询得到结果。
IP寻址的工作原理,(包括本地网络寻址和非本地网络寻址)
本地网络寻址:
本地网络实现IP 寻址,也就是我们所说的同一网段通信过程,现在我们假设有2个主机,他们是属于同一个网段。
主机A和主机B,首先主机A通过本机的hosts表或者wins系统或dns系统先将主机B的计算机名 转换为Ip地址,然后用自己的 Ip地址与子网掩码计算出自己所出的网段,比较目的主机B的ip地址与自己的子网掩码,发现与自己是出于相同的网段,于是在自己的ARP缓存中查找是否有主机B 的mac地址,如果能找到就直接做数据链路层封装并且通过网卡将封装好的以太网帧发送有物理线路上去:如果arp缓存中没有主机B的的mac地址,主机A将启动arp协议通过在本地网络上的arp广播来查询主机B的mac地址,获得主机B的mac地址厚写入arp缓存表,进行数据链路层的封装,发送数据。
非本地网络寻址:不同的数据链路层网络必须分配不同网段的Ip地址并且由路由器将其连接起来。
主机A通过本机的hosts表或wins系统或dns系统先主机B的计算机名转换为IP地址,然后用自己的Ip地址与子网掩码计算出自己所处的网段,比较目的目的主机B的Ip地址,发现与自己处于不同的网段。
于是主机A将知道应该将次数据包发送给自己的缺省网关,即路由器的本地接口。
主机A在自己的ARP缓存中查找是否有缺省网关的MAC地址,如果能够找到就直接做数据链路层封装并通过网卡 将封装好的以太网数据帧发送到物理线路上去,如果arp缓存表中没有缺省网关的Mac地址,主机A将启动arp协议通过在本地网络上的arp广播来查询缺省网关的mac地址,获得缺省网关的mac地址后写入arp缓存表,进行数据链路层的封装,发送数据。
数据帧到达路由器的接受接口后首先解封装,变成ip数据包,对ip 包进行处理,根据目的Ip地址查找路由表,决定转发接口后做适应转发接口数据链路层协议帧的封装,并且发送到下一跳路由器,次过程继续直至到达目的的网络与目的主机。
二、TCP相关 1.TCP/UDP/IP 报文结构
TCP头部 + TCP数据部分
TCP头部结构: 源端口 + 目的端口 + 序号(seq) + 确认号(ack)+ tcp flag(ACK + SYN + FIN) + 偏移位 + 校验和 + TCP选项
UDP头部结构: 源端口 + 目的端口 + 长度 + 校验和
IP数据报头部结构: ID域标识 + 标志 + 片位移 + 源IP地址 + 目的IP地址 + 协议 + 校验和 + 总长度等等;
TCP是面向连接的协议,提供的是可靠传输,在收发数据前需要进行三次握手协议完成连接,使用ACK对手发的数据进行正确性检验。
// UDP是面向无连接的协议,尽最大努力交付,不管对方是否收到了数据或者收到的数据是否正确。
TCP提供流量控制和拥塞控制。
// UDP不提供。
TCP是全双工的可靠信道 // UDP则是不可靠信道
TCP对系统资源的要求高于UDP,所以速度要慢于UDP。
TCP包没有边界,会出现黏包问题,实际上TCP把数据看成是一连串无结构的字节流。
// UDP面向报文,不会出现黏包问题。
在应用方面,强调数据完整性和正确性用TCP // 要求性能和速度时使用UDP。
TCP首部开销是20个字节//UDP首部开销是8字节
TCP族的协议有: HTTP,HTTPS,SMTP,FTP,
UDP族的协议有: DNS,DHCP
校验和
发送的数据包的二进制相加然后取反,目的是检验数据在传输过程中是否有变化。
如果收到段的校验和有差错,TCP将丢弃这个报文段和不确认接收到此报文段。
确认应答 + 序列号
TCP给发送的每一个数据包进行编号,接收方对数据包进行排序,把有序数据传递给应用层。
超时重传
当TCP发出一个段后,会启动一个计时器,等待目的端口确认接收到这个报文段。
如果不能及时收到一个接收确认,将重传这个报文段。
流量控制
TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能够接纳的数据。
当接收方来不及处理发送方的数据时,能够提示发送方降低发送的速率,防止包丢失。
TCP用的流量控制协议是可变大小的滑动窗口协议。
接收方有即时窗口(滑动窗口rwnd),随ACK报文发送。
拥塞控制
当网络拥塞时,减少数据的发送。
发送方有拥塞窗口,随ACK报文发送。
因为UDP是面向无连接到的协议,在传输层上无法保证可靠传输。
如果想要实现可靠传输,只能在应用层下手。
需要实现seq/ack机制,重传机制和窗口确认机制。
即要接收方收到UDP之后回复个确认包,发送方有个机制,收不到确认包就要重新发送,每个包有递增的序号,接收方发现中间丢了包就要发重传请求,当网络太差时候频繁丢包,防止越丢包越重传的恶性循环,要有个发送窗口的限制,发送窗口的大小根据网络传输情况调整,调整算法要有一定自适应性。
慢开始算法:
令拥塞窗口cwnd=1,也就是说发送方只能发送一个报文段,每次收到确认后,将cwnd加倍。
之后发送方能够发送的报文段数量为2、4、8…同时设置一个慢开始门限ssthresh,当cwnd>=ssthresh时,进入拥塞避免。
拥塞避免算法:
每个轮次只将拥塞窗口cwnd加1。
如果出现了超时,则将慢开始门限ssthresh设置为当前拥塞窗口的一半,进入慢开始阶段。
快重传算法:
在接收方,要求每次接收到报文段都应该对接收到的最后一个有序报文段进行确认。
在发送方,如果收到三个重复确认,就会认为下一个报文段丢失,执行快重传算法,立即重传下一个报文段。
快恢复算法:
只是丢失个别报文段,而不是网络拥塞时,执行快恢复算法。
令ssthresh=cwnd/2,cwnd=ssthresh,直接进入拥塞避免。
定义:流量控制即让发送方发送速率不要过快,让接收方有来得及接收,可以通过TCP报文中的窗口大小字段来控制发送方的发送窗口不大于接收方发回的窗口大小,这样就可以实现流量控制
可能存在的问题: 特殊情况下,接收方没有足够的缓存可以使用,就会发送零窗口大小的报文,此时发送方接收到这个报文后,停止发送。
过了一段时间,接收方有了足够的缓存,开始接收数据了,发送了一个非零窗口的报文,这个报文在传输过程中丢失,那么发送方的发送窗口一直为零导致死锁发生。
解决方法: 为了解决这个问题,TCP为每一个连接设定一个持续计时器(persistence timer),只要TCP的一方接收到了对方的零窗口通知,就会启动这个计时器,周期性的发送零窗口探测报文段,对方在确认这个报文时给出现在的窗口大小。
(注意:TCP规定,即便是在零窗口状况下,也必须接收以下几种报文段:零窗口探测报文、确认段报文、携带紧急数据的报文段)。
在什么情况下会减慢拥塞窗口增长的速度
1.到达慢开始门限ssthresh,采用拥塞避免算法;
2.出现丢包现象,就进入快速恢复;
3.当连续收到三个重复确认,进入快速重传。
TCP的滑动窗口协议用来控制发送方和接收方的发送速率,避免拥塞的发生。
滑动窗口即接收方缓冲区的大小,用来告知发送方对它的接收还有多大的缓存空间。
在接收方的滑动窗口已知的情况下,当接收方确认了连续的数据序列之后,发送方的滑动窗口向后滑动,发送下一个数据序列。
拥塞控制是防止过多的数据注入到网络中,导致网络发生拥塞;
流量控制是防止发送方一下子发送过多的数据到接收方,导致接收方缓存放不下。
两种算法都是对发送方的行为进行控制。
三次握手
1.第一次握手:客户端将标志位SYN置为1,随机产生一个值序列号seq=x,并将该数据包发送给服务端,客户端 进入syn_sent状态,服务器是LISTEN状态,等待服务端确认。
2.第二次握手:服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN和 ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给客户端以确认连接请求,服务端进入syn_rcvd状态。
3.第三次握手:客户端收到确认后检查,如果正确则将标志位ACK为1,ack=y+1,seq=x+1,并将该数据包发送给服务端,服务端进行检查如果正确则连接建立成功,客户端和服务端进入established状态,完成三次握手,随后客户端和服务端之间可以开始传输 数据了
为什么TCP握手需要三次,两次行不行?
客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。
客户端等待一个超时重传时间后,就会重新请求连接。
但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。
如果有三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。
第三次握手是为了防止失效的连接请求到达服务器,让服务器打开多个连接。
TCP四次挥手过程
1.第一次挥手:客户端发送一个FIN=1,序号seq=u,用来关闭客户端到服务端的数据传送,客户端进入fin-wait1状态。
2.第二次挥手:服务端收到FIN后,发送一个ACK=1,seq=v,ack=u+1给客户端,服务端进入Close_wait状态。
客户端收到ACK后变成fin-wait2状态。
此时TCP连接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若发送数据,则客户端仍要接收。
3.第三次挥手:服务端发送一个FIN=1,ACK=1,seq=w,ack=u+1,用来关闭服务端到客户端的数据传送,服务端进入Last_ack状态。
4.第四次挥手:客户端收到FIN后,客户端进入Time_wait状态,接着发送一个ACK=1,seq=u+1,ack=w+1给服务端,确认后,服务端进入Closed状态,客户端等待2MSL后变为closed状态,完成四次挥手。
为什么TCP挥手需要4次?
主要原因是当服务端收到客户端的 FIN 数据包后,服务端可能还有数据没发完,不会立即close。
TIME_WAIT的意义(为什么要等于2MSL)
TIME_WAIT是指四次挥手中客户端接收了服务端的FIN报文并发送ACK报文给服务器后,仍然需要等待2MSL时间的过程。
虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。
如果客户端发送的ACK发生丢失,服务器会再次发送FIN报文给客户端,所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
建立TCP服务器连接的过程中主要通过以下的系统调用序列来获取某些函数,这些系统调用主要包括有:
socket() 创建套接字
bind() 绑定本机端口
connent() 建立连接 (TCP三次握手在调用这个函数时进行)
lisiten() 监听端口
accept() 接收连接
recv()、read()、recvfrom() 数据接收
send()、write()、sendto() 数据发送
close()、shutdown() 关闭套接字 使用close()时,只有当套接字的引用计数为0的时候才会终止连接,而用shutdown()就可以直接关闭连接。
第一次的序号是随机序号,但也不是完全随机,它是使用一个ISN算法得到的。
seq = C + H (源IP地址,目的IP地址,源端口,目的端口)。
其中,C是一个计时器,每隔一段时间值就会变大,H是消息摘要算法,输入是一个四元组(源IP地址,目的IP地址,源端口,目的端口)。
65536.因为TCP的报文头部中源端口号和目的端口号的长度是16位,也就是可以表示2^16=65536个不同端口号,因此TCP可供识别的端口号最多只有65536个。
但是由于0到1023是知名服务端口,所以实际上还要少1024个端口号。
而对于服务器来说,可以开的端口号与65536无关,其实是受限于Linux可以打开的文件数量,并且可以通过MaxUserPort来进行配置。
close_wait状态是在TCP四次挥手的时候服务器收到FIN但是没有发送自己的FIN时出现的,服务器出现大量close_wait状态的原因有两种:
- 服务器内部业务处理占用了过多时间,都没能处理完业务;或者还有数据需要发送;或者服务器的业务逻辑有问题,没有执行close()方法;
- 服务器的父进程派生出子进程,子进程继承了socket,收到FIN的时候子进程处理但父进程没有处理该信号,导致socket的引用不为0无法回收。
解决方法:
1.停止应用程序
2.修改程序里的bug
黏包:因为TCP为了减少额外开销,采取的是流式传输,所以接收端在一次接收的时候有可能一次接收多个包。
而TCP粘包就是发送方的若干个数据包到达接收方的时候粘成了一个包。
多个包首尾相接,无法区分。
导致TCP粘包的原因有三方面:
发送端等待缓冲区满才进行发送,造成粘包
接收方来不及接收缓冲区内的数据,造成粘包
由于TCP协议在发送较小的数据包的时候,会将几个包合成一个包后发送
避免黏包的措施:
发送定长包。
如果每个消息的大小都是一样的,那么在接收对等方只要累计接收数据,直到数据等于一个定长的数值就将它作为一个消息。
包头加上包体长度。
包头是定长的 4 个字节,说明了包体的长度。
接收对等方先接收包头长度,依据包头长度来接收包体。
在数据包之间设置边界,如添加特殊符号 \r\n 标记。
FTP 协议正是这么做的。
但问题在于如果数据正文中也含有 \r\n,则会误判为消息的边界。
使用更加复杂的应用层协议。
封包:封包就是在发送数据报的时候为每个TCP数据包加上一个包头,将数据报分为包头和包体两个部分。
包头是一个固定长度的结构体,里面包含该数据包的总长度。
拆包:接收方在接收到报文后提取包头中的长度信息进行截取。
三、HTTP协议 1.网页的解析过程与实现方法
浏览器解析服务器响应过程:
首先是html文档解析,浏览器会将html文档生成解析树,也就是DOM树,它由dom元素以及属性节点组成。
然后浏览器加载过程中如果遇到了外部的css文件或者图片资源,还会另外发送请求来获取css文件和资源,这个请求通常是异步的,不会影响html文档的加载。
如果浏览器在加载时遇到了js文件,则会挂起渲染的线程,等js文件加载解析完毕才恢复html的渲染线程。
然后是css解析,将css文件解析为央视表对象来渲染DOM树。
1、首先是域名解析,客户端使用DNS协议将URL解析为对应的IP地址;
2、然后建立TCP连接,客户端与服务器端通过三次握手建立TCP连接;
3、接着是http连接,客户端向服务器发送http连接请求;(http连接无需额外连接,直接通过已经建立的TCP连接发送)
4、服务器对客户端发来的http请求进行处理,并返回响应;
5、客户端接收到http响应时,将结果渲染展示给用户。
因为在链路层中帧的大小通常都有限制,如在以太网中最大大小(MTU)就是1500字节。
如果IP数据包加上头部后大小超过1500字节,就需要分片。
IP分片和完整IP报文拥有差不多的IP头,16位ID域对于每个分片都是一致的,这样才能在重新组装时识别出来自同一报文的分片。
在IP头中,16标识号唯一记录了一个IP包的ID,具有同一ID的IP分片将会重新组装起来;而13位片位移则记录了某IP分片相对整个IP包的位置,而这两个标识中间的三位标志则标志着该分片后是否还有新的分片。
这三个标志就组成了IP分片的所有信息,接收方就可以利用这些信息对IP数据进行重新组织。
联系:HTTP是建立在TCP基础上的。
当浏览器需要从服务器获取网页数据时,会发出一次http请求。
http会通过TCP建立从客户端到服务器的连接通道,当本次请求的数据传输完毕后,http会立即断开TCP连接,这个过程非常短暂。
区别:两个协议位于不同的层次。
tcp协议是传输层的,定义了数据传输和连接的规范。
http协议是应用层的。
定义了数据的内容的规范。
HTTP 协议老的标准是 HTTP/1.0 ,目前最通用的标准是 HTTP/1.1 。
HTTP1.0 只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个 TCP 连接,但是最新的http/1.0加入了长连接,只需要在客户端给服务器发送的http报文头部加入Connection:keep-alive
HTTP 1.1 支持持久连接,默认进行持久连接,在一个 TCP 连接上可以传送多个 HTTP 请求和响应,减少了建立和关闭连接的消耗和延迟。
HTTP的请求方法包括GET、POST、PUT、DELETE四种基本方法。
GET和POST的区别:
- get方法不会修改服务器上的资源,它的查询是没有副作用的,而post有可能会修改服务器上的资源
- get可以保存为书签,可以用缓存来优化,而post不可以
- get把请求附在url上,而post把参数附在http包的包体中
- 浏览器和服务器一般对get方法所提交的url长度有限制,一般是1k或者2k,而对post方法所传输的参数大小限制为80k到4M不等
- post可以传输二进制编码的信息,get的参数一般只支持ASCII
-200 - 请求成功
-301 - 资源(网页等)被永久转移到其它URL
-404 - 请求的资源(网页等)不存在
-500 - 内部服务器错误
-400 - 请求无效
-403 - 禁止访问
区别:
- http 是超文本传输协议,信息是明文传输, https 则是具有安全性的 ssl 加密传输协议
- http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80 ,后者是 443
- http 的连接很简单,是无状态的; HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比http 协议安全。
- https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用
多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
二进制分帧:在应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层。
将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码 ,其中 HTTP1.x 的首部信息会被封装到 HEADER frame,而相应的 Request Body 则封装到 DATA frame 里面。
二进制分帧主要作用是二进制码鲁棒性高,增强了通信的稳定性。
首部压缩:http1.x的header由于cookie和user agent很容易膨胀,而且每次都要重复发送。
http2.0使用encoder来减少需要传输的header大小
服务端推送:http2.0能通过push的方式将客户端需要的内容预先推送过去
SSL是传输层的协议
https包括非对称加密和对称加密两个阶段,在客户端与服务器建立连接的时候使用非对称加密,连接建立以后使用的是对称加密
- 客户端使用https的URL访问web服务器,要求与服务器建立SSL连接;
- 服务器接收到客户端请求后,发送一份公钥给客户端,私钥自己保存;
- 客户端收到公钥后,将自己生成的对称加密的会话密钥进行加密,并传给网站;
- 网站收到秘文后用私钥解密出会话密钥;
- Web服务器利用会话密钥加密与客户端之间的通信,这个过程称为对称加密的过程。
注意:服务器第一次传给客户端的公钥其实是CA对网站信息进行加密的数字证书;
对称加密:加密和解密用相同的密钥;
优点:计算量小,算法速度快,加密效率高
缺点:密钥容易泄漏。
不同的会话需要不同的密钥,管理起来很费劲
常用算法:DES,3DES,IDEA,CR4,CR5,CR6,AES
非对称加密:需要公钥和私钥,公钥用来加密,私钥用来解密
优点:安全,不怕泄漏
缺点:速度慢
常用算法:RSA,ECC,DSA
权威CA使用私钥将网站A的信息和消息摘要(签名S)进行加密打包形成数字证书。
公钥给客户端。
网站A将自己的信息和数字证书发给客户端,客户端用CA的公钥对数字证书进行解密,得到签名S,与手动将网站的信息进行消息摘要得到的结果S*进行对比,如果签名一致就证明网站A可以信任。
四、网络编程 poll、epoll、select
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)