java初、中、高级面试题必备——计算机网络

142.网络七层模型

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

java初、中、高级面试题必备——计算机网络

143.网络四层模型

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

java初、中、高级面试题必备——计算机网络

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

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

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层主要完成资源子网的功能。

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

总的来说,TCP与UDP的区别有:

1.TCP与UDP的基本区别:

  • (1)TCP基于连接,UDP基于无连接;
  • (2)TCP要求系统资源较多,UDP则较少;
  • (3)UDP程序结构较简单;
  • (4)流模式(TCP)与数据报模式(UDP);
  • (5)TCP保证数据正确性,UDP可能丢包;
  • (6)TCP保证数据顺序,UDP不保证。

2.UDP应用场景主要有:

  • (1)面向数据报方式;
  • (2)网络数据大多为短消息;
  • (3)拥有大量Client;
  • (4)对数据安全性无特殊要求;

(5)网络负担非常重,但对响应速度要求高。

3.具体编程时的区别:

  • (1)套接字Socket的参数不同;
  • (2)UDP不需要调用listen和accept;
  • (3)UDP收发数据分别用send()和receive()方法;
  • (4)TCP:地址信息在connect和accept时确定;
  • (5)UDP:在send()和receive()方法中每次均需指定地址信息。

147.简述三次握手

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

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

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

java初、中、高级面试题必备——计算机网络

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.

148.四次挥手

java初、中、高级面试题必备——计算机网络

  1. 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。
  2. 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个号。
  3. 服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。
  4. 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

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状态。

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的请求的区别:

①get请求用来从服务器上获得资源,而post是用来向服务器提交数据;
②get将表单中数据按照name=value的形式,添加到action 所指向的URL 后面,并且两者使用"?"连接,而各个变量之间使用"&"连接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL;
③get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件通常要使用post方式;
④使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post;
⑤get使用MIME类型application/x-www-form-urlencoded的URL编码(也叫百分号编码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是"%20"。

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请求各状态码代表的含义?

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

  • 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。

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

  • 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
  • 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

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

  • 400 (错误请求) 服务器不理解请求的语法。
  • 403 (禁止) 服务器拒绝请求。
  • 404 (未找到) 服务器找不到请求的网页。

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

  • 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
  • 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要快很多。

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.