java网络面试总结

 

  • TCP/IP
  1. URL由哪几部分构成

基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名。

 

完整的、带有授权部分的普通统一资源标志符语法看上去如下:

协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志

 

https://zhidao.baidu.com/question/1820387867264893668.html

具体例子:你看你现在浏览器地址栏,http是协议zhidao.baidu.com是服务器名称/question/1820387867264893668.html是目录/文件名.文件后缀,?fr=XXXX&entry=XXX这个就是要传到后台的参数

  1. TCP三次握手和四次挥手

三次握手过程:客户端发送syn报文给服务端,表示想建立连接,服务端回复syn+ACK报文同意连接,客服端接收到后回复ACK,三次握手连接成功。

 

四次挥手:客户端想断开与服务端的连接,发送FIN报文给服务端,服务端收到后回复一个ACK表示我已经收到你的断开请求,如果服务端准备好断开就发送FIN报文给客户端,客户端回复ACK报文,四次挥手结束,TCP断开连接。

 

为什么要三次握手:为了防止已经失效的连接请求报文突然又传送给主机。

为什么要四次挥手:确保能完成传输。因为客户端发送FIN报文的时候仅仅是表示它已经把所以数据发给你了,但是未必服务端的全部发送给了客户端。

  1. Time_wait状态产生的原因

客户端最后一次发送ACK丢失了,服务器会以为是自己的FIN报文丢失了,这时会重新发送FIN报文,time_wait是为了让客户端维护这条连接的状态。一般维持时间是在1-4分钟。每次收到新的FIN,time_wait就会重新计时。

  1. TCP如何保证可靠传输

①将数据截断为合理长度

②超时重发

③对于收到的请求,给出确认响应

④检验出错的包,丢弃报文段

⑤对失序的数据进行重新排序

⑥丢弃重复的数据

⑦流量控制拥塞控制

  1. TCP与UDP的区别

①TCP是面向连接的,UDP是面向无连接的

②TCP是可靠的,UDP是不可靠的

③TCP会进行排序,UDP不提供任何有序性保证

④UDP的速度比TCP快,TCP传输的数据量比UDP大

⑤TCP提供流量控制和拥塞控制

⑥TCP是字节流,UDP是面向报文的

⑦TCP只能单播,UDP可以广播和组播

TCP应用场景:文件传输,邮件传输等等

UDP应用场景:视频,语音等等

 

UDP为什么快:无需建立连接,对收到的数据不用给出确认,没有超时重发机制;没有流量控制和拥塞控制等。

  1. 流量控制和拥塞控制

流量控制:通过滑动窗口。由发送方和接收方在三次握手阶段,互相将自己的最大可接收的数据量告诉对方。

也就是自己的数据接收缓冲池的大小。这样对方可以根据已发送的数据量来计算是否可以接着发送。

在处理过程中,当接收缓冲池的大小发生变化时,要给对方发送更新窗口大小的通知。

 

拥塞控制:

 

拥塞:对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。

 

拥塞控制:防止过多的数据注入到网络中,使得网络中的路由器或链路不致过载。

拥塞控制方法:

 

慢开始 + 拥塞避免;

 

快重传 + 快恢复。

  • HTTP相关
  1. http的一次请求过程

域名解析

将消息从你的PC上传到服务器,需要IP协议,ARP协议,OSPF协议等等

发起TCP3此握手

服务器响应HTTP请求

浏览器解析HTML代码,请求HTML代码中的资源(js,css,图片等)

断开TCP链接

浏览器将页面呈现给用户

  1. http请求方法

Get:从服务器获得一份文档

HEAD:从服务器获得响应报文首部

POST:向服务器发送需要处理的数据

PUT:请求的主题不符存储在服务器上

TRACE:对可能经过代理服务器传送到服务器上的报文进行最终

OPTIONS:决定在服务器上可以执行哪些方法

DELETE:从服务器上删除一份文档

  1. GET请求和POST请求的区别

①GET用于获取或者查询资源信息,POST用于更新资源信息。

②GET方法,客户端把要发送的数据添加到URL后面,并且用“?”链接,各个变量之间用“&”。HTTP协议并没有对URL长度进行限制,由于特定的浏览器及服务器对URL的长度存在限制,所以数据量有限;GET请求有可能从浏览器缓存中获得账号和密码。POST把要传递的数据放到HTTP报文的消息体中,POST传输数据量比GET大:HTTP协议也没有进行大小限制,起限制作用的是服务器处理程序的能力。

③GET请求的数据会被浏览器缓存起来,会留下历史记录;而POST提交的数据不会被浏览器缓存。

  1. http请求报文

①请求行:请求方法,URL以及协议版本,之间由空格隔开

②请求头:host请求的服务器地址,可以是IP端口号,也可以是域名

User-agent 发送请求的应用程序名称

Connection 制定与连接相关的属性,如connection Keep-Alive

Accept-Charset 通知服务端可以发送的编码格式

Accept-Encoding 通知服务端可以发送的数据压缩格式

Accept-Language 通知服务端可以发送的语言

 

③空行:请求头最后会有一个空行,表示请求头结束,加下来为请求正文。

 

④请求正文:Get请求没有请求正文

  1. http响应报文

其他都和请求报文一样,只是响应报文的响应头部有一下几个构成

Server: 服务器应用程序软件的名称和版本

Content-Type: 响应正文的类型(是图片还是二进制字符串)

Content-length:响应正文长度

Content-Charset:响应正文使用的编码

Content-Encoding:响应正文使用的数据压缩格式

Content-language:响应正文使用的语言

  1. http状态码

1开头:客户端已经发生请求给服务端,服务端正在处理

100

客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。

101

服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议。

102

代表处理将被继续执行

2开头:服务端接收请求,成功处理了请求

200

服务端成功处理了请求

202

已经接受请求,但处理尚未完成

204

服务端成功处理了请求,但没有新文档,浏览器应该继续显示原来的文档

206

客户端进行了范围请求。响应报文中由content-range指定实体内容范围,实现断点续传

3开头:与重定向相关的

301

永久性重定向,请求的网页已经被永久移动到新位置

302

临时性重定向。

304

未修改,自上次请求后,请求内容未修改

4开头:客户端请求的错误

401

客户试图未经授权访问受密码保护的页面。应答中会包含一个www-authenticate头,浏览器据此显示用户名/密码对话框,然后在填写合适的authenticate头后再次发出请求

403

服务器拒绝请求

404

服务器上不存在客户机所请求的资源

5开头:服务端的错误

500

服务端遇到一个错误,使其无法为请求提供服务

  1. http浏览器缓存机制

①Last-Modified 和 if-Modified-Since

都是用来记录页面最后修改时间的HTTP头信息。Last-Modified是由服务端往客户端发生的HTTP头,而if-Modified-Since是由客户端往服务器发送的头。可以看到,再次请求本地存在的缓存页面时,客户端会通过if-Modified-Since把浏览器缓存的最后一次被服务器修改的时间一起发到服务器去,服务器通过与服务器上实际文件的最后修改时间进行比较,来判断客户端请求的页面是否是最新的,如果不是,放回HTTP状态码200和新文件,客户端接收到后会丢弃旧文件,把新文件缓存起来。如果是最新的,则返回304状态码,显示本地缓存的文件。这样网络传输的数据流就会大大减少。

②ETag和if-None-Match

ETag和if-None-Match可以是资源的任何属性。HTTP Response中添加ETags信息,当客户端再次请求该资源时,将在HTTP request中加入if-None-Match信息,如果服务器验证资源Etags没有改变,返回304,否则200状态,并返回该资源和新的ETags。

 

ETag标记的好处:某些文件修改非常频繁,用来检测秒一下的修改。

周期性的更改,但是内容并不改变,仅仅修改时间

某些服务器不能精确的得到文件最后一次修改的时间

因此,Last-Modified与ETag一起使用,服务器会优先验证ETag的值。

③Expires/Cache-Control

Expires是WEB服务器响应消息头字段,设置了缓存过期时间,在此日期前,客户端会认为缓存是有效的。但是Expires误差比较大,HTTP1.1改用Cache-Control,时间精确到秒。

  1. http1.1与Http1.0的区别

①默认持久连接和流水线:tcp维持持久连接。流水线即客户端遇到每个对象引用就立即发出一个请求,而不必等到收到前一个响应之后才能发下一个请求,但服务器端必须按照接收到客户端请求的先后顺序依次会送响应结果,以保证客户端能够区分出每次请求的响应内容。

②分块传输数据:HTTP1.0可以用来指定实体长度的唯一机制是content-length,它要求缓存整个响应来确定content-length的值,在服务端占用了大量的缓存。HTTP1.1后引入分块的传输,该方法使发送方能将消息实体分割为任意大小的组块,每个块前面都加上该组块的长度,在最末尾的地方,发送方生成长度为零的组块,接收方据此判断整条消息都已安全传输完毕。

③状态码100-continue:用于客户端发生POST数据给服务器前,征询服务器的情况,看服务器是否处理POST的数据。

④Host域:随着虚拟主机的发展,在一台物理服务器上可以存在多个虚拟主机,他们共享一个IP地址。

  1. 为什么HTTP是无状态?如何保持状态(会话跟踪技术,状态管理)

HTTP无状态:无状态是指协议对于事物处理没有记忆能力,不能保存每次客户端提交的信息,即当服务器返回应答之后,这次事务的所有信息全部丢弃。

优点:服务器不用为每个客户端链接分配内存来记忆大量状态,也不用再客户端失去连接的时候清理内存,节省服务器端的资源。

缺点:缺少记忆意味着如果后续处理需要前门的信息,则客户端必须重传,这可能导致传送的数据量增大。

会话跟踪技术:针对这个缺点,可以采用会话跟踪技术来解决这个问题,把状态保存在服务器中,只发送回一个标识符,浏览器在下次提交中把这个标识符发送过来,这样就可以定位存储在服务器上的状态信息。

有四种会话跟踪技术:①COOKIE ②Session ③URL重写 ④表单隐藏域

  1. HTTP安全问题

①对称加密算法:用户对真正传输的数据进行加密

②非对称加密算法:用于在握手过程中加密生成密码,非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输,而网站的私钥用于对数据进行解密,所以网站都会非常小心的保管自己的私钥。公钥和私钥匙用来加密密钥,对称秘钥是用来加密数据。

③散列算法:用于验证数据的完整性(MD5,SHA1)

④数据证书:作用类似于我们的身份证,证明自己的身份。

  1. HTTP与HTTPS的区别

①HTTPS更安全,相当于HTTP+SSL,可进行加密传输,身份认证的网络协议,要比http协议安全,所有传输的内容都经过加密,加密采用对称加密。http是超文本传输协议,信息是明文传输,没有加密,通过抓包工具可以获得其中内容

②https需要申请CA证书

③端口不同http是80端口,https是443端口

④http协议运行在tcp之上,https是运行在SSL/TLS之上

  1. Socket编程

①服务端

Server=new ServerSocket(4700)//创建一个ServerSocket实例,并制定本地端口,监听制定端口的链接请求

 

Socket = server.accept()//来获得客户端的请求,accept()建立一个和客户端的连接

 

通过返回的socket实例获取inputStream 和 outputStream ,可以通过这两个stream来分别读和写数据。

 

Close() 关闭socket链接

②客户端

Socket socket = new Socket(“服务器IP地址”,端口号)

 

通过返回的socket实例获取inputStream 和 outputStream ,可以通过这两个stream来分别读和写数据。

 

Close() 关闭socket链接

  • Session和cookie
  1. Session与cookie原理解析

客户第一次反射请求给服务器,服务端为每个客户的请求创建一个唯一sessionID,服务器通过设置cookie的方式将sessionID发送到浏览器。如果我们不设置过期时间,那么这个cookie将不存放在硬盘上,当浏览器关闭的时候,cookie就消失了。如果我们设置这个时间,那么这个cookie会保存在客户端硬盘中,即使浏览器关闭了,这个值任然在。此后客户再发生请求给服务器,就会请求request中携带cookie,cookie有sessionID。

 

Session什么时候被创建:在httpServletRequest.getSession(true)时被创建。

 

Cookie的maxAge决定着Cookie的有效期,单位秒。maxAge为负数,关闭浏览器失效。为0表示删除该cookie

 

浏览器禁用cookie:可以通过URL重写和表单隐藏域的方式将sessionID传送到服务器。

  1. Session与cookie的区别

①cookie存放在客户端,记录用户信息,session存放在服务器上

②cookie存在客户端中,对客户端是可见的,是不安全的,session存在服务端具有安全性。因此重要信息存session,其他需要保留的信息可以放cookie

③cookie的容量和个数是有限的,session没有此问题

④并发用户非常多的情况,会产生大量的内存消耗,cookie是保存在客户端,不占服务端资源,如果并发浏览器用户非常多,cookie是很好的选择。

  1. DNS域名解析过程

①浏览器缓存DNS

②若没有,则搜索操作系统中DNS缓存

③在本地域名服务器查询DNS缓存(递归查询)

④从根服务器上获得顶级域名服务器的地址(迭代)

⑤顶级域名服务器把权限域名服务器的地址告诉本地域名服务器,本地域名服务器从权限域名服务器中获得IP地址,然后返回给主机,主机将其缓存起来(浏览器和操作系统中都进行缓存)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值