计算机网络面试总结

1. 网络结构

1.1 计算机网络有哪些结构?

计算机网络一共有3种模型。

  1. OSI七层结构
  2. TCP/IP结构
  3. 五层协议结构

在这里插入图片描述

OSI是Open Systems Interconnect,也就是开放的互联系统,将复杂的互联网系统划分为不同块,方便处理。实际应用中,并没有采用这个理论模型,而是使用TCP/IP协议的四层模型。而5层模型是一个理论上的网络通信模型,方便教学的时候理解,实际上并不存在。

1.2 计算机网络中各层分别有什么作用?

(1)应用层

应用层的任务是通过应用进程间的交互来完成特定网络应用,常见的协议有域名系统DNS,万维网应用的HTTP协议,支持电子邮件的SMTP协议。把应用层交互的数据单元称为报文

(2)运输层

为两台主机进程之间的通信提供**通用的数据传输服务。**主要包含两种协议:

  • 传输控制协议 TCP(Transmisson Control Protocol)。提供面向连接的,可靠的数据传输服务。
  • 用户数据协议 UDP(User Datagram Protocol)。提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。

(3)网络层

使用IP协议。网络层有两个任务:

  • 把运输层产生的报文段或用户数据报封装成分组和包进行传送。在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报 ,简称 数据报。注意:不要把运输层的用户数据报UDP和网络层的IP数据报弄混。
  • 选择合适的路由,找到目的主机

(4)数据链路层

两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装程帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。

(5)物理层

物理层的任务就是透明地传输比特流,换句话说实际电路传送后比特流没有发生变化。

2. TCP/IP协议

2.1 描述一下TCP/IP协议的结构

在这里插入图片描述

2.3 TCP和UDP的区别?

简单来说:

  • TCP:面向连接,面向字节流,可靠,传输慢,有流量控制阻塞控制。
  • UDP:广播形式不需要连接,面向报文,不可靠,传输快,无流量控制阻塞控制。

解释一下报文和字节流的区别:

  • 字节流:发送次数和接收次数可以不相同,比如向水池倒了20盆水,可以开水龙头一次性全放出。
  • 报文:发送次数和接收次数必须相同

两者的应用场景:

  • TCP:邮件,远程登录,文件传输等对准确性要求较高的地方
  • UDP:及时通信,比如QQ,网络电话等。

2.4 三次握手和四次挥手

https://jiangren.work/2019/08/01/Socket%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E5%8E%9F%E7%90%86/

2.4.1 网络模型

TCP/IP模型,又称传输控制协议/网际协议(Transmission Control Protocol/Internet Protocol)

简单来说,此协议的通信过程如同数据出栈入栈的过程。

  • 入栈:数据发送方每层不断地封装头部和尾部,向中间添加传输信息
  • 出栈:数据接收方每层不断拆除头部尾部,读取中间的传输信息

TCP/IP协议借鉴了OSI参考模型(Open System Interconnect),主要针对计算机网络体系。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Mi6ASe0-1595993283901)(https://i.bmp.ovh/imgs/2019/07/ed88f97317decd70.png)]

  • 应用层:具有HTTP和FTP等协议
  • 传输层:具有TCP和UDP(User Datagram Protocol)用户数据报协议
  • 网络层:包含了IP协议
  • 数据链路层:也称网络接口层,为等待传送的数据加入一个以太网协议头,为传输做好准备

如果用发快递作比喻

  • 应用层:帮客户打包
  • 传输层:从快递点送到集散中心
  • 网络层:集散中心确定将要发送的地址
  • 数据链路层:将小包裹打包成集装箱(装帧),由此控制发送流量等信息
  • 物理层:高速路、铁路送走
2.4.2 Socket原理

socket是应用层传输层之间的抽象层,他是一组接口,将复杂的传输层和网络层协议隐藏到socket接口后面

img

socket是从Unix/Linux引入的概念,而Unix/Linux的哲学就是:一切皆文件,都可以用”open—>write/read—>close”模式进行操作。同样的,socket的思路也是打开、读写IO、关闭。

三次握手

所谓三次握手是指建立一个TCP连接时,需要客户端和服务器发送3个包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PY76EaVT-1595993283903)(https://i.bmp.ovh/imgs/2019/07/8dabc100eb0549e0.png)]

名词解释:

  • SYN:Synchronize,同步标志位,为1时表示序列号有效
  • ACK:Acknowledgment,确认标志位
  • seq:Synchronize Sequence Number,同步序列号
  • ack:确认序列号

握手过程:

  1. 第一次握手:客户端发送SYN标志为1的包,以及同步序列号x,并指明打算连接的服务器端口。此时,connect进入阻塞状态。
  2. 第二次握手:服务器收到后,发送SYN和ACK标志为1的包,同时也发送一个自己的同步序列号y,外加一个确认序列号ack=x+1。此时accept进入阻塞状态。
  3. 第三次握手:客户端收到后,再次发送ACK=1,以及同步序列号seq和确认序列号ack,与此同时,connect返回。当服务器收到ACK=1时,accept返回。
四次挥手

中断连接时需要发送4个包,此时客户端和服务器均可主动发起挥手操作,只需要调用close()函数即可。

在这里插入图片描述

B收到FIN结束消息时,干两件事:发送确认标志和通知其他进程准备关闭(这也是为什么要多一次挥手)。当准备完毕时,发送FIN。

A收到FIN时,也干两件事:发送确认标志和等待2MSL(Maximum Segment Lifetime)

2.4.3 常见问题

为什么不能用两次握手连接

三次握手完成两个重要功能:

  • 双方都知道彼此已经准备好
  • 确认彼此的序列号

假设只有两次握手,A向B发送连接请求,B收到后回复消息,B认为此时已经连接成功,开始发送数据。然而,如果B的回复消息丢失了,A没有收到确认消息,只有再次发送连接请求,而此时B有在向A发送数据,这样就会造成死锁

为什么连接是三次握手,而关闭时是四次?

关闭连接时,服务端需要回复两次

  • 第一次告诉客户端,我已经收到了你的请求了,但我的剩余报文还没有处理完,等一等。客户端收到后不再发送请求,开始默默等待。
  • 第二次告诉客户端处理完成。

为什么TIME_WAIT状态需要经过2MSL?

2MSL是一次发送和回复的最大时间,客户端最后一次发送ACK可能会丢失,如果此时冒然关闭,会导致服务器没收到ACK,然后一直发一直发。所以需要等2MSL,如果超过这个时间,都还没有收到服务器的信息,说明已经完成,可以关闭。

2.5 TCP协议如何保证可靠行

(1)采用三次握手四次挥手保证建立的传输信道是可靠的

(2)采用了ARQ自动重传请求协议数据传输的可靠性

(3)采用滑动窗口协议进行流量控制

(4)使用慢开始拥塞避免快重传快恢复来进行拥塞控制

2.6 TCP协议如何进行流量控制?

控制流量的前提当然需要保证正确率,因此首先要引入ARQ协议。

无差错时,A向B发送分组M1,B收到M1后向A回复,A收到回复后,发送下一个M2……

img

如果出现差错,B没有收到信息,自然不会回复,A等待超时后,自动重传一个信息M,这就是所谓的ARQ。

停止等待ARQ协议信道利用率太低,所以需要使用连续ARQ协议来进行改善。这个协议会连续发送一组数据包,然后再等待这些数据包的ACK。

img

连续ARQ协议通常是结合滑动窗口协议来使用的,发送方需要维持一个发送窗口,如下图所示:

在这里插入图片描述

位于发送窗口内的5个分组都可以连续发送出去,而不需要等待对方的确认,这样就提高了信道利用率。发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。

接收方一般都是采用累积确认的方式。收到几个分组后,对按序到达的最后一个分组发送确认。

下载时我们的速度一般都是由慢变快,原因就是拥塞控制。

2.7 TCP协议如何进行拥塞控制?

网络拥塞是指在分组交换网络中传送分组的数目太多时,由于存储转发节点的资源有限而造成网络传输性能下降的情况。

常见的拥塞控制有:

  • 慢开始
  • 拥塞避免
  • 快重传
  • 快恢复

发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量。当cwndssthresh时,改用拥塞避免算法。

**慢开始:**不要一开始就发送大量的数据,由小到大逐渐增加拥塞窗口的大小。

**拥塞避免:**拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1而不是加倍。这样拥塞窗口按线性规律缓慢增长。

快重传:我们可以剔除一些不必要的拥塞报文,提高网络吞吐量。比如接收方在收到一个失序的报文段后就立即发出重复确认,而不要等到自己发送数据时捎带确认。快重传规定:发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
在这里插入图片描述

快恢复:主要是配合快重传。当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半(为了预防网络发生拥塞),但接下来并不执行慢开始算法,因为如果网络出现拥塞的话就不会收到好几个重复的确认,收到三个重复确认说明网络状况还可以。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2oGtljUT-1595992729451)(https://uk-1259555870.cos.eu-frankfurt.myqcloud.com/20200214130136.png)]

3. DNS协议和ARP协议

为什么这两个要放在一起说呢?因为这两个协议都是用于地址间的转化,都是起到了翻译官的职责。

3.1 DNS解析过程是什么?

DNS (Domain Name System) 是 域名系统 的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于 TCP/IP 网络,它从事将主机名或域名转换为实际 IP 地址的工作,类似于翻译官

DNS查询时优先考虑本地的Host文件本地的DNS解析器是否保留有缓存映射,如果没有就向上一级请求。依次按照DNS根服务器,DNS顶层服务器,DNS管理方服务器的顺序请求。

在这里插入图片描述

所谓递归查询就是变更查询者,迭代查询则没有变更:这个例子中查询者由客户端变为了本地DNS服务器,所以是递归查询。

3.1 什么是MAC地址?

MAC地址是数据链路层和物理层使用的地址是硬件地址,IP地址网络层和以上各层使用的地址,是一种逻辑地址。在发送数据时,数据从高层到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成了MAC帧。MAC帧在传送时使用的源地址和目的地址都是硬件地址。

在这里插入图片描述

3.2 ARP协议工作机制是什么?

ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址

在每台安装有TCP/IP协议的电脑或路由器里都有一个ARP缓存表,表里的IP地址与MAC地址是一对应的,如下表所示。

在这里插入图片描述

解析MAC地址时,主机A首先在其ARP高速缓存中查找有无主机B的IP地址。

如果没有就就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址

在这里插入图片描述

收到后在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。并且采用LRU机制,及时淘汰。

4. HTTP协议

4.1 HTTP常见的状态码有哪些?

在这里插入图片描述

4.2 HTTP协议和其他协议之间的关系是什么?

HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。如果TCP是高速路,HTTP就是卡车。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们能方便地使用TCP/IP协议。

4.3 解释一下HTTP长连接和短连接

短连接:客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。

长连接:客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。有一个保持时间。

4.4 HTTP和HTTPS的区别

HTTP:运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份

HTTPS:Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP

4.5 GET和POST的区别

  1. GET用于从服务器获取资源,POST用于更新服务器的资源
  2. GET不会改变服务器的资源,而POST会
  3. GET请求的数据会附在URL之后,比如http:localhost:8080/id=101?,而POST的数据则是放在请求体中。因此,GET不安全,GET的长度受限制。

4.6 Cookie和Session的区别

Cookie和Session都是客户端与服务器之间保持状态的解决方案,具体来说,cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

Cookie实际上是一小段文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器,服务器检查该Cookie,以此来辨认用户状态。

Session的区别在于,会话状态完全保存在服务器。客户端请求服务器,如果服务器记录该用户状态,就获取Session来保存状态,这时,如果服务器已经为此客户端创建过session就按照sessionid把这个session检索出来使用。服务器Session常常依赖于Cookie机制检索ID,但Cookie被禁用时也有其他方法比如URL重写机制。

4.7 HTTP请求报文和响应报文的格式

请求报文格式:

  1. 请求行(请求方法+URI协议+版本)
  2. 请求头部
  3. 空行
  4. 请求主体
GET/sample.jspHTTP/1.1 请求行
Accept:image/gif.image/jpeg, 请求头部
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate

username=jinqiao&password=1234 请求主体

响应报文:

  1. 状态行(版本+状态码+原因短语)
  2. 响应首部
  3. 空行
  4. 响应主体
HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112

<html>
    <head>
        <title>HTTP响应示例<title>
    </head>
    <body>
        Hello HTTP!
    </body>
</html>

4.8 HTTP1.1和2.0

1.1新功能

  • 支持长链接
  • 通过虚拟站点技术能够使不同域名配置在同一个IP地址的服务器上

2.0新功能

  • 可以使用同一个连接并行发送多个请求和相应,可以承接双向数据流
  • 允许设定数据流中不同资源的优先级,明确资源处理的先后顺序
  • 打破了请求-响应的束缚,除了最初的请求响应外,服务器还能向客户端推送额外的资源(客户端没有明确要求的情况下)

4.9 http1.0 和http1.1

  1. 长连接 : 在 HTTP/1.0 中,默认使用的是短连接,也就是每次请求都要重新建立一次连接。HTTP 是基于 TCP/IP 协议的,每一次建立或者断开连接,都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。HTTP 1.1 起,默认使用长连接 Connection: keep-alive。 HTTP/1.1 的持续连接,有非流水线方式和流水线方式 。流水线方式,是客户在收到 HTTP 的响应报文之前,就能接着发送新的请求报文;与之相对应的非流水线方式,是客户在收到前一个响应后才能发起下一个请求;
  2. 错误响应码:在 HTTP 1.1 中,新增了 24 个错误状态响应码,如 409(Conflict):表示请求的资源与资源的当前状态发生冲突;410(Gone):表示服务器上的某个资源被永久性的删除;
  3. 缓存处理:HTTP 1.0 中,主要使用 header 头里的 If-Modified-SinceExpires 来做为缓存判断的标准;HTTP 1.1,则引入了更多的缓存控制策略,如 Entity tagIf-Unmodified-Since, If-Match, If-None-Match 等;
  4. 带宽优化及网络连接的使用:HTTP 1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象传送了过来,并且不支持断点续传功能;HTTP 1.1 中,则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样方便开发者自由的选择,以便于充分利用带宽和连接。

4.10 http中的方法:

HTTP/1.0

HTTP/1.0支持:GETPOSTHEAD三种HTTP请求方法。

HTTP/1.1

HTTP/1.1新增了:OPTIONSPUTDELETETRACECONNECT五种HTTP请求方法。

GET会方法请求指定的页面信息,并返回响应主体,GET请求会显示请求指定的资源。一般来说GET方法应该只用于数据的读取,而不应当用于会产生副作用的非幂等的操作中。

POST请求会 向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据会被包含在请求体中。POST方法是非幂等的方法,因为这个请求可能会创建新的资源或/和修改现有资源。

HEAD方法与GET方法一样,都是向服务器发出指定资源的请求。但是,服务器在响应HEAD请求时不会回传资源的内容部分,即:响应主体。这样,我们可以不传输全部内容的情况下,就可以获取服务器的响应头信息。HEAD方法常被用于客户端查看服务器的性能

OPTIONS请求与HEAD类似,一般也是用于客户端查看服务器的性能。 这个方法会请求服务器返回该资源所支持的所有HTTP请求方法,该方法会用’*'来代替资源名称,向服务器发送OPTIONS请求,可以测试服务器功能是否正常。JavaScript的XMLHttpRequest对象进行CORS跨域资源共享时,就是使用OPTIONS方法发送嗅探请求,以判断是否有对指定资源的访问权限

DELETE请求用于请求服务器删除所请求URI(统一资源标识符,Uniform Resource Identifier)所标识的资源。DELETE请求后指定资源会被删除,DELETE方法也是幂等

PUT请求会身向指定资源位置上传其最新内容,PUT方法是幂等的方法。通过该方法客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容。

TRACE请求服务器回显其收到的请求信息,该方法主要用于HTTP请求的测试或诊断。

PATCH方法出现的较晚,它在2010年被定义。PATCH请求与PUT请求类似,同样用于资源的更新。二者有以下两点不同:

  • PATCH一般用于资源的部分更新,而PUT一般用于资源的整体更新。
  • 当资源不存在时,PATCH会创建一个新的资源,而PUT只会对已在资源进行更新。

5. IP地址

5.1 IP地址的格式是什么?

什么是IP地址?IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

IP地址编址方案将IP地址空间划分为A、B、C、D、E五类,其中A、B、C是基本类,D、E类作为多播和保留使用,为特殊地址。

每个IP地址包括两个标识码(ID)

  • 网络ID
  • 主机ID。

同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。3字节的网络地址 + 1字节主机地址的意思就是:前三段号码为网络号码,剩下的一段号码为本地计算机的号码。

  • A类地址:1字节的网络地址 + 3字节主机地址,网络地址的最高位必须是0。A类IP地址的地址范围1.0.0.0到127.255.255.255,IP地址的子网掩码为255.0.0.0,每个网络支持的最大主机数为256^3-2
  • B类地址:2字节的网络地址 + 2字节主机地址,网络地址的最高位必须是10。B类IP地址地址范围128.0.0.0-191.255.255.255B类IP地址的子网掩码为255.255.0.0,每个网络支持的最大主机数为256^2-2。注:1000 0000=128
  • C类地址:3字节的网络地址 + 1字节主机地址,网络地址的最高位必须是110。C类IP地址范围192.0.0.0-223.255.255.255每个网络支持的最大主机数为256-2适用于小规模局域网络
  • D类地址:多播地址,用于1对多通信,最高位必须是1110。范围从224.0.0.0到239.255.255.255。
  • E类地址:为保留地址,最高位必须是“1111”

5.2 单播广播多播的区别是什么?

单播:主机间一对一通信。优点:个性化服务,及时响应;缺点:流量压力大。

广播:主机间一对所有通信。优点:布局简单,维护方便,流量负载低。缺点:缺乏个性化服务,无法在Internet宽带上传播。

多播(组播):主机间一对一组通信。优点:兼具流量负载和个性化的优点,允许在Internet宽带上传播。缺点:与单播协议相比没有纠错机制。

5.3 如何划分子网?

划分子网的方法是从主机号借用若干个位作为子网号,而主机号也就相应减少了若干个位。于是两级IP地址在本单位内部就变为三级IP地址:网络号、子网号和主机号。

区分子网号和主机号的办法是:通过子网掩码网络号和子网号全设为1的IP地址为子网掩码。

假设公司有4个部门,A部门有10台主机,B部门有15台主机,C部门有30台主机,D部门有20台主机。分配了一个总的网段为:192.168.2.0/24。请问该如何划分子网?

网段前面的数字是我们的网络地址,后面的24表示用24位来表示网络位,用32-24=8位来表示主机位。主机数目不多,可以小型组网,因此采用C类地址(最大254个主机),默认掩码为225.255.255.0。

首先假设借用主机位2位来划分4个子网,则子网掩码组合为:

11111111.11111111.11111111.00000000
11111111.11111111.11111111.01000000
11111111.11111111.11111111.10000000
11111111.11111111.11111111.11000000

然而全为0和全为1的地址不能用,所以我们需要借用主机位3位,划分8-2=6个子网:

11111111.11111111.11111111.00100000
11111111.11111111.11111111.01000000
11111111.11111111.11111111.01100000
11111111.11111111.11111111.10000000
11111111.11111111.11111111.10100000
11111111.11111111.11111111.11000000

验证一下:最后提供的主机位数是2^5=32,也就是说每个子网最大的主机数是32,符合题目要求。所以子网划分如下:

(1)255.255.255.32:    192.168.2.33~ 192.168.2.62
(2)255.255.255.64:   192.168.2.65~ 192.168.2.94
(3)255.255.255.96:   192.168.2.97~ 192.168.2.126 
(4)255.255.255.128:  192.168.2.129~ 192.168.2.158
(5)255.255.255.160:  192.168.2.161~ 192.168.2.190 
(6)255.255.255.192:  192.168.2.193~ 192.168.2.222

子网掩码是:

11111111.11111111.11111111.11100000
255.255.255.224

6. 网络安全

6.1 什么是DDos攻击?

DDos全称Distributed Denial of Service,分布式拒绝服务攻击。最基本的DOS攻击过程如下:

  1. 客户端向服务端发送请求链接数据包
  2. 服务端向客户端发送确认数据包
  3. 客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认

DDoS则是采用分布式的方法,通过在网络上占领多台“肉鸡”,用多台计算机发起攻击。

DOS攻击现在基本没啥作用了,因为服务器的性能都很好,而且是多台服务器共同作用,1V1的模式黑客无法占上风。对于DDOS攻击,预防方法有:

  • **减少SYN timeout时间。**在握手的第三步,服务器会等待30秒-120秒的时间,减少这个等待时间就能释放更多的资源。
  • 限制同时打开的SYN半连接数目。

6.2 什么是XSS攻击?

XSS也称 cross-site scripting,跨站脚本。这种攻击是由于服务器将攻击者存储的数据原原本本地显示给其他用户所致的。比如一个存在XSS漏洞的论坛,用户发帖时就可以引入带有<script>标签的代码,导致恶意代码的执行。

预防措施有:

  • 前端:过滤
  • 后端:转义,比如go自带的处理器就具有转义功能。

6.3 什么是注入SQL攻击?

XSS是将脚本代码注入,而SQL注入攻击顾名思义就是注入SQL语句。

比如代码:

username:=r.Form.Get("username")
password:=r.Form.Get("password")
sql:="SELECT * FROM user WHERE username='"+username+"' AND password='"+password+"'"

当用户输入myuser' or 'foo' = 'foo' --,那么SQL就变成了:

SELECT * FROM user WHERE username='myuser' or 'foo'=='foo' --'' AND password='xxx'

在SQL里面--是注释标记,所以查询语句会在此中断。这就让攻击者在不知道任何合法用户名和密码的情况下成功登录了。

预防方法:

  • 限制数据库权限,给用户提供仅仅能够满足其工作的最低权限。
  • 对进入数据库的特殊字符(’”\尖括号&*;等)转义处理。
  • 提供参数化查询接口,不要直接使用原生SQL

7. 综合问题

7.1 浏览器中输入URL地址到显示主页的过程是什么?

在这里插入图片描述

7.2 ping命令的具体过程是什么?

假设现在有ABCD四台主机,一台路由,子网掩码为255.255.255.0,默认路由为192.168.0.1

在主机 A 上运行Ping 192.168.0.5后,

  1. Ping命令会构建一个ICMP协议的数据包,交到网络层的IP协议中。IP层协议将目的地址和源地址打包后,形成IP数据包
  2. 获取192.168.0.5的MAC地址
  3. 交到数据链路层,添加一些控制信息,构建数据帧
  4. 交到物理层,通过以太网访问

主机B收到后,

  1. 检查目的地址,不相符就丢弃
  2. 将IP数据包提取后送入网络层的IP层协议,IP层检查后将有用的信息提取后送入ICMP协议
  3. ICMP协议马上构建一个ICMP应答包以之前的相同方式发送给主机

根据条件:是否在同一网段内,流程可能有所不同,区别在于MAC的获取方式,具体参见ARP协议。

7.3 负载均衡算法有哪些?

多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,能互相分担负载。

  • 轮询法:将请求按照顺序轮流的分配到服务器上。大锅饭,不能发挥某些高性能服务器的优势
  • 随机法:随机获取一台,和轮询类似
  • 哈希法:通过ip地址哈希化来确定要选择的服务器编号。好处是,每次客户端访问的服务器都是同一个服务器,能很好地利用session或者cookie
  • 加权轮询:根据服务器性能不同加权
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值