Java面试5
一、计算机网络分层体系结构
1、物理层:实现计算机节点之间比特流的透明传输,规定传输媒体接口的标准,屏蔽掉具体传输介质和物理设备的差异,使数据链路层不必关心网络的具体传输介质,按照物理层规定的标准传输数据就行。
2、数据链路层:通过差错控制、流量控制等方法,使有差错的物理线路变为无差错的数据链路。
3、网络层:实现网络地址与物理地址的转换,并通过路由选择算法为分组通过通信子网选择最适当的路径。
4、传输层:提供源端与目的端之间提供可靠的透明数据传输,传输层协议为不同主机上运行的进程提供逻辑通信。
5、会话层:是用户应用程序和网络之间的接口,负责在网络中的两节点之间建立、维持、终止通信。
6、表示层:处理用户数据的表示问题,如数据的编码、格式转换、加密和解密、压缩和解压缩。
7、应用层:为用户的应用进程提供网络通信服务,完成和实现用户请求的各种服务。
二、TCP协议三次握手
「第一次握手」:客户端先向服务端发送一个请求连接的报文段,这个报文段SYN位设置为1,序列号Seq(Sequence Number)设置为某一值,假设为X,发送出去之后客户端进入SYN_SEND状态,等待服务器的确认;
「第二次握手」:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
「第三次握手」:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
完成了三次握手,客户端和服务器端就可以开始传送数据。以上就是TCP三次握手的总体介绍。
三、为什么不是两次握手
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
四、SYN洪泛攻击
SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应 报文将永远发送不到目的地,那么「被攻击端在等待关闭这个连接的过程中消耗了资源」,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
五、TCP协议四次分手
「第一次分手」:主机1,设置序列号Seq(Sequence Number)和确认包ACK(Acknowledgment Number),假设seq为x+2,ACK=y+1,再将FIN标志位设置为1,向主机2发送FIN报文段;之后主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;
「第二次分手」:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段(其值为接收到的FIN报文的seq值+1);主机1进入FIN_WAIT_2状态,等待主机二的断开请求包FIN;
「第三次分手」:主机2向主机1发送FIN报文段,意思是我可以断开连接了,请求关闭连接,同时主机2进入CLOSE_WAIT状态;
「第四次分手」:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,值为刚刚接收到的FIN包Seq值+1,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。
六、HTTP和HTTPS区别
HTTP协议是免费使用的,而 HTTPS 协议需要到CA机构申请证书,需要缴纳费用,HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL/TLS加密传输协议,信息是密文。
HTTP的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全和HTTP通信相比HTTPS 通信会由于加减密处理消耗更多的CPU和内存资源。
HTTP和HTTPS使用的端口也不一样,前者是80,后者是443。
七、对称加密与非对称加密
对称加密:
对称加密是指加密和解密使用同一个密钥的方式,一方通过密钥将信息加密后,把密文传给另一方,另一方通过这个相同的密钥将密文解密,转换成可以理解的明文。
非对称加密:
使用一对非对称密钥加密,即公钥和私钥,公钥可以随意发布,任何人都能获得,但私钥只有自己知道,发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以叫作非对称加密。
八、讲一讲TCP和UDP各有什么特点,两者有什么区别
1、TCP 是面向连接的,使用 TCP 连接需要经过三次握手,断开连接需要经过四次挥手。相比于 TCP,UDP 则是面向无连接的,它像一个随时可以进行通信的协议,只要接收方创建了 Socket,设置了监听端口,就能接收到到达的 UDP 包,并且能随时建立 Socket 进行发包。
2、TCP 可以对数据的发送速率作控制,它具有流量控制和拥塞控制机制,通过控制滑动窗口的大小控制数据的发送速率。而 UDP 理论上是可以无限地向网络中发数据包的,它的发送速率取决它的应用程序设置。
3、TCP 保证可靠的数据传输,它根据速率控制,重传控制,还有数据校验保证提供可靠的数据传输服务。而 UDP 只是保证尽力而为地传输数据,并不保证数据的可靠性。
4、TCP 的报文段头部占20各字节,比 UDP 的报文段头部多12个字节。消耗的资源更多。由于建立连接有握手的机制,TCP 的使用效率会比 UDP 要低一些。
九. HTTP的常见状态码有哪些,代表什么含义?
首先状态码的开头不同代表不同的类型:
1xx:代表指示信息,表示请求已接收,继续处理
2xx:代表成功,表示请求已被成功接收,理解,接受
3xx:重定向,表示完成请求必须进行进一步的操作
4xx:客户端错误,请求有语法错误或请求无法实现
5xx:服务器端错误,服务器未能实现合法的请求
常见状态码:
200 OK:正常返回信息
400 Bad Request:客户端请求有语法错误,不能被服务器所理解
403 Forbidden:服务器收到请求,但是拒绝提供服务
404 Not Found:请求资源不存在,输入了错误的URL
500 Internal Server Error:服务器发生不可预期错误
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
十. GET请求和POST请求的区别
(1)功能:get一般用来从服务器上面获取资源,post一般用来更新服务器上面的资源。
(2)幂等性:get 是幂等的,post 为非幂等的
(3)安全性:get 请求的参数会明文附加在URL之后,而 post 请求提交的数据则被封装到请求体中,相对更安全。
(4)传输数据量的大小:get请求允许发送的数据量比较小,大多数浏览器都会限制请求的url长度在2048个字节,而大多数服务器最多处理64K大小的url;而post请求提交的数据量则是没有大小限制的。
(5)参数的数据类型:GET只接受ASCII字符,而POST没有限制。
(6)GET在浏览器回退时是无害的,而POST会再次提交请求。
(7)get请求可以被缓存,可以被保留在浏览器的历史记录中;post请求不会被缓存,不会被保留在浏览器的历史记录中。
十一. session和cookie有什么区别
(1)保存位置与安全性:cookie保存在客户端,session保存在服务端,所以在安全性上面,cookie存在安全隐患,可以通过拦截或本地文件找到cookie后进行攻击,而session相对更加安全。因此,可以将登陆信息等重要信息存放为session中;其他信息如果需要保留,可以放在cookie中。
(2)存储容量:单个cookie最大只允许4KB,一个站点最多保存20个Cookie;session没有大小限制,个数只跟服务器的内存大小有关。
(3)有效期与实现机制:cookie可长期有效存在;session依赖于cookie,过期时间默认为-1,只需关闭窗口该 session 就会失效。每个客户端对应一个session ,客户端之间的 session 相互独立;
十二、DNS解析过程
浏览器搜索自己浏览器的DNS缓存,若没有,则搜索本地操作系统中的DNS缓存和hosts文件。若没有,则操作系统将域名发送至本地域名服务器,本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则依次向根域名服务器、顶级域名服务器、权限域名服务器发起查询请求,最终返回IP地址给本地域名服务器。本地域名服务器将得到的IP地址返回给操作系统,同时自己也将IP地址缓存起来,操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来,浏览器得到域名对应的IP地址。
十三、谈谈IP地址和MAC地址
IP地址和MAC地址的区别:
IP地址是服务商给你的,mac地址是你的网卡物理地址;
IP地址局域网内可以随便更改,但是mac地址一般不能更改;
长度不同。IP地址为32位,MAC地址为48位;
寻址协议层不同。IP地址应用于OSI第三层,即网络层,而MAC地址应用在OSI第二层,即数据链路层。
IP地址和MAC地址的关系:
首先,IP 间的通信依赖 MAC 地址。
使用 ARP 协议凭借 MAC 地址进行通信:
在网络上,通信的双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。而在进行中转时,会利用下一站中转设备的 MAC 地址来搜索下一个中转目标。这时,会采用 ARP 协议(Address Resolution Protocol)。
ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址。
十四、拥塞控制和流量控制的区别
流量控制:流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收,防止分组丢失的。
所谓流量控制就是让发送方的发送速率不要太快,让接收方来得及接收。因为如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。TCP的流量控制是通过大小可变的滑动窗口来实现的。接收端将自己可以接收的缓冲区大小放入TCP首部中的“窗口大小”字段,通过ACK报文来通知发送端,滑动窗口是接收端用来控制发送端发送数据的大小,从而达到流量控制。
拥塞控制就是防止过多的数据注入网络中,使网络中的路由器或链路不致过载。发送方维持一个拥塞窗口cwnd 的状态变量。拥塞窗口的大小动态变化,取决于网络的拥塞程度,发送方让自己的发送窗口等于拥塞窗口。只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。 拥塞控制的方法主要有以下几种:慢启动、拥塞避免、快重传和快恢复。
十五、HTTP请求转发和重定向的区别
本质区别:
转发是服务器行为
请求转发特点:一次请求,浏览器地址不变,访问的是自己本身的 web 资 源,传输的数据不会丢失
重定向是客户端行为
重定向特点:两次请求,浏览器地址发生变化,可以访问自己 web 之外的 资源,传输的数据会丢失。
十六、URL和URI区别
URL,统一资源定位符,URL 其实就是我们平时上网时输入的网址,它标识一个互联网资源,并指定对其进行操作或获取该资源的方法。例如 http://xxxxx.cc/xxx/xxx 这个 URL,标识一个特定资源并表示该资源的某种形式是可以通过HTTP协议从相应位置获得。
URI,统一资源标识符,URL是URI的一个子集,两者都定义了资源是什么,而 URL还定义了如何能访问到该资源。URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。简单地说,只要能唯一标识资源的就是 URI,在URI的基础上给出其资源的访问方式的就是 URL。
十七、什么是阻塞和非阻塞,同步和异步
阻塞和非阻塞:调用者在事件没有发生的时候,一直等待事件发生,不能处理其他任务是阻塞。调用者在事件没有发生的时候,可以去处理别的事务这是非阻塞。
同步和异步:调用者循环查看事件有没有发生,这种情况是同步。调用者不用自己去查看事件有没有发生,而是等待注册在时间上的回调函数自己通知自己,这是异步。
十八、什么是阻塞和非阻塞,同步和异步
阻塞和非阻塞:调用者在事件没有发生的时候,一直等待事件发生,不能处理其他任务是阻塞。调用者在事件没有发生的时候,可以去处理别的事务这是非阻塞。
同步和异步:调用者循环查看事件有没有发生,这种情况是同步。调用者不用自己去查看事件有没有发生,而是等待注册在时间上的回调函数自己通知自己,这是异步。
十九、什么是SQL注入,如何防止SQL注入?
SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。
SQL注入总体思路
1、寻找到SQL注入的位置
2、判断服务器类型和后台数据库类型
3、针对不通的服务器和数据库特点进行SQL注入攻击
怎么防止sql注入?
1、不要图一时方便使用SQL语句直接拼接。
2、如果用SQL语句,那就使用参数化,添加Param。
3、尽可能的使用存储过程,安全性能高而且处理速度也快。
4、屏蔽SQL注入。