以下是笔者总结的Java笔试面试题中计算机网络部分,答案为笔者自己总结得出,未必完全正确,仅供参考
1.TCP连接的三次握手
第一次握手:客户端发送SYN包(seq=x),进入SYN_SENT(同步发送)状态
第二次握手:服务器收到SYN包,确认SYN并发送ACK包(ack=x+1),同时发送一个SYN包(seq=y),即SYN+ACK包,进入SYN_RECV(同步接收)状态
第三次握手:客户端收到SYN+ACK包,发送确认包ACK(ack=y+1),发送完毕后,客户端和服务器进入ESTABLISHED(连接成功)状态
A对B说,我有东西要发给你(SYN),建立下连接吧,B收到后说,好的,你再确认一下(ACK+SYN),我就建立连接,A收到就说,好了(ACK),连接建立成功
2.TCP断开连接的四次挥手
第一次挥手:客户端发送一个FIN包(seq=x),进入FIN_WAIT(结束等待)状态
第二次挥手:服务器收到FIN包,发回一个ACK包(ack=x+1),进入CLOSE_WAIT(关闭等待)状态
第三次挥手:服务器关闭客户端的连接,并发送一个FIN包(seq=y),进入LAST_ACK(最后确认)状态
第四次挥手:客户端发回ACK(ack=y+1)包确认,发送完毕后,连接断开
A对B,我已经没什么要发给你了(FIN),断开连接吧,B收到后说,好的知道了(ACK),接着又说,我也没什么要发给你了(FIN),你确认下就断开连接,A收到又说,好的(ACK),连接成功断开
3.需要三次握手的原因
为了防止失效的连接请求报文突然又传送到服务器产生错误。假如不三次握手,客户端发送连接确认给服务端就立即建立连接,如果有个连接请求阻塞了很久才到服务端,而此时本来已经关闭了连接的又重新建立了连接,然而等了很久都没有数据发送,这就会白白浪费资源
4.需要四次挥手的原因
确保数据能够完全传输。客户端发送了FIN给服务端后,只是说明客户端已经没有数据发给服务端了,而服务端还可能要给客户端发数据。假如发送FIN就立即断开连接,这就可能会丢失服务器发给客户端的数据
5.Http协议
Http协议即超文本传输协议,是一种基于TCP的应用层协议,还是一种无状态协议。用于服务器和客户端的数据传输,客户端和服务器使用URL来建立连接和传输数据。客户端发送Http请求给服务器,服务器根据请求返回Html、文本或多媒体文件给客户端
6.Https协议
Https协议是一种安全的Http协议。Http协议是一种明文传输的协议,存在被窃听,信息篡改等安全隐患,在Http协议的基础上加入了SSL或TLS协议,实现了数据的加密传输。因为加上了加密的协议,所以Https的响应速度会比Http慢很多。并不是所有情况下都需要使用Https协议,对于隐私的,重要的信息最好用Https协议,不重要的或者可以公开的信息就没有必要用Https协议
7.Http请求报文和响应报文
(1) 请求报文包括请求行,请求头,空行和请求体(GET请求没有请求体)
(2) 响应报文包括状态行,响应头,空行和响应体
8.Http请求常见状态码
(1) 200 OK,请求成功
(2) 404 Not Found,对应的URL上不存在资源
(3) 405 Method Not Allowed,请求不被允许,即请求方式错误
(4) 500 Internal Server Error,服务器内部错误,发现严重BUG,要及时修复
9.URL 和 URI
URI为统一资源标识符,URL则为统一资源定位符。URL实际上就是一种特殊的URI。URI除了包含URL,还包含URN(同一资源名称),它只是命名资源而不定位资源
10.GET请求与POST请求的区别
(1) GET请求一般用于获取服务器上的资源,是幂等的。POST请求一般用于对服务器上资源进行更新,非幂等的(幂等即每次请求返回结果一样)
(2) GET请求没有请求体,请求参数跟是在URL后面的,所以使用GET请求时请求参数用户是可以直接看到的。POST请求有请求体,请求参数放在请求体,对用户是不可见的。相对来说POST请求比GET请求更安全
(3) GET请求的参数长度有限制,这是因为URL长度有限导致的。POST请求的参数长度可以认为是无限制的
11.TCP 和 UDP的区别
(1) TCP是一种面向连接的可靠传输协议,UDP是面向无连接的不可靠传输协议
(2) TCP支持报文传输,还支持字节流的传输。而UDP协议只支持传输报文
(3) TCP数据报格式比较复杂,传输过程数据不容易丢失和出错,而UDP数据报格式较为简单,容易丢失
(4) TCP传输在接收端会进行重排,所以是有序的,UDP则不保证有序
(5) TCP速度慢,UDP速度快
(6) TCP有流量控制和拥塞控制,而UDP没有
UDP就跟发广播一样,能听到的就听,不能听到就算了。TCP是面对面谈话,确保对方一定要听到
12.TCP流量控制
通过滑动窗口方式实现流量控制。如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率与接收方的接收速率相匹配
13.TCP拥塞控制
在某段时间,对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏,这种情况就叫做拥塞
TCP的拥塞控制主要四个过程:
(1) 慢启动,一开始先不要发送大量的数据,首先探测下拥塞程度,然后慢慢加大拥塞窗口大小
(2) 拥塞避免,让拥塞窗口缓慢增长,把指数级别的增加变为线性增长
(3) 快速重传,发送方连续收到三个重复确认就立即重传
(4) 快速恢复,发生了数据丢失出现快速重传的时候,并不是重新的慢启动,而是直接执行拥塞避免
14.应用层协议有哪些
(1) DNS协议,域名解析系统。基于TCP和UDP的协议,通过DNS可以将域名转换成IP地址
(2) Http协议,超文本传输协议。基于TCP的协议,通过Http协议实现客户端和服务端的数据传输
(3) FTP协议,文件传输协议。基于TCP的协议,通过FTP协议达到相互传输文件的效果
(4) Telnet协议,远程终端协议。基于TCP的协议,通过Telnet协议可以对远程的终端进行控制
(5) SMTP协议,电子邮件协议。基于TCP的协议,通过SMTP协议可以发送电子邮件,SMTP通信的过程建立连接、邮件传送、连接释放
15.OSI参考模型与TCP/IP参考模型
(1) OSI参考模型由7层组成:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
(2) TCP/IP参考模型由4层组成:主机-网络层、网际层、传输层、应用层
(3) 对应关系中,OSI参考模型的物理层、数据链路层对应TCP/IP的主机-网络层,网络层对应网际层,传输层对应传输层,会话层、表示层、应用层对应应用层
16.DNS劫持和DNS污染
(1) DNS劫持:指用户访问一个域名时,DNS服务器故意将此地址指向一个错误的IP地址的行为。比如进入一个网站显示的却是另外一个网站的内容
(2) DNS污染:指用户访问一个域名时,国内的服务器(非DNS)监控到用户访问的已经被标记地址时,服务器伪装成DNS服务器向用户发回错误的地址的行为。比如国内不能访问Google、YouTube等
17.TCP粘包和拆包产生原因
(1) 应用程序写入数据的字节大小大于套接字发送缓冲区的大小
(2) 进行MSS大小的TCP分段
(3) 以太网的payload大于MTU进行IP分片
18.TCP粘包和拆包解决策略
(1) 消息定长
(2) 在包尾部增加回车或者空格符等特殊字符进行分割
(3) 将消息分为消息头和消息尾
19.TCP如何保证可靠传输
三次握手、四次挥手、超时重发、将数据截断为合理的长度、对失序数据进行重新排序、丢弃重复数据、拥塞控制、流量控制等
20.简述IP地址的分类
(1) A类,以0开头,7位表示网络位,24位表示主机位
(2) B类,以10开头,14位表示网络位,16位表示主机位
(3) C类,以110开头,21位表示网络位,8位表示主机位
(4) D类,以1110开头,用于因特网组播
(5) E类,以11110开头,保留
21.HTTP长连接与短连接
(1) 短连接是每次请求创建一次连接,长连接不必每次请求都创建连接
(2) HTTP1.0中,默认是短连接,如果一个WEB资源里面包含其它的WEB资源,使用短连接操作就较为繁琐,可以通过设置请求头Connection:Keep-Alive方式建立长连接。HTTP1.1,默认是长连接,只需连接一次就可以对应多次请求,为了避免不浪费资源,长连接应该设置一个时间限制
22.cookie 和 session的区别
(1) cookie由于把信息保存在客户端中。session把信息保存在服务器中
(2) cookie性能更高一点,速度较快,用户的信息存在各自的浏览器中,可以分担服务器的一部分存储工作。session速度较慢,所有用户的信息都存在服务器中,在高并发时必然影响服务器性能
(3) cookie有限制大小,在4K以内。session没有限制
(4) cookie对用户是透明的,安全性低,不重要的或者可以公开的信息保存在cookie。session对用户是不可见的,安全性高,重要信息应该保存在session
23.forward 和 redirect的区别
(1) forward为转发,进行forward操作后,请求URL不发生变化,并且会把请求的数据携带到下一个请求中。redirect是重定向,进行redirect操作后,请求URL是发生变化的
(2) forward是服务器内部请求转发,不可以请求到其它站点,redirect是服务器通知客户端重新请求,可以请求到其它站点
(3) forward速度快,redirect速度慢
forward好比A向B借钱,B没有,它找C借到并给A。redirect则是A向B借钱,B说没有,它叫A向C借
24.会话跟踪技术
cookie、session、URL重写、隐藏域嵌入到Html表单
25.常见请求头参数
(1) Accept,接收的类型
(2) Content-Type,内容类型
(3) User-Agent,请求的客户端的信息
(4) Authorization,授权码
(5) Cookie,客户端保存的数据
(6) Connection,指定连接
26.攻击网站的方法以及防御措施
(1) DDos攻击,分布式拒绝服务攻击。对服务器进行大量请求,占用服务器资源,使合法用户无法正常访问。防御措施:通过隐藏IP地址,或者拒绝使用IP地址访问
(2) XSS攻击,跨站脚本攻击。在Web页面中插入恶意html或js代码,当用户访问时,窃取用户输入的信息。防御措施:对用户的输入进行校验,把特殊字符进行转义处理
(3) CSRF请求,跨站请求伪造。攻击者盗用身份,以用户名义发送恶意请求。防御措施:用户关闭页面后及时清除cookie,增加防伪随机数
(4) SQL注入攻击。通过输入特殊字符串嵌入SQL语句提交,对数据库进行非法查询或更新。防御措施:不使用字符串拼接SQL,对用户输入的特殊字符串进行转义,不使用管理员权限连接数据库,隐私字段进行加密后存储