计算机网络常见面试题
1、每一层分别有什么常见协议,有什么用?为什么要分层
网络五层
从上往下
应用层:报文传输,最高层,为直接用户进程提供服务
传输层:数据段传输,tcp与udp就是在这一层,定义了一些传输数据的协议和端口号
网络层:主要是ip协议,以ip数据报文传输,两个主机系统之间提供连接和路径选择,也有差错检测等功能
数据链路层:帧传输,有纠错功能
物理层:比特流传输,属于底层
2、输入网址发生了什么?
https://mp.weixin.qq.com/s/hrkGg85mUYEy6PMUQZFn4w
整理的xmind
3、get请求与post请求的区别,还有put、delete等
一个http请求的三个部分:请求行 ,请求头、请求体(响应同)
get请求没有请求体吗?不是,get请求是请求体为空,把携带的参数带在url里面
4、http 1.0的、1.1的、2.0的区别
1.0-1.1
第一、长连接,众所周知,http一次请求一次响应,这样很耗费资源,这样http在请求头里加了,http1.0中默认是关闭的,需要在http头加入”Connection: Keep-Alive”,才能启用Keep-Alive;
http 1.1中默认启用Keep-Alive,如果加入”Connection: close “才关闭。目前大部分浏览器都是用http1.1协议,也就是说默认都会发起Keep-Alive的连接请求了
第二、新增状态码 ,410资源被永久重定向
第三、host域名,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
第四、缓存处理,较为复杂,不解释
https://www.cnblogs.com/echolun/p/9419517.html
第五、资源优化,当请求不需要全部资源,返回206
1.1-2.0
二进制分帧
首部压缩
多路复用
请求优先级
服务器推送
5、http的状态码
100:响应代码仅在与HTTP服务器沟通时使用。让对端继续发数据
200:响应成功
204:若服务器拒绝对PUT、POST或者DELETE请求返回任何状态信息或表示,那么通常采用此响应代码。服务器也可以对GET请求返回此响应代码,这表明“客户端请求的资源存在,但其表示是空的”。注意与304("Not Modified")的区别。204常常用在Ajax应用里。服务器通过这个响应代码告诉客户端:客户端的输入已被接受,但客户端不应该改变任何UI元素。
301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
302 found,临时性重定向,表示资源临时被分配了新的 URL
303 see other,表示资源存在着另一个 URL,应使用 GET 方法定向获取资源304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
307 temporary redirect,临时重定向,和302含义相同
400 bad request,请求报文存在语法错误
401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
403
表示对请求资源的访问被服务器拒绝
404
表示在服务器上没有找到请求的资源
409
此响应代码表明:你请求的操作会导致服务器的资源处于一种不可能或不一致的状态。例如你试图修改某个用户的用户名,而修改后的用户名与其他存在的用户名冲突了。
响应报头:若冲突是因为某个其他资源的存在而引起的,那么应该在Location报头里给出那个资源的URI。
实体主体:一个描述冲突的文档,以便客户端可以解决冲突。
500
如果在执行请求处理代码时遇到了异常,它们就发送此响应代码。
503
此响应代码表明HTTP服务器正常,只是下层web服务服务不能正常工作。最可能的原因是资源不足:服务器突然收到太多请求,以至于无法全部处理。由于此问题多半由客户端反复发送请求造成,因此HTTP服务器可以选择拒绝接受客户端请求而不是接受它,并发送503响应代码。
响应报头:服务器可以通过Retry-After报头告知客户端何时可以重试。
6、https的过程
https://www.jianshu.com/p/14cd2c9d2cd2
7、tcp三次握手、四次挥手
注意几个点
首先,每一个数据发送后,状态的变化,比如syn_send到十一年recvd
其次,为什么要三次,我改一下行不行,两次就好
最后,四次握手,time_WAIT 状态为什么要等待两个最大报文发送时长(2msl)
还有一个如果已经建立了连接, 但是客户端突发故障了怎么办?
TCP设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
8、tcp、udp的区别,关于udp不可靠的拓展
UDP 比 TCP 快在哪里?
【解析】使用 UDP 传输数据,不用建立连接,数据直接丢过去即可。至于接收方,有没有在监听?会不会接收?那就是接收方的事情了。UDP 甚至不考虑数据的可靠性。至于发送双方会不会基于 UDP 再去定制研发可靠性协议,那就是开发者的事情了。所以 UDP 快在哪里?UDP 快在它足够简单。因为足够简单,所以 UDP 对计算性能、对网络占用都是比 TCP 少的。
大而全的协议用起来舒服,比如 TCP;
灵活的协议方便定制和扩展,比如 UDP。二者不分伯仲,各有千秋。
#学习路径#