计算机网络(java面试必备)

没有关注的小伙伴可以在微信搜索框中搜索微信公众号: 

3分钟秒懂大数据,然后点击关注,回复  java-大数据   

即可免费领取 java-大数据总结的所有面试知识点,总共300多页!!!  
图片

142.网络七层模型

    物理层,数据链路层,网络层,运输层,会话层,表现层,应用层

143.网络四层模型

     数据链路层,网络层,运输层,应用层

144.你知道IP协议、TCP协议、UDP协议、HTTP协议分别在哪一层吗?

IP:网络层       TCP/UDP:运输层      HTTP:应用层

网络层

请简单解释一下,arp协议和arp攻击。

ARP协议属于网络层,称为地址解析协议,ARP攻击的第一步就是ARP欺骗。ARP协议基本没有对网络的安全性做任何

思考,ARP协议默认其所在的网络是一个安全善良的网络,每台主机向网络中发送应答信号时都是使用的真实身份,后来

人们发现ARP应答中的IP地址和MAC地址中的信息是可以伪造的,并不一样是自己真实的IP地址和MAC地址,由此,ARP

欺骗就产生了,就存在了ARP攻击。

什么是icmp协议,它的作用是什么?

是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、

路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

请你讲一下路由器和交换机的区别?

交换机用于同一网络内部数据的快速传输,转发决策通过查看二层头部完成转发。不需要修改数据帧,工作在 TCP/IP 

协议的二层 —— 数据链路层工作简单,直接使用硬件处理。

路由器用于不同网络间数据的跨网络传输,转发决策通过查看三层头部完成转发。需要修改 TTL ,IP 头部校验和需要重新

计算,数据帧需要重新封装工作在 TCP/IP 协议的三层 —— 网络层工作复杂,使用软件处理。

145.七层模型各层功能

1.物理层利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。

      作用:实现相邻计算机节点之间比特流的透明传输,尽可能屏蔽掉具体传输介质与物理设备的差异。

      透明传输的意义就是:不管传的是什么,所采用的设备只是起一个通道作用,把要传输的内容完好的传到对方!

2.数据链路层: 负责建立和管理节点间的链路。  (交换机工作在链路层)

      主要功能:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。

      具体工作:接受来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上一层的数据帧,拆装为

位流形式的数据转发到物理层;并且还负责处理接受端发回的确认帧的信息,以便提供可靠的数据传输。

该层通常又被分为 介质访问控制(MAC)逻辑链路控制(LLC)两个子层:
    MAC子层的主要任务是解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制。
    LLC子层的主要任务是建立和维护网络连接,执行差错校验、流量控制和链路控制。

数据链路层解决同一网络内节点之间的通信。网络地址是MAC地址 长48比特

3.网络层:解决不同子网之间的通信。例如路由选择问题。

主要任务:通过路由算法,为报文或分组通过通信子网选择最适当的路径。该层控制数据链路层与物理层之间的信息

转发,建立、维持与终止网络的连接。具体的说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、

分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。

主要解决问题: 1 寻址 2 交换,3 路由算法,4连接服务

4.传输层:OSI的下三层的主要任务是数据传输,上三层的主要任务是数据处理。而传输层是第四层,因此该层是通信

子网和资源子网的接口和桥梁,起到承上启下的作用。

 主要任务:向用户提供可靠的、端到端的差错和流量控制,保证报文的正确传输。

   主要作用:向高层屏蔽下层数据通信的具体细节,即向用户透明的传送报文。

5.会话层:是用户应用程序和网络之间的接口

主要任务:向两个实体的表示层提供建立和使用连接的方法。将不同实体之间的表示层的连接称为会话。因此会话层的任务

就是组织和协调两个会话进程之间的通信,并对数据交换进行管理。

可以通过半双工,单工,全工,建立会话,用户必须提供他们想要连接的远程地址(如域名)。

6.表示层:对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层

主要功能:处理用户信息的表示问题,如编码、数据格式转换和加密解密

7.应用层:计算机用户,以及各种应用程序和网络之间的接口

主要功能直接向用户提供服务,完成用户希望在网络上完成的各种工作。

应用层为用户提供的服务和协议有:文件服务、目录服务、文件传输服务(FTP)、远程登录服务(Telnet)、电子邮件服

(E-mail)、打印服务、安全服务、网络管理服务、数据库服务等。

很多常见的应用层协议是以 TCP 为基础的,比如“文件传输服务(FTP)、简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 、邮局协议(POP3)、IMAP(Internet Mail Access Protocol,Internet邮件访问协议)”等。

OSI 7层模型的小结
在7层模型中,每一层都提供一个特殊的网络功能。从网络功能的角度观察:

下面3层(物理层、数据链路层、网络层和传输层)主要提供数据传输和交换功能,即以节点到节点之间的通信为主

第4层作为上下两部分的桥梁,是整个网络体系结构中最关键的部分;

上3层(会话层、表示层和应用层)则以提供用户与应用程序之间的信息和数据处理功能为主

简言之,下4层主要完成通信子网的功能,上3层主要完成资源子网的功能。

运输层

TCP介绍:

      TCP 包头格式

TCP是基于IP协议的,IP协议层面并不对可靠性做出任何的保障,所有的功能都是由TCP在传输层实现的。

源端口号和目标端口号是不可少的,这一点和 UDP 是一样的。如果没有这两个端口号。数据就不知道应该发给哪个应用。

接下来是包的序号。为什么要给包编号呢?当然是为了解决乱序的问题。不编好号怎么确认哪个应该先来,哪个应该后到呢。

编号是为了解决乱序问题。

还应该有的就是确认序号。发出去的包应该有确认,要不然我怎么知道对方有没有收到呢?如果没有收到就应该重新发送,直

到送达。这个可以解决不丢包的问题。

TCP协议里有一些常用的标志位,用来标识当前通信处于那个阶段:SYN 是发起一个连接,ACK 是回复,RST 是重新连接,FIN 是结束连接。

还有一个重要的就是窗口大小。TCP 要做流量控制,通信双方各声明一个窗口,标识自己当前能够的处 理能力,别发送的太快,撑死我,也别发的太慢,饿死我。

什么叫TCP的滑动窗口和固定窗口?

TCP的滑动窗口机制 
      TCP协议里窗口机制有2种:一种是固定的窗口大小;一种是滑动的窗口。这个窗口大小就是我们一次传输几个数据。

对所有数据帧按顺序赋予编号,发送方在发送过程中始终保持着一个发送窗口,只有落在发送窗口内的帧才允许被发送;

同时接收方也维持着一个接收窗口,只有落在接收窗口内的帧才允许接收。这样通过调整发送方窗口和接收方窗口的大小

可以实现流量控制。

      TCP滑动窗口技术通过动态改变窗口大小来调节两台主机间数据传输。每个TCP/IP主机支持全双工数据传输,因此

TCP有两个滑动窗口:一个用于接收数据,另一个用于发送数据。TCP使用肯定确认技术,其确认号指的是下一个所期待

数据包的序列号。 假定发送方设备以每一次三个数据包的方式发送数据,也就是说,窗口大小为3。发送方发送序列号为

1、2、3的三个数据包,接收方设备成功接收数据包,用序列号4确认。发送方设备收到确认,继续以窗口大小3发送数据。

当接收方设备要求降低或者增大网络流量时,可以对窗口大小进行减小或者增加,本例降低窗口大小为2,每一次发送两个

数据包。当接收方设备要求窗口大小为0,表明接收方已经接收了全部数据,或者接收方应用程序没有时间读取数据,要求

暂停发送。发送方接收到携带窗口号为0的确认,停止这一方向的数据传输。


固定窗口大小问题

 
 
这里我们可以看到假设窗口的大小是1,也是就每次只能发送一个数据,并且发送方只有接受方对这个数据进行确认了

以后才能发送下一个数据。 所以就会存在如下两个问题:

 1   如果说窗口过小,那么当传输比较大的数据的时候需要不停的对数据进行确认,这个时候就会造成很大的延迟。

 2   如果说窗口的大小定义的过大。我们假设发送方一次发送100个数据。但是接收方只能处理50个数据。这样每次都会

      只对这50个数据进行确认。发送方下一次还是发送100个数据,但是接受方还是只能处理50个数据。这样就有不必要

       的数据来拥塞我们的链路。

所以我们就引入了滑动窗口机制,窗口的大小并不是固定的而是根据我们之间的链路的带宽的大小、链路是否拥护塞、

接受方是否能处理这么多数据,三个元素共同决定。


滑动窗口是工作机制

 

 
首先是第一次发送数据这个时候的窗口大小是根据链路带宽的大小来决定的。我们假设这个时候窗口的大小是3。这个

时候接受方收到数据以后会对数据进行确认告诉发送方我下次希望手到的是数据是多少。这里我们看到接收方发送的

ACK=3(这是发送方发送序列2的回答确认,下一次接收方期望接收到的是3序列信号)。这个时候发送方收到这个数据以后

就知道我第一次发送的3个数据对方只收到了2个。就知道第3个数据对方没有收到。下次在发送的时候就从第3个数据

开始发。这个时候窗口大小就变成了2 。 
 

这个时候发送方发送2个数据。 

 
看到接收方发送的ACK是5就表示他下一次希望收到的数据是5,发送方就知道我刚才发送的2个数据对方收了这个时候

开始发送第5个数据。 这就是滑动窗口的工作机制,当链路变好了或者变差了这个窗口还会发生变话,并不是第一次协商

好了以后就永远不变了。

总结:TCP的滑动窗口就是通过动态改变窗口的大小来调节两台主机间数据传输,每个TCP/IP主机支持全双工数据传输,

因此TCP有两个滑动窗口,一个用来接收数据,另一个用来发送数据。

使用TCP的滑动窗口可以干什么?

TCP可以使用滑动窗口做 流量控制 乱序重排

1 保证TCP的可靠性

2 保证TCP的流量控制

什么是TCP的流量控制和拥塞控制?

拥塞控制:提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。

拥塞控制包括四部分:慢启动、拥塞避免、快速重传、快速恢复 

先了解3个TCP的概念:

MSS:Maximum Segment Size,TCP一次传输发送的最大数据段长度。

RTT:Round-Trip Time,往返时延,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到

数据后便立即发送确认),总共经历的时延。

SWND: Send Window(发送窗口) ,  发送端向网络一次连续写入的数据量

发送端最终以TCP报文段来发送数据,所以SWND的大小限制了能连续发送的TCP报文段数量。这些TCP报文段的最大

长度(仅数据部分)称为SMSS(Sender Maximum Segment Size,发送者最大段大小),其值一般等于MSS。 发送端

需要合理的选择SWND的大小,如果SWND太小,会引起明显的网络延迟;反之,如果SWND太大,则容易导致网络拥塞。

所以还需要引入一个称为拥塞窗口(Congestion Window,CWND)的状态变量

(1)慢启动 
发送方维持一个拥塞窗口CWND的状态变量。它的大小取决于网络的拥塞程度,并且在动态的变化,发送方会让自己的发

送窗口等于这个拥塞窗口。 

发送方控制拥塞窗口的原则是: 
(1)只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。 
(2)但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

慢启动算法:因为不清楚网络状况,所以需要进行试探,将发送窗口逐渐增大,也就是逐渐增大拥塞窗口的数值。在刚开始

发送的时候,先把拥塞窗口CWND设置为最大报文段MSS,每收到一个对新报文段的确认后,就把拥塞窗口最多增加一个

MSS数值。这种逐步增大的方法可以使分组注入到网络的速率更加合理。【指数增长】

为了防止拥塞窗口过大引起网络拥塞,我们需要设置一个慢开始门限ssthreth状态变量,

当cwnd < ssthreth时,使用慢开始算法;

当cwnd > ssthrerth时,使用拥塞控制算法;如果两者相等,两个都可以使用。

慢启动的“慢”并不是指CWND增长速率慢而是说在TCP开始发送报文时,先设置CWND=1,使发送端开始时只发送一个报文段进行探测。

(2)拥塞避免 

就是让拥塞窗口缓慢增大,即每经过一个往返时间RTT就使cwnd+1,这种线性增长的速率慢很多。 
只要发送方判断出网络拥塞,不论是在慢开始还是拥塞控制阶段,都要把慢开始门限值设置为出现拥塞时发送端窗口大小的

一半,但不能小于2。然后把cwnd重新置为1,执行慢开始算法。 
门限值减半,cwnd重置为1,做目的是减少发送到网络中的分组数,使得发生拥塞的路由器能够有时间能把队列中积压的分

组处理掉。 发送端判断网络拥塞的依据: 
①传送超时,即TCP重传定时器溢出 
②收到重复的确认报文

(3)快重传 

快重传算法要求接收方每收到一个失序的报文段后就立即发出重复确认,而不要等到自己发送数据时才进行捎带确认。发送方

只要一连收到3个同样的确认报文就应当立即重传数据报,不必等待报文段的重传计时器到期。

(4)快恢复 

把慢开始门限减半,“乘法减小”,将cwnd设置为新的慢开始门限值,继续执行拥塞避免算法,“加法增大” 

TCP流量控制

如果发送端发送数据太快,接收端来不及接收,可能会丢失数据。所以流量控制是让发送端不要发送太快,要让接收端来得及

接收 

流量控制是通过大小可变的滑动窗口实现的。 

发送端窗口大小不能超过接收端窗口大小的值。TCP窗口单位是字节。 
为什么要设置窗口,因为如果TCP发完一次数据等待接收端确认再发下一条数据太慢了。 


由图中可知,TCP三次流量控制分别是,第一次窗口大小由400减到300,第二次减到100,第三次减到0。 
TCP连接的一方如果收到零窗口通知,就会启动坚持计时器。若坚持计时器的时间到期,就会发送一个零窗口控测报文段,

收到报文段的一方就重新设置坚持计时器。

UDP协议介绍:

    UDP发送数据的时候,只要将数据发送出去了,就不管了,至于接收端有没有收到,UDP协议本身是不保障的。

    UDP的应用其实很广泛。

    由于不需要建立连接,所以UDP不单单可以进行一对一的通信,还可以进行多对多的通信。其最简单,基础的应用

就是提供组播,广播功能(分别是向组别地址、广播地址发送消息即可)。比如我们向某广播地址x.x.x.255的8090端口

发送一条广播消息,在相同网段中只要开启了监听这个端口的Socket,就能收到广播消息,而且在局域网内几乎不会丢包,

所以UDP在这里有个常见的应用就是DHCP协议,这个协议是帮助一个局域网内的主机分配IP的任务。

    UDP还有一个最显著的好处就是,由于没有像TCP那样的拥塞控制,流量控制,滑动窗口的应用,所以UDP有着低时延的

优点。针对于一些对丢包不敏感的业务场景,例如音频实时传输、还有许多直播平台基于UDP实现自己的视频传输协议。还有

就是实时游戏,游戏对时延特别敏感,而且游戏服务器不能同时维持大量的TCP长连接,所以基于自定义的UDP协议,自定义

重传策略,能够把时间延迟降到最低。

     还有一个就是原来访问网页和手机 APP 都是基于 HTTP 协议的。HTTP 协议是基于 TCP 的,建立连接都需要多次交互,对

于时延比较大的目前主流的移动互联网来讲,建立一次连接需要的时间会比较长,然而既然是移动中,TCP 可能还会断了重连,

也是很耗时的。而且目前的 HTTP 协议,往往采取多个数据通道共享一个连接的情况,这样本来为了加快传输速度,但是 TCP

的严格顺序策略使得哪怕共享通道,前一个不来,后一个和前一个即便没关系,也要等着,时延也会加大。

      而QUIC(全称Quick UDP Internet Connections,快速 UDP 互联网连接)是 Google 提出的一种基于 UDP 改进的通信协

议,其目的是降低网络通信的延迟,提供更好的用户互动体验。QUIC 在应用层上,会自己实现快速连接建立、减少重传时延,

自适应拥塞控制

146. TCP和UDP的区别及应用场景:

TCP:一种面向连接的,可靠的,基于字节流的传输层通信协议。

UDP:一种无连接的,基于数据报的传输层通信协议,提供面向事务的简单不可靠信息传送服务。 

TCP和UDP区别:

  1. TCP是面向连接的,UDP是面向无连接的
  2. Tcp提供可靠服务,传输的数据无差错,不丢失,不重复,且按序到达。 UDP尽最大努力交付,及不保证可靠交付。
  3. TCP面向字节流,UDP面向报文。
  4. TCP连接点对点。 UDP一对一,一对多,多对一,多对多交互通信。
  5. TCP首部开销20字节,UDP 8 字节。
  6. TCP通信全双工的可靠通信,UDP不可靠信道。

2.UDP应用场景主要有:

  • (1)提供组播,广播功能
  • (2)网络数据大多为短消息;
  • (3)针对于一些对丢包不敏感的业务场景,例如音频实时传输、直播平台可以基于UDP实现自己的视频传输协议
  • (4)对数据安全性无特殊要求;

147.简述三次握手

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

位码即tcp标志位,有6种标示:

  • SYN(synchronous建立联机)
  • ACK(acknowledgement 确认)
  • PSH(push传送)
  • FIN(finish结束)
  • RST(reset重置)
  • URG(urgent紧急)
  • Sequence number(顺序号码)
  • Acknowledge number(确认号码)

第一次握手

​ 客户端向服务器发出连接请求报文,这时报文首部中的同部位SYN=1,同时随机生成初始序列号 seq=x,此时,TCP客户端

进程进入了 SYN-SENT(同步已发送状态)状态。

TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。这个三次握手中的开始。表示客户端想要

和服务端建立连接。

第二次握手

​ TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时

也要为自己随机初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。

这个报文也不能携带数据,但是同样要消耗一个序号。这个报文带有SYN(建立连接)和ACK(确认)标志,询问客户端是否准备好。

第三次握手

​ TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,此时,TCP连接建立,客户端

ESTABLISHED(已建立连接)状态。

TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。这里客户端表示我已经准备好。

在三次握手中第一次握手的隐患是什么?

会出现SYN超时。 服务器收到客户端的SYN,回复SYN+ACK时,未收到ACK确认,服务器不断重试直至超时,Linux默认

等待63秒才断开连接

针对上述的保护措施是什么?

SYN队列满后,通过TCP_Syncookies参数回发SYN Cookie,若为正常连接,则客户端会回发SYN Cookie,直接建立连接。

在三次握手中,TCP的保活机制是?

服务器向客户端发送报货探测报文,未响应,继续发送,尝试次数达到保活探测数后,未收到响应,则中断连接。

148.四次挥手

第一次挥手

​ TCP发送一个FIN(结束),用来关闭客户到服务端的连接。

​ 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送

过来的数据的最后一个字节的序号加1),

此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

第二次挥手

​ 服务端收到这个FIN,他发回一个ACK(确认),确认收到序号为收到序号+1,和SYN一样,一个FIN将占用一个序号。

​ 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了

CLOSE-WAIT(关闭等待)状态。TCP服务器

通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但

是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在

这之前还需要接受服务器发送的最后的数据)。

第三次挥手

​ 服务端发送一个FIN(结束)到客户端,服务端关闭客户端的连接。

​ 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又

发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手

​ 客户端发送ACK(确认)报文确认,并将确认的序号+1,这样关闭完成。

​ 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就

进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2MSL(最长报文段寿命)的时间后,当客

户端撤销相应的TCB后,才进入CLOSED状态。

服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,

服务器结束TCP连接的时间要比客户端早一些。

149.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,

而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发

送给你了;但未必你所有的数据都全部发送给对方了,所以你不可以马上关闭SOCKET,也即你可能还需要发送一些数据给

对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分

开发送的。

150.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

这是因为虽然双方都同意关闭连接了,但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定

被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这

TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

151.断开连接时,经常会出现time_wait的状态,这个状态是怎么产生的?

客户端A返回最后一个数据包之后,进入Time-wait状态后,该套接字绑定的端口号将在这段时间内不能被其他套接字使用,

也就是说该发送方会保持2MSL时间之后才会回到初始状态。

MSL值是数据包在网络中的最大生存时间。产生这种结果使得这个TCP连接在2MSL连接等待期间,定义这个连接的四元组

(客户端IP地址和端口,服务端IP地址和端口号)不能被使用。

152.客户端在断开连接后会进入Time-wait状态吗?

会。只不过客户端的端口号是随机分配的所以我们很少见到bind error的错误

153.Time-wait状态有什么用?

之所以设置Time-wait状态,主要是考虑:万一由主机A发送的最后一次握手的数据包丢失时,主机B会再次发送第三次握手

的数据包,若此时主机A关闭了Socket就会出现主机B永远等不到主机A最后一次握手数据包的情况,B也就永远无法关闭。

所以在主动发起断开连接请求的主机上设置了这个Time-wait状态。

请讲一下浏览器从接收到一个URL,到最后展示出页面,经历了哪些过程。

例如在网页上数据www.google.com会经历如下步骤

1.DNS解析 2.TCP连接 3.发送HTTP请求 4.服务器处理请求并返回HTTP报文 5.浏览器解析渲染页面

 1 域名解析(DNS解析)

  1.  首先查看本地的host文件是否有网址映射,有,完成解析。没有,查找本地DNS解析器。
  2.  本地DNS解析器没有IP地址,未找到域名,去本地DNS服务器查找
  3. 本地DNS服务器查询IP,未找到域名,向根域名服务器发送请求,未找到域名
  4. 本地DNS服务器向.com顶级域名服务器发送请求,未找到域名
  5. 本地DNS服务器向.google.com域名发送请求,找到该域名,将对应的IP地址返回给本地DNS服务器,本地DNS
  1.      服务器返回给客户端。
     

 2 TCP连接

    HTTP协议使用TCP协议作为传输层协议,客户端拿到IP地址后,会与服务器建立TCP连接,该过程会经历三次握手

3  浏览器发送HTTP请求

   建立连接后,浏览器构建THHP请求报文,并通过TCP协议传送到服务器的指定端口

4 服务器处理HTTP请求并返回HTTP报文

  服务器处理HTTP请求并返回HTTP报文(响应报文包含三部分)

   1 版本协议: HTTP/1.1

   2 状态码   1**  服务器已经接受该请求,客户端可继续发送请求

                    2**  请求成功

                    3**  请求从定向

                    4**  客户端错误

                    5**  服务器错误

    响应头:

                  包含了响应的相关信息,如日期等

     3  响应正文:  如服务器返回给客户端的文本信息,通常指HTML,CSS, JS 图片等。

5 浏览器页面渲染

     浏览器接收到http服务器发送过来的响应报文,开始解析html文档,渲染页面,具体包括:构建DOM树,构建渲染树,

定位页面元素等。

6  断开TCP连接(四次挥手)

应用层

 请你谈谈DNS的寻址过程

如在网页上数据www.google.com会经历域名解析(DNS解析)

  1.  首先查看本地的host文件是否有网址映射,有,完成解析。没有,查找本地DNS解析器。
  2.  本地DNS解析器没有IP地址,未找到域名,去本地DNS服务器查找
  3. 本地DNS服务器查询IP,未找到域名,向根域名服务器发送请求,未找到域名
  4. 本地DNS服务器向.com顶级域名服务器发送请求,未找到域名
  5. 本地DNS服务器向.google.com域名发送请求,找到该域名,将对应的IP地址返回给本地DNS服务器,本地DNS

         服务器返回给客户端。

154.说说HTTP和HTTPS得区别:

HTTP是一个属于应用层的面向对象的协议,是一个客户端和服务器端请求和应答的标准(TCP)。

HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,简单讲就是HTTP的安全版。

主要区别如下:

1、https 协议需要用到ca 申请证书,一般免费证书较少,因而需要一定费用。
2、http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。
3、http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
4、http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,

比 http 协议安全。

155.HTTP属于那一层协议?

属于应用层

156.说说对HTTP协议有什么了解?以及8中请求方式

HTTP(超文本传输协议)是一个属于应用层的面向对象的协议,是一个客户端和服务器端请求和应答的标准(TCP)。

http请求由三部分组成,分别是:请求行、请求头、请求体

请求行:请求行包含http请求方式,请求资源名称,http版本 具体如下:

Method   Request-URI   HTTP/1.1 CRLF  
其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP/1.1表示请求的HTTP协议版本;CRLF表示回车

和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

请求方法包含8种:

get    请求获取Request-URI所标识的资源
post    在Request-URI所标识的资源后附加新的数据
head    请求获取由Request-URI所标识的资源的响应消息报头
put     请求服务器存储一个资源,并用Request-URI作为其标识
delete   请求服务器删除Request-URI所标识的资源
trace    请求服务器回送收到的请求信息,主要用于测试或诊断
connect  保留将来使用
options   请求查询服务器的性能,或者查询与资源相关的选项和需求

请求头:  请求头用于描述客户端请求哪台主机,以及客户端的一些环境信息,以键值对的形式传递

Accept         text/html, application/xhtml+xml, */*

Accept-Language         en-US,zh-CN;q=0.5

Host    localhost:8888

请求体:请求体代表着浏览器在post请求方式中传递给服务器的参数,请求体中参数以键值形式传递,多个用&链接,

服务器接收到后再解析

username=admin&userpwd=123

get和post的请求的区别:

从三个层面来解答

  1 http报文层面: get将请求信息放在URL中,Post放在报文体重

                              get请求用来从服务器上获得资源,而post是用来向服务器提交数据;

 2 数据库层面:    get符合幂等性和安全性,post不符合

 3 其他层面:        get可以被缓存,被存储, post 不行

                               get 传输数据接受url长度限制 1024字节  post可以传输大量数据

157.HTTP底层是使用哪一层协议的?

使用TCP协议的,TCP 协议是 HTTP 协议的基石——HTTP 协议需要依靠 TCP 协议来传输数据

158.HTTP 协议如何使用 TCP 连接?

HTTP 对 TCP 连接的使用,分为两种方式:短连接和长连接。
短连接:假设有一个网页,里面包含好多图片,还包含好多【外部的】CSS 文件和 JS 文件。在“短连接”的模式下,

浏览器会先发起一个 TCP 连接,拿到该网页的 HTML 源代码(拿到 HTML 之后,这个 TCP 连接就关闭了)。然后,

浏览器开始分析这个网页的源码,知道这个页面包含很多外部资源(图片、CSS、JS)。然后针对【每一个】外部资

源,再分别发起一个个 TCP 连接,把这些文件获取到本地(同样的,每抓取一个外部资源后,相应的 TCP 就断开)
长连接:浏览器也会先发起一个 TCP 连接去抓取页面。但是抓取页面之后,该 TCP 连接并不会立即关闭,而是暂时

先保持着(所谓的“Keep-Alive”)。然后浏览器分析 HTML 源码之后,发现有很多外部资源,就用刚才那个 TCP 连接

去抓取此页面的外部资源。

http请求各状态码代表的含义?

1**开头   服务器已经接受该请求,客户端可继续发送请求

2**开头 (请求成功)表示成功处理了请求的状态代码

  • 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
  • 204  请求成功,无资源返回
  • 206  进行部分资源请求

3** 开头 (请求被重定向)表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

  • 301   永久性重定向
  • 302 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
  • 303   临时重定向,但要求get请求
  • 304   附带条件的请求,资源已经找到,但不符合条件请求

4**开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。

  • 400 (错误请求) 表示请求报文存在,但语法错误
  • 403 (禁止) 服务器拒绝请求那个资源
  • 404 (未找到) 服务器找不到请求的网页。

5**开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的

错误,而不是请求出错。

  • 500 服务器执行时发生错误
  • 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
  • 503  服务器请求繁忙
  • 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。

159.说说HTTPS的安全体现在哪个方面?

 可进行加密传输、身份认证

160.HTTPS协议关于CA证书这方面的了解

就是加解密, 加密就是将文字转换成不能直接阅读的形式,解密就是将密文转换成能够直接阅读的文字

161,HTTPS传输时涉及到一些加密算法,有哪些了解,以及算法的应用场景?

对称加密与非对称加密
对称加密

对称加密是指加密与解密使用同一个密钥的加密算法。

目前常见的加密算法有:DES、DEA、IDEA、MD5算法 等

MD5算法:不可逆加密算法,非常适合在分布式网络系统上使用。

DEA(Data Encryption Algorithm、DES)数据加密算法:是一种对称加密算法,很可能是使用最广泛的密钥系统,特别

是在保护金融数据的安全中,通常用在自动取款机上。

DES算法的安全性: 一.安全性比较高的一种算法,目前只有一种方法可以破解该算法,那就是穷举法. 二.采用64位密钥

技术,实际只有56位有效,8位用来校验的.譬如,有这样的一台PC机器,它能每秒计算一百万次,那么256位空间它要

穷举的时间为2285年.所以这种算法还是比较安全的一种算法.。

IDEA 国际数据加密算法:是旅居瑞士中国青年学者来学家和著名密码专家J.Massey于1990年提出的。它在1990年正

式公布并在以后得到增强。这种算法是在DES算法的基础上发展出来的,类似于三重DES,和DES一样IDEA也是属于

对称密钥算法。发展IDEA也是因为感到DES具有密钥太短等缺点,已经过时。IDEA的密钥为128位,这么长的密钥在

今后若干年内应该是安全的。 

非对称加密

非对称加密使用的是两个密钥,公钥与私钥,我们会使用公钥对网站账号密码等数据进行加密,再用私钥对数据进行解

密。这个公钥会发给查看网站的所有人,而私钥是只有网站服务器自己拥有的。

目前常见非对称加密算法:RSA,DSA等。
RSA公钥加密算法:

RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,

因此可以将乘积公开作为加密密钥。 为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密

的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改

进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可

核对信息摘要。RSA算法是

第一个能同时用于加密和数字签名的算法,也易于理解和操作。 

RSA 加密算法的缺点: 

1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

2)安全性,RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且

密码学界多数人士倾向于因子分解不是NPC问题。

3)速度太慢,由于RSA 的分组长度太大,为保证安全性,n 至少也要 600 bitx以上,使运算代价很高,尤其是速度较

慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。 

DSA(Digital Signature Algorithm):被美国国家标准局用来做DSS数据签名标准(Digital Signature Standard)。

DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当

使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却做不到。

DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多。

请你简单讲解一下,负载均衡 反向代理模式的优点、缺点

(1)反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上

的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

(2)反向代理负载均衡技术是把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器

进行处理,从而达到负载均衡的目的。

(3)反向代理负载均衡能以软件方式来实现,如apache mod_proxy、netscape proxy等,也可以在高速缓存器、负载

均衡器等硬件设备上实现。反向代理负载均衡可以将优化的负载均衡策略和代理服务器的高速缓存技术结合在一起,提升

静态网页的访问速度,提供有益的性能;由于网络外部用户不能直接访问真实的服务器,具备额外的安全性(同理,NAT

负载均衡技术也有此优点)。

(4)缺点主要表现在以下两个方面

反向代理是处于应用层,所以就必须为每一种应用服务专门开发一个反向代理服务器,这样就限制了反向代理负载均衡

技术的应用范围,现在一般都用于对web服务器的负载均衡。

针对每一次代理,代理服务器就必须打开两个连接,一个对外,一个对内,因此在并发连接请求数量非常大的时候,代理

服务器的负载也就非常大了,在最后代理服务器本身会成为服务的瓶颈。

一般来讲,可以用它来对连接数量不是特别大,但每次连接都需要消耗大量处理资源的站点进行负载均衡,如search等。

162.介绍一下cookie机制和session机制

cookie机制:  cookie技术是客户端的解决方案,

  1. 用户使用浏览器访问一个支持Cookie的网站,用户会提供包括用户名在内的个人信息并且提交至服务器;
  2. 服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,然后将这些个人信息存放于HTTP响应头(Response Header);
  3. 客户端浏览器接收到来自服务器的响应之后,对于Windows操作系统,浏览器会将这些信息存放在系统盘中的Cookies目录;
  4. 客户端再次向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,Cookie信息则存放在HTTP请求头(Request Header)了。

session机制: session技术则是服务端的解决方案,通常都会把Session翻译成会话,我们可以把客户端浏览器

与服务器之间一系列交互的动作称为一个 Session。

  1. 服务器端程序运行时,调用HttpServletRequest的getSession方法创建session,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;
  2. 在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;
  3. 当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session.

163.cookie 和session的区别:

  1. cookie数据存放在客户的浏览器上,session数据放在服务器上。
  2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗   考虑到安全应当使用session。
  3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
  4.  考虑到减轻服务器性能方面,应当使用COOKIE。
  5. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

164.在前端提交请求时,cookie中经常有个jsessionid,这个jsessionid是用

来干什么的?

jsessionid就是客户端用来保存session id的变量,jsessionid是保存在内存cookie中的,在一般的cookie文件中是

看不到它的影子的。内存cookie在打开一个浏览器窗口的时候会创建,在关闭这个浏览器窗口的 时候也同时销毁。

session跟jsessionid紧密不可分割的联系。只有通过jsessionid才能使session机制起作用,而jsessionid又是通过

cookie来保存。

165.服务器一般保存了一个session,浏览器为什么知道我多次请求在一个

session里面,为什么能找到我之前的session?

因为当在服务器中创建session的时候,服务器会为该Session生成唯一的Session id,并在该session id返回

给客户端,然后通过jsessionid来在客户端的内存中保存session id,每次客户端请求时都会把这个id传到服务器,

就能找到之前的session.

下一章操作系统链接:https://blog.csdn.net/weixin_38201936/article/details/93617399

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3分钟秒懂大数据

你的打赏就是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值