计算机网络面试专题
1.TCP,UDP介绍,差别,UDP保证可靠性 ?
TCP是面向连接的可靠传输 UDP是无连接的不可靠传输
TCP是头部消耗大最少20字节 UDP8字节
TCP是面向报文的 UDP是面向字节流的
TCP是只支持1对1通信 UDP可以1对多 多对一 多对多通信
2.简述TCP的三次握手四次挥手
三次握手:客户端发出一个报文头部SYN标志位为1,并发送一个sqn为x,此时客户端进入SYN—SEND状态,服务端收到连接请求回应一个报文,
其中标志位ACK确认号为1,SYN标志位为1,seq为y,ack为x+1,此时客户端进入SYN—received状态。客户端收到报文后,发送ACK确认号为1,
ack为y+1,seq为x+1。
四次握手: 客户端发出一个报文,其中标志位FIN为1,seq为x,客户端进入final-wait状态。服务端收到后发送ACK=1 ack=x+1 seq=y,
此时服务端进入Close-wait状态,此时服务端任然可以继续发送数据,等服务端发送完后发送一个FIN=1,ACK=1,seq=z,ack=x+1,
此时服务端进入Last-ACK状态。客户端收到后发送确认ACK=1,seq=x+1,ack=z+1。服务端收到后进入连接关闭状态,此时客户端进入
Time—wait状态,等待2个MSL时间后,连接关闭。
3、为什么要TIMEWAIT解释一下等待2个MSL?
因为如果服务端发给客户端的FIN没有收到客户端的回应会重新发送FIN断开连接请求,客户端等待这两个MSL是因为如果服务端没有收到断开连接的确认,
那么在这两个MSL时间内肯定会收到服务端重新发送的断开连接的报文,如果等待的时间内没有收到服务端的任何消息,那么说明服务端已经收到了客户端
确认断开连接的ACK报文。
(备注TCP标志位:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有DATA数据传输,RST表示连接重置。)
4.什么是SYN Flood攻击?如何避免?
有坏人他平凡发送三次握手的第一次握手,服务端给他发送SYN后,这个时候服务端进入SYN-received状态。但是它不进行第三次握手,所以服务端就
一直处于SYN-received状态,如果这样子请求很多就会找出很多的SYN-received状态,就是SYN Flood。
防范:使用Reset认证,它是利用的是TCP协议的可靠性,也是首先由DDOS防护系统来响应syn。防护设备收到syn后响应syn_ack,将Acknowledgement
number (确认号)设为特定值(记为cookie)。当真实客户端收到这个报文时,发现确认号不正确,将发送reset报文,并且sequence number
为cookie + 1。 而伪造的源,将不会有任何回应。这样我们就可以将真实的客户端IP加入白名单。
5.TCP/IP协议的可靠性是怎样保证的?(滑动窗口)
主要是停止等待协议和连续ARQ协议。
停止等待协议是最简单的可靠传输,因为它发送一个包就等待对方确认,收到确认后就发送下一个包,若超时就重发。
停止等待协议效率太低了,所以就基于流水线的原理有了连续ARQ协议,连续ARQ协议是维持了一个滑动窗口,位于发送窗口内的分组都可连续发送出去,
而不需要等待对方的确认,发送方每收到一个确认, 就把发送窗口向前滑动一个分组的位置。TCP每发送一个报文段,就对这个报文段设置一次计时器,
只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。
6、介绍一下超时重传
TCP每发送一个报文段,就对这个报文段设置一次计时器,只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。超时时间的选择一般
是TCP动态指定的,并不固定,但是一般是一个RTT即报文的往返时间。
7.TCP的拥塞控制
一般来说拥塞控制有慢开始、拥塞避免、快重传、快恢复四种算法。一般来说都是组合这几个算法达成拥塞控制的,主要的算法思想是逐步增加拥塞窗口
的大小。慢开始算法是指数增长,级每一次增长为上一次的2倍,当到达门限值的时候就转为拥塞避免算法,拥塞避免算法是一次增长一个窗口值,当出
现超时的时候,拥塞窗口会重新从1开始增长,门限值为之前最大拥塞窗口的一半(代价有点大,应该避免超时,所以有了快重传与快恢复算法)。快重
传规定如果没有收到一个包那就把此后所有的包的确认号都设置成丢失的那个包的序列号,当发送方出现3个重复的ACK时,说明有一个包丢失了,触发
快重传算法,立刻传丢失的包,此时拥塞窗口门限值为之前最大拥塞窗口的一半,但是是从门限值开始线性增长,并不是从1开始增长。快恢复算法就是
拥塞窗口不从1开始,从门限值开始。
8.为什么IPv4的IP地址还没用完?
因为我们每个人不一定都需要公网ip地址,基本上我们大多数用网的场景都是我们去访问别人,而不是别人访问我们,我们可以使用公网ip加局域网的方式。
即我们在家,在公司或者正常用网的情况下,路由器给我们分配的IP地址都是192.168.1开头的地址,该地址被tcp规定为特殊ip,那么我们访问192.168.1
开头的地址的时候路由器会根据规则去当前局域网连接,因为它一定不是公网ip。如果我们访问一个公网ip,路由器就会转发到对应的公网ip上形成网络通信。
那么别人怎么知道192.168.1.*是谁呢?这个是因为我们每一个局域网都有一个公网ip地址的出口,表面上我们使用的是局域网的地址,但是实际上我们包在
公网IP地址的路由器哪里会将源地址更改为路由器的公网ip地址然后与互联网进行通信。服务器发送回来的信息也会到这个公网IP地址这个地方,那么这个公
共出口的公网路由器怎么知道是哪一个192.168呢,路由器里面有个表,对应了局域网IP地址与MAC地址使用ARP协议进行解析,就能找到对应的192的主机了
9.网卡收到一条数据到进程处理数据,这之间经历了什么(中断的上半部下半部,网络层协议拆包)
物理层将其电信号翻译成数据链路层的帧,数据链路层会判断是不是直接的帧,并进行差错检测,然后对帧进行解码,去掉头尾然后传给网络层,网络层去掉
ip头传递给运输层,运输层将数据根据序号排序根据端口传递给应用层的进程。
10.介绍一下路由
路由其实就是发送方一次次转发,直到接收方,发送方的包到了一个路由器,路由器会对包进行解析,拿到目的mac地址和ip地址,然后查询路由表,查询
下一条的IP地址,然后从对应的物理端口将包发送给下一个路由器。到达最后一个路由器的时候根据ARP协议获取Mac地址发送给对应的主机。
11、HTTP中POST和GET的区别
GET的参数是放在请求URL里面,对应数据不安全,POST请求是放在请求体里面,数据相对安全。
一般用GET请求获取数据,POST请求提交数据。
GET请求可以保证幂等性,因为它基本上只有读操作,不会更改数据库等,post不保证幂等性,因为多次提交可能会对数据有影响。
GET传输数据有大小限制,POST没有,并且post可以传多种不同类型的数据,图片视频等等。
12、 HTTP的头部字段
请求报文包含三部分:
请求行:包含请求方法、URI、HTTP版本信息
请求首部字段
请求内容实体
响应报文包含三部分:
状态行:包含HTTP版本、状态码、状态码的原因短语
响应首部字段
响应内容实体
13、HTTP状态码
200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
301:永久性重定向
302:临时重定向
303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误
503:服务器正忙
500 Internal Server Error 服务端发生内部错误,无法完成请求。
501 Not Implemented 服务端不支持客户端的请求,无法完成请求。
502 Bad Gateway 作为网关或代理的服务器,从远端服务端接收到了一个无效的请求。用来说明服务端现在无法为请求提供服务,但是将来可以。什么时候资源会变为可用可包含在
503 Service Unavailable 服务端的Retry-After头部中。
504 Gateway Timeout 类似于408,只是作为网关或代理的服务器,未及时从远端服务端获取请求。
505 HTTP Version Not 服务端不支持请求的HTTP协议的版本,无法完成处理。
14 请求方式有哪些,都有什么区别?
GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
OPTIONS:查询相应URI支持的HTTP方法。
15 Http协议中Http1.0与1.1区别?
在http1.0中,当建立连接后,客户端发送一个请求,服务器端返回一个信息后就关闭连接,当浏览器下次请求的时候又要建立连接,显然这种不断建立连接的方式,会造成很多问题。
在http1.1中,引入了长连接的概念,通过这种连接,浏览器可以建立一个连接之后,发送请求并得到返回信息,然后继续发送请求再次等到返回信息,也就是说客户端可以连续发送多个请求,而不用等待每一个响应的到来。
16、HTTP头部可以包含二进制吗?
不可以吧,我没有遇到过
17、Http协议有那些特征?
1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态。
18、HTTP和HTTPS的区别
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
19、HTTPS的安全外壳是怎么实现的
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤。
(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信。