计算机网络面试题总结

(1)OSI七层模型分别是什么,各自的功能是什么?

        自底向上来说,首先是物理层(比如集线器等,负责传输光电信号,在物理网络中传输数据),数据链路层(网桥或者交换机工作,负责数据的封帧和错误检测以及mac寻址,有ARQ自动重传请求协议,PPP点对点协议),网络层(路由器工作,有IP协议,ICMP Internet控制报文协议,ARP地址转换协议。负责数据的路由、转发、分片),传输层(TCP,UDP协议,提供端到端的数据传递),会话层(负责建立、管理、终止会话),表示层(对数据进行翻译、加密、压缩),应用层(有DNS,HTTP,WWW,HTTPS,SSH协议等,负责给应用程序提供统一的接口)
如果问的是五层模型:应用层(负责应用进程间通信和交互的规则)

(2)TCP三次握手,为什么不能两次?

        客户端向服务器发起建立连接请求SYN,发一个序列号给服务器。服务器在收到这个报文之后,返回一个确认ACK,客户端收到之后,再次返回一个ACK确认报文。此时才算对话建立。假设只有两次握手,客户端可能没有服务器的确认报文,但是服务器以为已经和客户端建立了连接,可能会发送一些数据,但是客户端并不会接收,浪费了资源。而且服务器可能接收到一个早已失效的SYN,向客户端发送了确认报文并且建立连接,但是客户端并不需要向服务端发送数据。

(3)TCP四次挥手,为什么不能三次?

        客户端向服务器发送完数据之后,发起释放连接报文FIN,服务器收到后向客户端发送确认报文ACK,服务器会有一个关闭等待时间来处理数据,然后服务器向客户端发出释放连接报文FIN,客户端收到后,向服务端发送ACK确认。发送之后,客服端会等待2MSL,如果服务器没有收到最后的ACK,还可以让客户端重发报文,并且确保了本次TCP连接中的所有报文都消失,不会出现在下一个TCP中。

(4)TCP如何保证有效(可靠传输)?

        主要有校验和序列号超时重传流量控制,以及拥塞避免


校验和:在发送端和接收端分别计算数据的校验和,如果两者不一致,说明数据在传输过程中出现了差错,TCP将丢弃且不确认此报文。


序列号:TCP会对每一个发送的字节进行编号,接收方收到数据后,发送的ACK报文中带有相应的确认编号,告诉发送方,下一次发送数据编号从几开始。接收方可以通过序列号判断出是否是相同数据,丢包后从哪一个序列号开始重传包。


超时重传:如果发送方在重传计时器规定的时间内没有收到ACK,那发送方就会重新发送数据。(如果是发送方数据丢失,接收方收到重传数据后立刻发送ACK,如果是ACK丢失,接收方收到数据后直接丢弃再发ACK。)如果重发数据之后,还是没有收到ACK,确认应答时间将会以2倍、4倍指数函数延长,直到最后关闭连接。


流量控制:如果发送端发送数据太快,接受端来不及接受就会出现丢包,因此TCP用滑动窗口进行了流量控制。接收端收到数据包后发送ACK报文时会将自己的窗口大小填入ACK中,发送方会根据窗口大小控制发送速度,如果窗口大小为0 ,发送方停止发送。


拥塞控制:如果网络出现拥塞,会有丢包,发送方继续重传会加重网络拥塞。拥塞控制主要有四部分组成:慢开始、拥塞避免、快重传、快恢复

为了避免一开始发送大量数据而产生网络阻塞,初始化拥塞窗口为1,收到ACK后设置拥塞窗口按指数形式增长。

如果到达慢开始的门限值后,进入到拥塞避免阶段,窗口每次增加1。如果网络出现超时,门限值将变为此时拥塞窗口的一半,然后将拥塞窗口重新置为1。

在网络中如果丢失了某个报文,就快速向发送端发送三次前一个包的ACK,无需等待重传计时器,就可直接进行该报文的重传。

快恢复是指将门限值设置为发生快重传的拥塞窗口的一半,将拥塞窗口设置为门限值,开始拥塞避免阶段。

(5)TCP的主要特点?TCP与UDP的区别,UDP的主要特点,应用场景?

        TCP是面向连接的,而且是端到端连接。提供可靠传输,保证数据无差错,不丢失,不重复,而且按序列到达。TCP允许通信双方的应用进程在任何时候都能发送数据,TCP连接的两端都设有缓存,用来临时存放双方通信的数据。TCP是面向字节流的,TCP把应用程序的数据看成是一串无结构的字节流。

        TCP适合对效率要求低,对准确性要求高或者要求有连接的场景,比如远程终端接入,浏览器,文件传输,电子邮件等

        UDP是面向报文的,是不具有可靠性的数据报协议,不提供复杂的控制机制,出现丢包也不会重发,也没有纠正包乱序的功能,但是它传输效率高,适合包总量较少的通信(DNS),视频、音频等多媒体通信(即时通信),限定与局域网等特定网络中的应用通信,广播通信等对效率要求高,对准确性要求低的通信场景。

(6)在交互过程中如果数据传送完了,不想断开连接,如何维持(THHP协议)?

        在HTTP中响应体的connection字段指定为keep-alive。

(7)TCP和UDP分别对应的应用层协议有哪些?

        TCP对应的文件传输协议有:FTP(文件传输协议)、telnet(远程登陆协议)、SMTP+POP3(邮件传输协议)、HTTP(超文本传输协议)


        UDP对应的应用层协议有:DNS(域名解析服务)、SNMP(简单网络管理协议)、TFTP(简单文件传输协议)

(8)TCP最大连接数限制?

        一个TCP连接的标识是{local IP,local port,remote IP,remote port},端口数据类型是unsigned short,理论上来说,客户端最大TCP连接数是65535(端口0不能用)服务器理论上说,最大的TCP连接是客户端ip数 *客户端 port数。实际环境中,受到机器资源、操作系统的限制,目前在server端的最大并发TCP连接数可以达到10万。一半服务器可以有几万级别,可以用分布式技术将并发负载分担到多台服务器上。

(9)TCP粘包如何产生,如何解决拆包和粘包?

        因为TCP协议是基于字节流传输数据的,不包含数据包的概念,需要应用层协议自己设置消息的边界,如果应用层协议没有使用基于长度或者基于终结符等方式进行处理,就会导致多个消息粘包和拆包。

        操作系统在发送TCP数据时,会通过缓冲区来优化,如果一次请求的数据量比较小,没有达到缓冲区,就会将多个请求合并为一个请求,形成粘包;如果一次请求的数据量比较大,超过了缓冲区,TCP就会将其拆分多次发送,形成拆包。
        解决方案:发送端将每个包都封装成固定的长度,不足可以padding0;发送端在每个包末尾使用固定的分隔符;将消息分为头部和消息体,头部中保存整个消息的长度,只有读取足够长度的消息之后,才算是读到了完整信息(最常用)

(10)有很多time——wait状态会导致什么问题,怎么解决?

        在高并发短链接的业务场景中,服务器处理完请求后主动发送FIN,就会有大量的连接处于time——wait状态,服务器维护每一个连接需要一个socket,而文件描述符使用有上限,如果持续高并发,会导致一些正常的连接失败。

        过多的time-wait主要有两种危害:内存资源占用,端口资源占用

        可以修改配置或者设置so_reuseaddr套接字,使服务器处于time——wait状态下的端口能够快速回收和重新使用。也可以使用长连接的方式减少TCP的连接与断开,在长连接的业务中往往不需要考虑time-wait状态,但实际上长连接的业务中并发量一般不会太高。

(11)TCP的四个计时器?

        1、重传计时器:为了控制丢失的报文段,在TCP发送报文时,创建重传计时器,在截止时间之前,收到了报文的ACK,就撤销计时器,截止时间到了还未收到报文的ACK,就重传报文,并且复位计时器。


        2、坚持计时器:避免零窗口大小通知可能导致的死锁问题。当发送端接到零窗口报文后,发送端就停止发送数据,等到接收端缓存区有空间后,会发送ACK更新窗口,但是接收端的这个报文可能会丢失,接收端处于等待数据的状态,但是发送端没有等来新窗口,也在等待,形成死锁。因此TCP为每个连接设置了坚持计时器,当发送端收到零窗口后,启动坚持计时器,计时器到期后,发送端主动发送探测报文,让接收端重新发送窗口。


        3、保活计时器:为了防止两个TCP连接出现长时间的空闲,每当服务器接收到客户端的数据后,都重置保活计时器,到期后如果没有收到客户端的数据,就会发送探测报文,每隔75秒发送一次,连续发送十次之后,仍然没有收到客户端数据,则认为客户端出现故障,终止连接。


        4、time-wait计时器:当TCP关闭连接时,在客户端发送最后一个ACK后开始计时,可以保证本次连接中的全部数据都不再传输。

(12)停止等待协议?

        停止等待协议时TCP保证传输可靠的重要途经,就是指发送完一个分组就停止发送,等待对方确认,只有对方确认过,才发送下一个分组。

        主要包括以下几种情况:
无差错情况:发送方发送分组,接收方在规定时间内收到,并且回复确认,发送方再次发送报文。


超时重传:1、分组丢失:接收端没有收到报文不会发送ACK,发送方在一段时间内没有收到ACK会重新发送报文。2、确认丢失:接收端收到了报文后,发送ACK,但是ACK丢失,发送方在没有收到ACK的情况下会重新发送报文,接受端丢弃该分组,重新发ACK。3、传送延迟:接收端收到了报文,并且发送了ACK,但是ACK传输太慢,发送方以及重发了报文,接收端收到报文后丢弃,再重发ACK。发送端如果收到多个确认,就停止发送,丢弃其他确认。

        停止等待协议的优点是简单,缺点时信道的利用率太低,一次发送一条消息,使得信道的大部分时间都是空闲的,

(13)连续ARQ协议和滑动窗口协议?


        连续ARQ协议和滑动窗口协议主要解决了信道效率低,增大了吞吐量,以及控制了流量。
连续ARQ协议:发送方维护的窗口中不止一个分组,窗口大小由接收方决定,因此大小会动态变化,只要在窗口中的分组都可以被发送,提高了信道的利用率,并且采用累积确认的方式,对按序到达的最后一个分组发送确认。(比如发送方发了1、2、4、5,接收方只会确认2,发送方会重发3、4、5)
滑动窗口协议:窗口不断向前走,该协议允许发送方在停止等待前发送多个数据组分,发送方不必每发一个分组就停下来确认,因此该协议可以加速数据的传输,还可以控制流量。

(14)SYN FLOOD时什么?

        SYN洪水攻击,时拒绝服务攻击的一种。利用TCP协议的安全缺陷,不断发送一系列的SYN请求到目标系统,消耗服务器系统的资源,导致目标服务器不响应合法的流量请求。这种攻击发生在TCP握手阶段,攻击者向目标服务器发送大量的SYN数据包,服务器会相应每一个请求然后返回ACK,等待响应。服务器为了维护一个庞大的半连接列表而消耗很多资源,造成服务器崩溃。

(15)HTTP版本区别?

        HTTP1.0时一种无状态,无连接的应用层协议,浏览器每次请求都需要与服务器建立一个TCP连接,服务器处理完成以后,立即断开连接,服务器不跟踪客户端也不记录过去的请求。这种无状态性可以借助cookie和session机制来做身份认证和状态记录。1.0版本无法复用连接,无连接的特性会使网络的利用率变低。如果前一个请求响应一直不到达,下一个请求就不发送,后门的请求就阻塞了。


        HTTP1.1继承了HTTP1.0的简单,客服了1.0的性能问题。1.1增加了connection字段,通过keep-alive保持HTTP连接不断,避免每次客户端与服务器请求都要重复建立释放TCP,提高了网络的利用率。1.1支持请求管道化,增加缓存处理,增加host字段,支持断点传输。进一步改进了1.0的效率。


        HTTP2.0在应用层和传输层之间增加了一个二进制分层帧,实现了真正的并行传输。在一个TCP连接上,每个数据流以消息的形式发送,消息由一个或者多个帧组成,这些帧可以乱序发送,然后再根据每个帧头部的stream-id重新封装。多路复用可能会导致关键字被阻塞,2.0中每个数据流都可以设置优先级和依赖,优先级高的数据流会被服务器优先处理和返回客户端,数据流还可以依赖其他的子数据流。1.x中,浏览器会在每次请求的时候把cookie附在header上发给服务器,2.0使用encoder来减少需要传输的header大小,通讯双方各自保存一份header表,不需要直接发送值,通过发送key缩减头部大小。服务器除了最初请求的响应外,还可以额外向客户端推送资源,无需客户端明确的需求。

(16)post和get区别?应用场景?

        HTTP有多种方法,比较常见的是get(获取资源),head(获取报文头部),post(传输数据到服务器),put(上传文件),delete(删除文件),patch(部分修改)。


        get和post都是与服务器交互的不同方法,get用来获取资源,查询数据,可以对get请求的数据进行缓存,比如进行搜索,查找。get请求要进行URL编码,为了防止URL中的参数和HTTP中的一些参数冲突,避免歧义。(%后的字节当作普通字节,不至于和键值对冲突)


        post是向服务器提交修改,不能缓存,比如修改数据库,添加新数据。get请求时url的长度是有限制的,而且没有请求体,☞支持ASCII码。post是将内容包含在请求体中,支持多种数据结构。从安全的角度看,他俩都不安全,因为HTTP就是明文协议,不论是get还是post都能被捉包。

(17)http常用状态码和使用场景?

        状态码是服务器告诉客户端当前请求的相应状态。状态码第一位数字决定了不同的响应状态。1表示消息,2表示成功,3表示重定向,4表示请求错误,5表示服务器错误。比如100表示客户端继续发送请求的剩余部分。200表示请求成功,201请求成功并且创建新资源。301网页永久移动到新位置,新域名代替旧域名,用户访问旧域名时就用301重定向到新域名,302临时移动,常用于未登录的用户访问用户中心重定向到登录页面。400错误请求,401要求身份验证,403服务器拒绝请求,404not found, 405方法禁用。408请求超时。500服务器内部错误。

(18)HTTP如何实现长连接,短连接?在什么时候会超时?

        HTTP短连接在首部字段中设置connection:close,在一次请求-响应之后,就会关闭连接。在HTTP1.0中默认使用短连接,当客户端浏览器访问时,每遇到一个web资源,浏览器就会重新建立一个HTTP会话。
        HTTP要实现长连接,是建立在TCP协议基础上的,实现长连接要求客服端和服务器都支持长连接,客户端和服务器建立一次连接之后,可以在这条连接上进行多次请求-响应操作。HTTP 1.1 默认使用长连接。可以设置过期时间也可以不设置,首部字段设置connection:keep-alive,和keep-alive:timeout = 60,表示连接建立后,空闲时间超60s连接失效,每次使用完,重新计数空闲时间。如果不设置timeout,默认按照服务器软件中设定的时间。在使用长连接的情况下,当一个网页关闭后,客户端和服务器之间用于传输HTTP数据的TCP连接不用关闭,如果客户端再次访问这个服务器上的网页,会继续使用这条已经建立的连接。

(19)HTTPs的工作过程?HTTP和HTTPS的区别?https的优缺点?

        HTTP时使用明文数据传输的网络协议,容易被截取攻击,有安全隐患。HTTPS在HTTP的基础上加入了SSL/TLS协议,依靠证书来验证服务器的身份,为浏览器和服务器之间的通信加密。在数据传输之前对其进行加密,然后再发送到服务器。


        https工作过程:1、客服端提交https请求,2、服务器响应客户,并把服务器公钥发给客户端。3、客户端验证公钥的有效性。4、验证通过后,客户端会生成一个随机数做会话密钥。5、用服务器公钥加密这个会话密钥之后,发送给服务器。6、服务器收到公钥加密的密钥后,用私钥解密,获取会话密钥。7、客户端与服务器利用会话密钥对传输数据进行对称加密通信。


        https优缺点:

优点(认证用户和服务器,确保数据发送到正确的客户端和服务器,防止数据在传输过程中被窃取,改变,保证数据的完整和完全,是现在架构下最安全的解决方案,增大了中间人攻击的成本。)

缺点(https握手阶段费时,增加耗电,连接缓存不如HTTP高效,SSL证书费用高,而且证书需要绑定IP,不能再同一个IP上绑定多个域名。HTTPS在黑客攻击,拒绝服务攻击,服务器劫持等方面起不到什么作用。SSL证书信用链体系并不安全,在可以控制CA根证书的情况下,也挡不住中间人攻击。)

(20)对称加密和非对称加密?

        对称加密是指发送方和接收方使用同一个密钥去加解密数据,算法公开,加密和解密速度快,适合对大量数据进行加密。缺点是密钥安全管理困难。常见的对称加密有DES,3DES,AES等。

        非对称加密使用一对密钥,私钥不能泄露,公钥任何人都能获得。公钥加密,私钥解密,或者私钥加密,公钥解密。加解密时间长,只适合对少量数据进行加密。常见的非对称加密算法有RSA。

        哈希算法一般用于对数据进行摘要计算,对数据生成一段特定长度的hash值,校验信息的完整性,确保信息没有被改动。常用的摘要算法有MD5,sha。

(21)什么是数字签名,数字证书?

        数字证书由CA证书中心发行,能在Internet上进行身份验证。数字签名是一种类似于物理签名的鉴别数字信息的方法。先用hash函数生成数据摘要,然后使用私钥对摘要加密,生成数字签名。证书中心CA用自己的私钥对服务器的公钥和一些相关信息一起加密,生成数字证书。
        服务器收到请求后用自己私钥加密网页后,连同本身的数字证书一起发送给客户端。客户端会根据证书管理列表查看解开数字证书的公钥,确认数字证书可靠后,客户端就可以使用证书中的服务器公钥对信息进行加密,与服务器交换加密信息。

(22)在浏览器中输入URL地址到显示主页的过程?

        URL是URI的子集,是一种具体的URI。URI是统一资源标志符,表示的是web上每一种可用资源。URL是统一资源定位符,定义了如何访问该资源,URL可以用一种统一的格式来描述各种资源的地址目录等。URI相当于身份证号,URL相当于这个人的住址。

1、DNS解析:当我们在浏览器中输入一个网址的时候,浏览器会对该网址进行DNS解析获取对应的IP地址。DNS存放了域名和IP之间的映射关系。浏览器会首先查看浏览器和本机的DNS缓存,如果没有找到就会从网络服务商的DNS缓存信息中查找。如果还没有找到,则向跟服务器查找顶级域对应的IP地址,然后逐层查找该域名对应的IP地址,最后返回给本地浏览器。本地服务器也会保存该对应关系到缓存中,方便下一次访问。

1.1、DNS在区域传输中使用TCP协议,在查询中使用UDP协议。因为DNS查询的数据包小,机制简单,UDP协议开销小,效率高。但是目前DNS同时支持UDP和TCP,如果数据包比较小,可以选择UDP,如果数据包突破512字节,选择TCP来传输。

1.2、DNS劫持是指在劫持的网络范围内拦截域名解析请求,返回假的IP地址或者使请求失去响应。效果就是对特定的网络不能访问或者访问到了假网址。比如输入知乎的网址,跳转到了百度的页面。具体步骤如下:获取要劫持的域名信息、控制域名响应的Email账号、利用Email修改该域名的注册信息,包括域名拥有者信息和DNS服务器信息等、使用Email收发确认函,待网络公司回复成功修改信件后,攻击者便完成了DNS劫持。
用户端可以直接通过IP地址访问网站,避开DNS劫持,也可以通过网络设置让DNS指向正常的域名服务器(比如8.8.8.8)。

1.3、为了提高DNS查询效率,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。为了保持内容的正确性,域名服务器为每项内容设置计时器并处理超过合理时间的项。主机启动时也会从本地服务器下载名字和地址的全部数据库,维护存放着最近使用的域名的缓存。主机也需要定期检查域名服务器获得最新的映射信息,删除缓存中的无效项。

2、TCP建立连接(三次握手)
3、客户端发送HTTP请求报文,服务器收到请求后处理,返回响应报文。
4、浏览器收到服务器返回的HTML后,对其进行解析,并渲染页面。
5、断开TCP连接(四次挥手)

(23)forward和redirect的区别?

        forward(转发):向服务器请求资源后,服务器直接访问目标地址的URL,将响应内容读取过来并发给浏览器。这个跳转过程在服务器实现,浏览器只需要一次请求,浏览器地址栏还是原来的地址。forward会将请求信息带到被重定向的jsp或者servlet中,可以共享数据,效率高。forward一般用于用户登录,根据角色转发到相应的模块。


        redirect(重定向):服务器发送一个状态码告诉浏览器去请求新的地址,redirect是客户端行为,浏览器需要两次请求,地址栏显示的是新的URL。不能共享数据,效率低。redirect一般用于用户注销登录时返回主页面或者跳转到其他网站。

(24)cookie和session有什么区别?

        浏览器第一次发送请求到服务端,服务器创建一个session,将sessionID写到cookie中发送给浏览器。浏览器再次访问服务器的时候会携带服务器创建的cookie,服务器通过cookie中的sessionID区分不同用户,确定用户是否登录或者有某种权限。
        cookie记录了网站的一些用户信息,比如用户名密码等,保存在客户端,容量较小,只支持ASCII编码,只要不超过设置的过期时间,可以长期存储。session在服务端存放用户数据,大小按照服务器性能分配,session过多会消耗服务器资源,能够存储多种数据类型,session通常在30min或者关闭浏览器后失效。cookie在本地容易被盗取,session在服务器相对安全。

(25)IP地址有哪些分类?IP地址和MAC地址有什么区别?各自的用处?IPV4地址不够如何解决?

1、IP地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成。第一个字段是net-id,在整个因特网中必须唯一,第二个字段是host-id,在指定的网络范围内必须唯一。根据IP地址的范围,划分出5类。
A类:0+网络号7位+主机号24位,1.0.0.0~127.255.255.255
B类:10+网络号14位+主机号16位,128.0.0.0~191.255.255.255
C类:110+网络号21位+主机号8位,192.0.0.0~223.255.255.255
D类:1110+组播地址(28位),224.0.0.0~239.255.255.255
E类:11110+保留位今后使用,240.0.0.0~247.255.255.255

2、MAC地址和IP地址是两个不同的概念,分别代表了计算机网络中的不同层次和地址。MAC是物理地址,是在计算机硬件中存储的地址,用12个的16进制格式表示,比如08:00:20:0A:8C:6D,每个设备都有一个唯一的MAC地址,MAC地址不具备寻址功能。IP地址是逻辑地址,是计算机网络中用于唯一标识设备的地址,IP地址由四段数字组成,每段数字表示一个唯一的网络地址,主要用来网络寻址。

3、IPV4地址不够解决方式:DHCP(动态主机配置协议),动态分配IP地址,只给接入网络的设备分配IP,使空闲的IP地址可以得到充分的利用。CIDR(无类别域间路由)消除了传统的A\B\C地址以及划分子网的概念,更加有效的分配IPV4地址空间,但是无法从根本上解决地址耗尽的问题。NAT(网络地址转换协议)在局域网主机与公网通信时,将主机的IP地址转换为全球IP,解决IP地址不足问题。IPV6替代IPV4,可以实现了2^128个地址,从根本上解决IPV4地址不够用的问题。

(26)什么是SQL注入,举个例子?

1、SQL注入是一种web安全漏洞,通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。可能导致数据受损(数据被修改、删除等)甚至危害整个服务器。


2、SQL注入攻击的总体思路:寻找到SQL注入的位置、判断服务器类型和后台数据库类型、针对不同的服务器和数据库特点进行SQL注入攻击。比如:在一个登录界面,要求输入用户名和密码,用户名输入‘or 1 = 1 --,如果没有做特殊处理,用户就能点击登录进去,因为后台的SQL语句中的where  username=’’or 1 = 1 –- and password=’’,两个--代表注释,这样语句就可以执行,用户能够骗过系统,获取合法身份。


3、应对方法:1.SQL预编译和参数绑定,恶意SQL被当作参数而不是命令。2.使用正则表达式过滤传入的参数。3.使用白名单而不是黑名单。

(27)什么是XSS攻击,举个例子?

        跨站脚本攻击,XSS是一种经常出现在web应用中的计算机安全漏洞,与SQL注入一起成为web中最主流的攻击方式。XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些脚本代码嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

        比如:盗取各类用户帐号,控制企业数据,非法转账,强制发送电子邮件,控制受害者机器向其它网站发起攻击。


        主要原因是过于信任客户端提交的数据。对于服务器来说,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。


        XSS分类:存储型(代码存在服务器中,比如评论内容等,当用户访问这些页面的时候就会触发代码)、反射型(用户点击链接才能触发代码,一般出现在搜索页面)

(28)ARP协议的工作原理?

        ARP协议是地址解析协议(Address Resolution Protocol)是通过解析IP地址得到MAC地址,所有ARP协议在网络层被应用,它是网络层与链路层连接的重要枢纽。


        每台主机都会建立自己的ARP列表,当源主机需要发送数据到目的主机时,会先检查自己的ARP列表中是否存在该IP地址对应的MAC地址,有就直接将数据包发送给MAC地址,没有就向本地网段发起一个ARP请求广播包,查询目的主机对应的MAC地址。网络中所有主机收到该请求后,会检查数据包中的目的IP与自己IP地址是否一致,如果不相同就忽略。若相同,目的主机则将发送端MAC和IP添加到自己的ARP列表,(若有则覆盖),然后给源主机发送一个ARP响应数据包,源主机收到该响应包后,将目的主机IP和MAC添加到自己的ARP列表中,并开始数据传输。如果源主机一直没有收到ARP响应包,表示ARP查询失败。

(29)ICMP有哪些应用?

        主要有两个,一个是ping,用来测试两台主机之间的连通性。通过向目的主机发送ICMP报文,目的主机收到后在规定时间内回答报文。ping会根据时间和成功响应的次数估算出数据包往返时间和丢包率。
        另一个是traceroute,是诊断网络问题时常用的工具。它可以定位从源主机到目标主机之间经过了哪些路由器,以及到达各个路由器的耗时。第一个探测报文TTL为1,到达第一个路由器时,TTL减1为0所以丢掉这个探测包,同时向源主机发送ICMP报文,这时源主机就获得了第一个路由器的IP地址;接着源主机发送第二个探测报文,TTL增1为2,到达第一个路由器TTL减1为1并转发探测包到第二个路由器,这时TTL减1为0,丢掉这个探测包并向源主机发送ICMP报文,源主机就获得了第二个路由器的IP地址;以此类推,直到探测报文到达traceroute的目的地,这时源主机就获得了到目的地的每一跳路由的IP地址。(传输层使用的是UDP)