java后台面经_计算机网络

一.计算机网络(会不断更新)

1、http和https的区别

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。

简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

2、数字证书有哪些?

服务器证书(SSL证书)、电子邮件证书、客户端个人证书、企业证书、代码签名证书

3、http有哪些版本,区别?

HTTP 0.9是最早发现的一个版本,因为它只允许客户端发送一种GET请求,并且不支持请求头,HTTP 0.9具有典型的无状态性,每个事务独立进行处理,事务结束时就释放这个连接。

扫描二维码关注公众号,回复: 12366274 查看本文章

HTTP 1.0是HTTP协议的第二个版本,任何格式的文件都可以发送,这使得互联网不仅仅可以用来传输文字,还可以传输图像、音频、视频等二进制文件,1.0版本不仅仅支持GET命令还有POST和HEAD等请求方法;

HTTP的请求和回应格式也发生了变化,除了要传输的数据之外,每次通信都包含头信息,用来描述一些信息。
还增加了状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等
HTTP1.1最大的变化就是引入了长链接,也就是TCP链接默认是不关闭的可以被多个请求复用。客户端或者服务器如果长时间发现对方没有活动就会关闭链接,但是规范的做法是客户端在最后一个请求的时候要求服务器关闭链接。对于同一个域名,目前浏览器支持建立6个长链接。
节约带宽,HTTP1.1支持只发送header头信息不带任何body信息,如果服务器认为客户端有权限请求指定数据那就返回100,没有就返回401,当客户端收到100的时候可以才把要请求的信息发给服务器。并且1.1还支持了请求部分内容,如果当前客户端已经有一部分资源了,只需要向服务器请求另外的部分资源即可,这也是支持文件断点续传的基础。
1.1版本中增加了host处理,在HTTP1.0中认为每台服务器都绑定一个唯一的ip地址,因此在URL中并没有传递主机名,但是随着虚拟机技术的发展,可能在一台物理机器上存在多个虚拟主机,并且他们共享了一个ip地址,http1.1中请求消息和响应消息都支持host头域,如果不存在还会报出错误
HTTP2.0增加了双工,数据流等。

4、TCP和IP属于什么层?TCP挥手握手?

传输层,TCP三次握手和四次挥手网上很多,这里不细说;

5、TCP可靠传输的机制?窗口的含义是什么?

TCP首先采用三次握手来建立连接、四次挥手来释放连接。其次TCP采用了连续ARQ协议,即自动重传请求(Automatic Repeat-reQuest)来保证数据传输的正确性,使用滑动窗口协议来保证接收方能够及时处理接收到的数据,进行流量控制。最后TCP使用慢开始、拥塞避免、快重传、快恢复来进行拥塞控制,避免网络拥堵。下面我们将介绍连续ARQ、拥塞控制。

连续ARQ协议

在介绍连续ARQ协议之前,我们要先说一下停止等待协议。停止等待协议的有点就是比较简单,好实现。基本原理是A发送一个分组,发送完就暂停发送,然后一直等待接收方B的应答。A在收到B的应答之后,再发送下一个分组。如果中途B发现包有错或者就没有收到包,那么也就不会向A发送应答包。此时A规定时间内要是没有等到应答包,就会重新传送刚才的分组,也就是所谓的超时重传。从这个过程也可以看出,假如A发送分组的时间为Ta,B发送确认的时间为Tb,往返时间为Tr,那么完整发送一个分组的时间为Ta+Tb+Tr。过了这个时间后,第二个分组才开始发送。这样子的信道利用率和传输效率就比较低了。这时就引入连续ARQ了。

       连续ARQ协议规定,发送方没法送一个确认,就把发送窗口向前滑动一个分组的位置。当发送方收到第一个分组的确认,就把发送窗口向前移动一个分组的位置。如果已经发送了前5个分组,则现在可以发送窗口内的第6个分组。

       接收方一般都是采用累积确认的方式。也就是说接收方不必对收到的分组逐个发送确认。而是在收到几个分组后,对按序到达的最后一个分组发送确认。如果收到了这个分组确认信息,则表示到这个分组为止的所有分组都已经正确接收到了。

       累积确认的优点就不用多说了,缺点是,不能正确的反映收到的分组,比如发送方发送了前5个分组,而中间的第3个分组丢失了,这时候接收方只能对前2个发出确认。而不知道后面3个分组的下落,因此只能把后面的3个分组都重传一次,这种机制叫Go-back-N(回退N),表示需要再退回来重传已发送过的N个分组。

4、拥塞控制

1)TCP流量控制

拥塞控制就是防止过多的数据注入到网络中,这样可以使网路中的路由器或链路不致于过载。而流量控制往往是指点对点通信量的控制,是个端到端的问题。流量控制所要做的就是控制发送端发送速率,以便使接收端来得及接受。利用滑动窗口机制就可以实现流量的控制。原理就是运用TCP报文中的窗口大小字段来控制,发送的发送窗口不可以大于接收方的接收窗口大小。如果接收方没有足够的缓存来接收数据,发送方就会收到一个零窗口的通知。此时发送方停止发送。并且定时发送一个窗口探测报文来探测接收方的接收能力。

2)TCP拥塞控制

在某段时间内,若对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变差,这种叫做拥塞。

RFC2581定义了四种拥塞控制算法,即慢开始,拥塞避免、快重传、快恢复。

下图是慢启动和拥塞避免的一个可视化描述。我们以段为单位来显示cwnd和ssthresh,但它们实际上都是以字节为单位进行维护的。

拥塞窗口的概念:

发送报文段速率的确定,纪要根据接收端的能力,又要从全局考虑不要使网路发生拥塞,这由接收窗口和拥塞窗口两个状态量来决定。接收窗口又称通知窗口,是接收端根据目前接收缓存大小所许诺的最新窗口值,是来自接收端的流量控制。拥塞窗口cwnd是发送端根据自己估计的网络拥塞程度而设置的窗口值,是来自发送端的流量控制。

慢启动原理:

当主机开始发送数据时,如果立即将较大的发送窗口的全部数据注入网路中,那么由于不清楚网络的情况,有可能引起拥塞。比较好的方式是试探一下,即从小到大逐渐增大发送端的拥塞控制窗口数值。当窗口值逐渐增大时,为了防止cwind的增长导致网络拥塞,还需要一个变量--慢开始门限ssthresh

拥塞控制

具体过程为:

TCP连接初始化,将拥塞窗口设置为1。接下来执行慢开始算法,当cwind==ssthresh时,开始执行拥塞避免算法:cwnd按照现行规律增长。当网络发生拥塞时,吧ssthresh值更新为拥塞前ssthresh的一半,cwnd重新设置为1。重复执行上个步骤。

快重传和快恢复

一条TCP连接有时会因等待重传计时器的超时而空闲较长的时间,慢开始和拥塞避免无法很好的解决这类问题,因此提出了快重传和快恢复的拥塞控制方法。

     快重传算法并非取消了重传机制,只是在某些情况下更早的重传丢失的报文段(如果当发送端接收到三个重复的确认ACK时,则断定分组丢失,立即重传丢失的报文段,而不必等待重传计时器超时)。

    例如:M1,M2,M3 -----> M1,M3,缺失M2,则接收方向发送方持续发送M2重复确认,当发送方收到M2的三次重复确认,则认为M2报文丢失,启动快重传机制,重传数据,其他数据发送数据放入队列,待快重传结束后再正常传输。

     快恢复算法有以下两个要点:

     1)当发送方连续收到接收方发来的三个重复确认时,就执行“乘法减小”算法,把慢开始门限减半,这是为了预防网络发生拥塞。

     2)由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,而是把cwnd(拥塞窗口)值设置为慢开始门限减半后的值,然后开始执行拥塞避免算法,使拥塞窗口的线性增大。
 

猜你喜欢

转载自blog.csdn.net/orzMrXu/article/details/102532475