文章目录
#1、计算机网络的各层作用
计算机网络体系可以分为三种,OSI七层模型,IP/TCP四层模型和五层模型
-
OSI七层模型:物理层、数据链路层、网络层、运输层、会话层、表示层、应用层 -
TCP/IP五层模型:物理层、数据链路层、网络层、运输层、应用层 -
应用层:为应用程序提供交互服务。应用层的协议有很多,比如域名系统DNS,HTTP协议,SMTP协议 -
运输层:主要为两个主机之间的通信提供数据传输的服务。主要有TCP和UDP两种协议 -
网络层:提供合适的路由和交换节点,确保数据即时传送,有IP协议 -
数据链路层:将网络层传送来的IP数据包组装成帧,在相邻的链路上传输 -
物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和通信手段的差异。
2、详细介绍一个TCP的三次握手机制 (1)第一次握手:客服端请求建立连接,向服务端发送一个同步报文(SYN),同时选择一个随机数seq=x作为初始序列号,并进入SYN_SENT状态,等待服务器确认。 (2)第二次握手:服务端收到了连接请求报文后,如果同意建立请求,就向客户端发送一个同步确认报文(SYN=1,ACK=1),确认号为ack=x+1,同时选择一个随机数seq=y作为初始序列号,此时服务器进入SYN_RECV状态。 (3)第三次握手:客户端收到服务端确认后,向服务端发送一个确认报文(ACK=1),确认号ack=y+1,序列号为seq=x+1,客户端和服务端进入建立连接状态,完成三次握手。
3、为什么是三次握手,而不是两次 (1)防止已经过期的连接请求报文突然到达服务端,因而产生错误和资源浪费 (2)三次握手才能让双方确认自己和对方的发送和接收能力正常 (3)三次握手才能告诉对方自己的初始序列号,并确认收到对方的初始序列号。
4、什么是SYM洪泛攻击?如何防范 SYN洪泛攻击属于DOS攻击的一种,它利用TCP协议的缺陷,发送大量的半连接请求,耗费CPU和内存资源。 原理:
- 在服务器发送SYN/ACK包之后,收到客户端ACK包之前的TCP连接状态称为半连接,如果未接受到客户端的ACK包,就会不断的重复发送请求直到成功。
- SYN攻击者在短时间内伪造大量不存在的IP地址,向服务器不断的发送SYN包,服务器回复确认包,并等待客户确认,但是源地址是不存在的,所以服务器需要不断的发送直到超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN包被丢弃,目标系统运行缓慢,严重引起网络拥塞和瘫痪。
优化方式 - 缩短SYN Timeout时间
- 记录IP,若连续收到某个IP的重复SYN报文,从这个IP地址来的包都被丢弃。
5、详细说一下4次挥手过程 (1)第一次挥手:客户端发送一个FIN,用来关闭客户端和服务端之间的数据传送,客户端进入FIN_WAIT_1状态 (2)第二次挥手:服务端收到FIN之后,发送一个ACK给客户端,确认序号为收到序号+1,服务端进入CLOSE_WAIT状态,此时TCP处于半关闭状态,即客户端已经没有想要发送的数据了,但服务端若发送数据,客户端扔要接收。 (3)第三次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传输,服务端进入LAST_ACK最终确认状态 (4)客户端收到FIN后,进入了TIME_WAIT时间等待状态,经过2*MSL的时间后进入CLOSED状态,接着发送ACK给服务端,服务端接收到ACK之后立即进入CLOSED状态。
6、为什么挥手需要4次 因为服务端在收到客户端FIN数据包之后,服务端可能还有数据没有发完,不会立即关闭。 所以先发ACK,再发FIN
7、为什么释放要等待2MSL MSL即报文最大生存时间,主要有2个原因 (1)确保ACK报文能够到达服务端,从而使服务端正常关闭连接 第四次挥手时,客户端第四次挥手的 ACK 报文不一定会到达服务端。服务端会超时重传 FIN/ACK 报文,此时如果客户端已经断开了连接,那么就无法响应服务端的二次请求,这样服务端迟迟收不到 FIN/ACK 报文的确认,就无法正常断开连接。 2个MSL是客户端ACK报文超时加服务端FIN报文超时,之后客户端再重传一次ACK报文,重新启动2MSL计时。 (2)保证所有的报文已经小时,防止已失效的请求报文出现在之后的连接上。
14、TCP和UDP的区别 (1)UDP在传送数据之前不用建立连接,远地主机在收到UDP报文之后不需要给出任何确认。UDP报文是不可靠的数据传输,但是传输效率快,一般用于即时通信。 (2)TCP是提供面向连接的服务。在传送数据之前必须建立连接,TCP不提供广播或多播服务。由于TCP提供面向连接的可靠数据传输的服务,对系统资源要求较多。TCP适用于文件传输、发送和接收邮件、远程登录场景。
15、简述TCP粘包现象 (1)发送方发送了多包的数据到达接收方时粘成了一包 (2)可能是发送方将多次间隔较小、数据量较小的数据,合并成一个大数据块,然后进行封包。 也可能是TCP接收数包到缓存的速度大于应用程序从缓存中获取包的速度,这样多个包被缓存,就可能连到一起。 (3)固定发送信息长度,或在两个信息之间加入分隔符。
15、TCP如何保证可靠性 TCP主要使用了校验和、序列号/确认应答、滑动窗口、拥塞控制、超时重传、流量控制等方法
- 校验和:通过校验和的方法,接收端可以检测出来数据是否有差错和异常,如果有异常可以直接丢掉TCP段,重传。
- 序列号/确认应答:TCP把传送的包编号,接收端收到包后并排序,然后把有序的数据传给应用层。接收端收到数据后,发送ack报文确认收到,ack报文中包含带有对应的确认序列号,告诉发送方,接收到哪些数据,下次数据从哪里发送。
- 超时重传:是指发送数据到接收到数据的时间,如果超过这个时间就认为是丢包了,就重新传送。最大超时时间是动态计算的。
- 拥塞控制:当网络拥塞时,减少发送的数据。
- 流量控制:TCP连接的双方都有一个固定大小的缓冲池,TCP接收端只允许发送端发送接收端缓冲池可以接纳的数据,当接收端来不及处理发送端发送的数据时,就会提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议(TCP利用滑动窗口实现流量控制)
- ARQ协议:每发送完一个分组,就等待对方确认后,继续发送下一个分组。
16、详细讲一下拥塞控制 TCP一共使用了4种算法来实现拥塞控制
- 慢开始(slow-start):不要一开始就发送大量的数据,而是由小到达增加拥塞窗口的大小。1-2-4-8
- 拥塞避免:拥塞避免算法可以让拥塞窗口缓慢增长,即每经过一个往返时间RTT,拥塞窗口cwnd加1,使拥塞窗口按线性缓慢增长。
- 快速重传:可以剔除一些不必要的拥塞报文,提高吞吐量。比如接收方在收到一个失序的报文段后,就会立刻发出重复确认,而不要等到自己发送数据时确认。发送方只要一连收到3个重复的确认就应当立即重传对方尚未收到的报文段,而不必等到超时重传。
- 快速恢复:当发送方连续收到3个重复确认时,就把ssthresh减半(主要为了避免拥塞控制),然后执行拥塞避免算法。
17、简述TCP协议的滑动窗口 滑动窗口是传输层用来控制流量的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的速度,防止发送方发送速度过快导致自己被淹没。
17、用户输入URL到显示页面的整个过程
- DNS域名解析:浏览器查询DNS,获取域名对应的IP地址
- TCP连接:浏览器获得域名对应的IP地址后,浏览器向服务器请求建立连接,发起三次握手
- 发送HTTP请求:TCP连接建立起来后,浏览器向服务器发送HTTP请求
- 服务器处理请求并返回HTTP报文:服务器收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理的结果和相应的视图传给浏览器。
- 浏览器解析渲染页面:浏览器解析并渲染视图,若遇到js.css文件及图片静态资源,就重复上诉步骤向服务器请求这些资源。浏览器根据其请求到的资源来渲染页面,最终向用户呈现一个完整的页面。
- TCP断开连接:
24、DNS寻址 先查找浏览器缓存,如果没命中,查找系统缓存,即本机的host文件。如果没命中,查询路由器缓存,如果没命中,请求本地域名服务器解析域名,如果没命中,就去根服务器进行查询。没有命中就返回顶级域名服务器IP给本地DNS服务器。本地DNS服务器请求顶级域名服务器进行解析,没有命中就返回主域名服务器给本地DNS服务器。本地DNS服务器请求主域名服务器解析域名,将结果返回给本地域名服务器。本地域名服务器缓存结果并反馈给客户端。
17、HTTP1.0和1.1的区别
- 缓存处理:在HTTP1.0中主要使用了header里的IMS(if-Modified-Since),Expires来作为缓存判断的标准,HTTP1.1加入了更多的缓存控制策略,如Entity tag,If-Unmodified-Since,If-Match等更多可供选择的缓存头来控制缓存策略
- 带宽优化及网络连接的使用:HTTP1.0中存在浪费带宽的现象,比如只要某个对象的一部分,服务器却把整个对象发送过来,并且不支持断点续传的功能。HTTP1.1则在请求头中加入了range头域,它允许只请求资源的某个部分,返回码是206,这样方便开发者自由的选择以便充分利用带宽和连接。
- 错误通知的管理:在HTTP中新增了24个错误状态响应码,如409表示请求的资源与当前资源的状态发生冲突。
- 长连接:HTTP1.1默认开启长连接,在一个TCP连接上可以处理多个HTTP请求和响应,减少了建立和关闭的消耗和延迟,在http1.1中默认开启Connection:keep alive,一定请求http1.0每次都要建立连接的缺点。
18、HTTP2.0和1.X的区别 (1)新的二进制格式:1.X是基于文本的,而2.0的协议解析是采用二进制格式。 (2)多路复用,即共享连接,每一个request都是用作连接共享机制的,一个连接上有多个request。
18、说明一下http和HTTPS的区别 (1)http是明文传输,HTTPS是加密的安全传输 (2)http的连接很简单,没有状态。HTTPS是SSL加密的传输,身份认证的网络协议,相对http传输比较安全。 (3)连接的端口不一样,http是80,HTTPS是443 (4)HTTPS协议需要到ca申请证书,需要一定的经济成本。
19、HTTPS的优缺点 优点 (1)传输过程中使用密钥加密,安全性更高 (2)可以认证用户和服务器,确保数据发送到正确的用户和服务器 缺点 (1)握手阶段延时较高(还要加个SSL握手) (2)HTTPS部署成本高,需要花钱买证书,加解密操作会占用CPU资源。
20、HTTPS的连接过程 (1)客户端发送请求https连接 (2)服务器返回加密公钥,通常是SSL证书 (3)客户端通过SSL证书解析出公钥,然后随机生成一个key,通过公钥加密这个key传给服务器(因为只有服务器的私钥才能读出这个key) (4)服务器通过私钥读出这个key (5)客户端通过这个key来加密数据 (6)服务器通过key来解密数据 简单来说SSL加密的方式就是通过一个密钥加密另一个密钥(key),然后再使用被j加密的密钥加密数据 SSL用到了 对称加密+非对称加密+CA证书
20、HTTP状态码 (1)1XX:接收的请求正在处理 (2)2XX:请求正常处理完毕 (3)3XX:重定向,要完成的请求必须进行更进一步的操作 (4)4XX:客户端错误,请求有错误或者请求无法实现 (5)5XX:服务器端错误,服务器未能实现合法请求。 常见状态码的详细说明 200 OK:客户端请求成功 206 partiial content:服务器正确处理部分get请求,实现断点续传或者同时分片下载,请求必须包含range请求头指示客户端希望得到的范围。 301 永久重定向:表示请求的资源被分配了新的URL,之后应使用新的url 302 临时重定向:表示请求的资源被分配了新的URL,希望本次访问使用新的URL 400 bad request: 客户端请求的语法有错误,不能被服务器所理解 403:服务器收到请求,但是拒绝提供服务 404:请求的资源不存在,输入了错误的URL 500:服务器发生了不可预期的错误 503:服务器当前不能处理客户端的请求,一段时间后可能恢复。
21、简述http短连接与长链接的区别 指的是http底层TCP的连接 (1)短连接:客户端与服务器每次进行一次http连接操作,就进行一次TCP连接,连接结束后关闭TCP连接 (2)长连接:当一个网页打开后,客户端与服务器用于传输http数据的TCP连接不会关闭,客户端再次访问的时候会继续使用这个连接。
22、简述http协议 http是超文本传输协议,它是基于TCP协议的应用层传输协议,即客户端与服务器端用于数据传输的一种规则。http是一种无状态的协议。
23、http请求报文和响应报文包括哪些内容
请求报文 客户端将一个请求报文发送给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放在响应报文返回给客户端。 请求报文结构包含请求行,请求头部,空行和请求数据
- 请求行包含了请求方法,URL、协议版本
- 请求头部,用来说明服务器要使用的附加信息。包含了一些访问的域名、用户代理、cookie等信息
- 空行:请求头部后的空行是必须的
- 请求正文:就是http要请求的数据,get是空
服务器响应消息 http响应也由4个部分组成,分别是:状态行,消息报头,空行,响应正文
- 状态行:包括协议版本,状态码和回应短语
- 消息报头:发送响应的时间,回应数据的格式等信息
- 空行
- 响应正文:就是响应的具体数据
25、简述cookie http协议是无状态的,为了实现更复杂的逻辑,http1.1引入了cookie来保存状态信息。cookie是服务端产生的,然后发送给客户端保存。当客户端再次访问的时候,服务端通过cookie可以知道是哪个客户端,以此可以做个性化推送和免密码登录等。
26、简述session session用于标记特定的客户端信息,存放在服务端的文件里。一般客户端带着cookie访问服务端,服务端可以从cookie里的session id从整个session中查找到服务器记录客户端的信息。
27、cookie和session的区别 (1)cookie存放在客户端的浏览器上,session存放在服务器上 (2)cookie不是很安全,如果注重安全性就要使用session (3)session会在一定的时间内保存在服务器上,当访问增多会比较占用服务器的性能,如果要减轻服务器压力,就最好使用cookie (4)单个cookie的大小限制是4K,所以不能存放太多东西
28、转发与重定向
转发是服务器行为,重定向是客户端行为 (1)转发是服务器直接向目标地址访问URL,将相应的内容读取之后发给浏览器。地址链URL不变。转发页面和转发到的页面可以共享request里面的数据。效率高,可用于用户登录之后把角色转发到相应的模块。 (2)重定向是利用服务器返回的状态码来实现的,如果服务器返回301,302,浏览器会重新请求资源,地址链URL会改变,跳转到其他网站,且不能共享数据。
|