2.计算机网络

1.https

TLS SSL 的升级替代版
 
 

1、客户端向服务端发起建立HTTPS请求,带随机数A。

2、服务器向客户端发送数字证书,带随机数B(还带上公钥)。

3、客户端验证数字证书,证书验证通过后客户端生成会话密钥C(双向验证则此处客户端也会向服务器发送证书)。

4、服务器用私钥解密客户端发来的会话密钥C(双向验证此处服务端也会对客户端的证书验证)。

5、客户端与服务端以随机数A,随机数B,会话密钥C生成的秘钥D开始进行加密会话。

 

HTTPS 客户端验证 服务端证书流程

1:客户端浏览器会预置根证书, 里面包含CA公钥
2:服务器去CA申请一个证书
3: CA用自己的签名去签一个证书,指纹信息保存在证书的数字摘要里面, 然后发送给服务器

 

中间人攻击(实际上就是偷梁换柱)

服务器向客户端发送公钥。
攻击者截获公钥,保留在自己手上。
然后攻击者自己生成一个【伪造的】公钥,发给客户端。
客户端收到伪造的公钥后,生成加密hash值发给服务器。
攻击者获得加密hash值,用自己的私钥解密获得真秘钥。
同时生成假的加密hash值,发给服务器。
服务器用私钥解密获得假秘钥。

这里就需要一个强大的公证人,就是CA,操作系统会做CA证书的判断。

 

1、为什么 tcp 要经过三次握手,四次挥手?
 

“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生 错误”。主要目的防止 server 端一直等待,浪费资源。

四次挥手 原因是因为 tcp 是全双工模式,接收到 FIN 时意味将没有数据再发来,但是还是
可以继续发送数据。
 
2、TCP 可靠传输原理实现(滑动窗口)。
确认和重传:接收方收到报文后就会进行确认,发送方一段时间没有收到确认就会重传。
数据校验。
数据合理分片与排序, TCP 会对数据进行分片,接收方会缓存为按序到达的数据,重新排序
后再提交给应用层。
流程控制:当接收方来不及接收发送的数据时,则会提示发送方降低发送的速度,防止包丢
失。
拥塞控制:当网络发生拥塞时,减少数据的发送。
 
3、Tcp 和 Udp 的区别?
1 、基于连接与无连接;
2 、对系统资源的要求( TCP 较多, UDP 少);
3 UDP 程序结构较简单;
4 、流模式与数据报模式 ;
5 TCP 保证数据正确性, UDP 可能丢包;
6 TCP 保证数据顺序, UDP 不保证。
 
4、如何设计在 UDP 上层保证 UDP 的可靠性传输?
传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照 tcp 可靠
性传输的方式。如不考虑拥塞处理,可靠 UDP 的简单设计如下:
1 、添加 seq/ack 机制,确保数据发送到对端
2 、添加发送和接收缓冲区,主要是用户超时重传。
3 、添加超时重传机制。
具体过程即是:送端发送数据时,生成一个随机 seq=x ,然后每一片按照数据大小分配 seq
数据到达接收端后接收端放入缓存,并发送一个 ack=x 的包,表示对方已经收到了数据。
发送端收到了 ack 包后,删除缓冲区对应的数据。时间到后,定时任务检查是否需要重传数
据。
目前有如下开源程序利用 udp 实现了可靠的数据传输。分别为 RUDP RTP UDT:
 
5、socket 断线重连怎么实现,心跳机制又是怎样实现?
许多计算机操作系统为应用程序与 TCP IP 协议交互
提供了套接字 (Socket) 接口。应 用层可以和传输层通过 Socket 接口,区分来自不同应用程
序进程或网络连接的通信,实现数据传输的并发服务。
 
建立 socket 连接
建立 Socket 连接至少需要一对套接字,其中一个运行于客户端,称为 ClientSocket ,另一
个运行于服务器端,称为 ServerSocket
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
 
socket 断线重连实现
正常连接断开客户端会给服务端发送一个 fin 包,服务端收到 fin 包后才会知道连接断开。而
断网断电时客户端无法发送 fin 包给服务端,所以服务端没办法检测到客户端已经短线。 为
了缓解这个问题,服务端需要有个心跳逻辑,就是服务端检测到某个客户端多久没发送任何
数据过来就认为客户端已经断开, 这需要客户端定时向服务端发送心跳数据维持连接。
 
心跳机制实现
长连接的实现:心跳机制,应用层协议大多都有 HeartBeat 机制,通常是客户端每隔一小段
时间向服务器发送一个数据包,通知服务器自己仍然在线。并传输一些可能必要的数据。使
用心跳包的典型协议是 IM ,比如 QQ/MSN/ 飞信等协议
1 、在 TCP 的机制里面,本身是存在有心跳包的机制的,也就是 TCP 的选项: SO_KEEPALIVE
系统默认是设置的 2 小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断
线。 而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。
通过使用 TCP KeepAlive 机制(修改那个 time 参数),可以让连接每隔一小段时间就产
生一些 ack 包,以降低被踢掉的风险,当然,这样的代价是额外的网络和 CPU 负担。

 

心跳机制实现
客户端每隔一小段时间向服务器发送一个数据包,通知服务器自己仍然在线, 使 用心跳包的典型协议是 IM
TCP本身也有心跳机制,不过是2小时一次,而且他检测不到断电等特殊情况,所以一般需要应用层处理
 
2、Cookie 与 Session 的作用和原理。
Session 是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存
在集群、数据库、文件中。
Cookie 是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现
Session 的一种方式
 
Cookie
Cookie 是由服务器端生成,发送给 User-Agent (一般是 web 浏览器),浏览器会将 Cookie
key/value 保存到某个目录下的文本文件内,下次请求同一网站时就发送该 Cookie 给服
务器(前提是浏览器设置为启用 Cookie )。 Cookie 名称和值可以由服务器端开发自己定义,
对于 JSP 而言也可以直接写入 Sessionid ,这样服务器可以知道该用户是否合法用户以及是
否需要重新登录等。
 
6、 浏览器输入地址到返回结果发生了什么?
总体来说分为以下几个过程 :
1 DNS 解析,此外还有 DNSy 优化( DNS 缓存、 DNS 负载均衡)
2 TCP 连接
3 、发送 HTTP 请求
4 、服务器处理请求并返回 HTTP 报文
5 、浏览器解析渲染页面
6 、连接结束
 
如何尽快的加载资源(网络优化)?
答案就是能不从网络中加载的资源就不从网络中加载,当我们合理使用缓存,将资源放在浏
览器端,这是最快的方式。如果资源必须从网络中加载,则要考虑缩短连接时间,即 DNS
优化部分 ; 减少响应内容大小,即对内容进行压缩。另一方面,如果加载的资源数比较少的
话,也可以快速的响应用户。
 
 
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的
地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只
是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有
单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多
线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些
要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
简而言之 , 一个程序至少有一个进程 , 一个进程至少有一个线程。
 
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值