网络协议常见面试题

一)网络基础知识

1)Http和Https的区别?

答:Http协议运行在TCP之上,明文传输,客户端与服务器端都没法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。两者之间存在以下不一样:javascript

  • 端口不一样:Http与Http使用不一样的链接方式,用的端口也不同,前者是80,后者是443;php

  • 资源消耗:和HTTP通讯相比,Https通讯会因为加减密处理消耗更多的CPU和内存资源;html

  • 开销:Https通讯须要证书,而证书通常须要向认证机构购买;java

Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。web

2)对称加密与非对称加密

答:正则表达式

对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;而非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥能够随意发布,但私钥只有本身知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用本身的私钥进行解密。算法

因为非对称加密的方式不须要发送用来解密的私钥,因此能够保证安全性;可是和对称加密比起来,它很是的慢,因此咱们仍是要用对称加密来传送消息,但对称加密所使用的密钥咱们能够经过非对称加密的方式发送出去。sql

3)三次握手与四次挥手

答:数据库

(1). 三次握手(我要和你创建连接,你真的要和我创建连接么,我真的要和你创建连接,成功)浏览器

  • 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

  • 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求创建链接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认链接请求,Server进入SYN_RCVD状态。

  • 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,若是正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,若是正确则链接创建成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间能够开始传输数据了。

 

(2). 四次挥手(我要和你断开连接;好的,断吧。我也要和你断开连接;好的,断吧):

  • 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

  • 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。此时TCP连接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若发送数据,则客户端仍要接收。

  • 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

  • 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

4)为何 TCP 连接须要三次握手,两次不能够么?

答:“三次握手” 的目的是为了防止已失效的连接请求报文忽然又传送到了服务端,于是产生错误。

  • 正常的状况:A 发出链接请求,但因链接请求报文丢失而未收到确认,因而 A 再重传一次链接请求。后来收到了确认,创建了链接。数据传输完毕后,就释放了链接。A 共发送了两个链接请求报文段,其中第一个丢失,第二个到达了 B。没有 “已失效的链接请求报文段”。

  • 现假定出现了一种异常状况:即 A 发出的第一个链接请求报文段并无丢失,而是在某个网络结点长时间的滞留了,以至延误到链接释放之后的某个时间才到达 B。原本这是一个早已失效的报文段。但 B 收到此失效的链接请求报文段后,就误认为是 A 再次发出的一个新的链接请求。因而就向 A 发出确认报文段,赞成创建链接。

假设不采用“三次握手”,那么只要 B 发出确认,新的链接就创建了。因为如今 A 并无发出创建链接的请求,所以不会理睬 B 的确认,也不会向 B 发送数据。但 B 却觉得新的运输链接已经创建,并一直等待 A 发来数据。这样,B 的不少资源就白白浪费掉了。采用“三次握手”的办法能够防止上述现象发生。

5)为何要四次挥手?

答:TCP 协议是一种面向链接的、可靠的、基于字节流的运输层通讯协议。TCP 是全双工模式,这就意味着,当 A 向 B 发出 FIN 报文段时,只是表示 A 已经没有数据要发送了,而此时 A 仍是可以接受到来自 B 发出的数据;B 向 A 发出 ACK 报文段也只是告诉 A ,它本身知道 A 没有数据要发了,但 B 仍是可以向 A 发送数据。

因此想要愉快的结束此次对话就须要四次挥手。

6)TCP 协议如何来保证传输的可靠性

答:TCP 提供一种面向链接的、可靠的字节流服务。其中,面向链接意味着两个使用 TCP 的应用(一般是一个客户和一个服务器)在彼此交换数据以前必须先创建一个 TCP 链接。在一个 TCP 链接中,仅有两方进行彼此通讯;而字节流服务意味着两个应用程序经过 TCP 连接交换 8 bit 字节构成的字节流,TCP 不在字节流中插入记录标识符。

对于可靠性,TCP经过如下方式进行保证:

  • 数据包校验:目的是检测数据在传输过程当中的任何变化,若校验出包有错,则丢弃报文段而且不给出响应,这时TCP发送数据端超时后会重发数据;

  • 对失序数据包重排序:既然TCP报文段做为IP数据报来传输,而IP数据报的到达可能会失序,所以TCP报文段的到达也可能会失序。TCP将对失序数据进行从新排序,而后才交给应用层;

  • 丢弃重复数据:对于重复数据,可以丢弃重复数据;

  • 应答机制:当TCP收到发自TCP链接另外一端的数据,它将发送一个确认。这个确认不是当即发送,一般将推迟几分之一秒;

  • 超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。若是不能及时收到一个确认,将重发这个报文段;

  • 流量控制:TCP链接的每一方都有固定大小的缓冲空间。TCP的接收端只容许另外一端发送接收端缓冲区所能接纳的数据,这能够防止较快主机导致较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。

7)客户端不断进行请求连接会怎样?DDos(Distributed Denial of Service)攻击?

答:服务器端会为每一个请求建立一个连接,并向其发送确认报文,而后等待客户端进行确认

(1). DDos 攻击:

  • 客户端向服务端发送请求连接数据包

  • 服务端向客户端发送确认数据包

  • 客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认

(2). DDos 预防:(没有完全根治的办法,除非不使用TCP)

  • 限制同时打开SYN半连接的数目

  • 缩短SYN半连接的Time out 时间

  • 关闭没必要要的服务

8)GET 与 POST 的区别?

答:GET与POST是咱们经常使用的两种HTTP Method,两者之间的区别主要包括以下五个方面:

(1). 从功能上讲,GET通常用来从服务器上获取资源,POST通常用来更新服务器上的资源;

(2). 从REST服务角度上说,GET是幂等的,即读取同一个资源,老是获得相同的数据,而POST不是幂等的,由于每次请求对资源的改变并非相同的;进一步地,GET不会改变服务器上的资源,而POST会对服务器资源进行改变;

(3). 从请求参数形式上看,GET请求的数据会附在URL以后,即将请求数据放置在HTTP报文的 请求头 中,以?分割URL和传输数据,参数之间以&相连。特别地,若是数据是英文字母/数字,原样发送;不然,会将其编码为 application/x-www-form-urlencoded MIME 字符串(若是是空格,转换为+,若是是中文/其余字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII);而POST请求会把提交的数据则放置在是HTTP请求报文的 请求体 中。

(4). 就安全性而言,POST的安全性要比GET的安全性高,由于GET请求提交的数据将明文出如今URL上,并且POST请求参数则被包装到请求体中,相对更安全。

(5). 从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,容许发送的数据量比较小,而POST请求则是没有大小限制的。

为何在GET请求中会对URL进行编码?

咱们知道,在GET请求中会对URL中非西文字符进行编码,这样作的目的就是为了 避免歧义。看下面的例子,

针对 “name1=value1&name2=value2” 的例子,咱们来谈一下数据从客户端到服务端的解析过程。首先,上述字符串在计算机中用ASCII吗表示为:

   6E616D6531 3D 76616C756531 26 6E616D6532 3D 76616C756532   6E616D6531:name1   3D:=    76616C756531:value1   26:&   6E616D6532:name2   3D:=    76616C756532:value2复制代码

服务端在接收到该数据后就能够遍历该字节流,一个字节一个字节的吃,当吃到3D这字节后,服务端就知道前面吃得字节表示一个key,再日后吃,若是遇到26,说明从刚才吃的3D到26子节之间的是上一个key的value,以此类推就能够解析出客户端传过来的参数。

如今考虑这样一个问题,若是咱们的参数值中就包含=或&这种特殊字符的时候该怎么办?好比,“name1=value1”,其中value1的值是“va&lu=e1”字符串,那么实际在传输过程当中就会变成这样“name1=va&lu=e1”。这样,咱们的本意是只有一个键值对,可是服务端却会解析成两个键值对,这样就产生了歧义。

那么,如何解决上述问题带来的歧义呢?解决的办法就是对参数进行URL编码:例如,咱们对上述会产生歧义的字符进行URL编码后结果:“name1=va%26lu%3D”,这样服务端会把紧跟在“%”后的字节当成普通的字节,就是不会把它当成各个参数或键值对的分隔符。

9)TCP与UDP的区别

答:TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议,它们之间的区别包括:

  • TCP是面向链接的,UDP是无链接的;

  • TCP是可靠的,UDP是不可靠的;

  • TCP只支持点对点通讯,UDP支持一对1、一对多、多对1、多对多的通讯模式;

  • TCP是面向字节流的,UDP是面向报文的;

  • TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通讯;

  • TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大;

10)TCP和UDP分别对应的常见应用层协议

答:

(1). TCP 对应的应用层协议:

  • FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务即是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。

  • Telnet:它是一种用于远程登录的端口,用户能够以本身的身份远程链接到计算机上,经过这种端口能够提供一种基于DOS模式下的通讯服务。如之前的BBS是-纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。

  • SMTP:定义了简单邮件传送协议,如今不少邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,因此在电子邮件设置-中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。

  • POP3:它是和SMTP对应,POP3用于接收邮件。一般状况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Fo-xmail或Outlook),就能够不以Web方式登录进邮箱界面,直接用邮件程序就能够收到邮件(如是163邮箱就没有必要先进入网易网站,再进入本身的邮-箱来收信)。

  • HTTP:从Web服务器传输超文本到本地浏览器的传送协议。

(2). UDP 对应的应用层协议:

  • DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。

  • SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。因为网络设备不少,无链接的服务就体现出其优点。

  • TFTP(Trival File Transfer Protocal):简单文件传输协议,该协议在熟知端口69上使用UDP服务

 

11)TCP 的拥塞避免机制

答:

拥塞:对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而降低。

拥塞控制:防止过多的数据注入到网络中,使得网络中的路由器或链路不致过载。

拥塞控制的方法:

(1). 慢启动 + 拥塞避免:

慢启动:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增长拥塞窗口的大小;

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

(2). 快重传 + 快恢复:

快重传:快重传要求接收方在收到一个 失序的报文段 后就当即发出 重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到本身发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当当即重传对方还没有收到的报文段,而没必要继续等待设置的重传计时器时间到期。

快恢复:快重传配合使用的还有快恢复算法,当发送方连续收到三个重复确认时,就执行“乘法减少”算法,把ssthresh门限减半,可是接下去并不执行慢开始算法:由于若是网络出现拥塞的话就不会收到好几个重复的确认,因此发送方如今认为网络可能没有出现拥塞。因此此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,而后执行拥塞避免算法。

12)浏览器中输入:“`www.liangsonghua.me`” 以后都发生了什么?请详细阐述。

解析:经典的网络协议问题。

答:

  1. 由域名→IP地址 寻找IP地址的过程依次通过了浏览器缓存、系统缓存、hosts文件、路由器缓存、 递归搜索根域名服务器。

  2. 创建TCP/IP链接(三次握手具体过程)

  3. 由浏览器发送一个HTTP请求

  4. 通过路由器的转发,经过服务器的防火墙,该HTTP请求到达了服务器

  5. 服务器处理该HTTP请求,返回一个HTML文件

  6. 浏览器解析该HTML文件,而且显示在浏览器端

  7. 这里须要注意:

  • HTTP协议是一种基于TCP/IP的应用层协议,进行HTTP数据请求必须先创建TCP/IP链接

  • 能够这样理解:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通讯的能力。

  • 两个计算机之间的交流无非是两个端口之间的数据通讯,具体的数据会以什么样的形式展示是以不一样的应用层协议来定义的。

13)什么是 HTTP 协议无状态协议?怎么解决Http协议无状态协议?

答:HTTP 是一个无状态的协议,也就是没有记忆力,这意味着每一次的请求都是独立的,缺乏状态意味着若是后续处理须要前面的信息,则它必需要重传,这样可能致使每次链接传送的数据量增大。另外一方面,在服务器不须要先前信息时它的应答就很快。

HTTP 的这种特性有优势也有缺点:

  • 优势:解放了服务器,每一次的请求“点到为止”,不会形成没必要要的链接占用

  • 缺点:每次请求会传输大量重复的内容信息,而且,在请求之间没法实现数据的共享

解决方案:

  1. 使用参数传递机制:
    将参数拼接在请求的 URL 后面,实现数据的传递(GET方式),例如:/param/list?username=wmyskxz
    问题:能够解决数据共享的问题,可是这种方式一不安全,二数据容许传输量只有1kb

  2. 使用 Cookie 技术

  3. 使用 Session 技术

14)Session、Cookie 与 Application

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

(1). Cookie 及其相关 API :

Cookie其实是一小段的文本信息。客户端请求服务器,若是服务器须要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie,而客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器,服务器检查该Cookie,以此来辨认用户状态。服务器还能够根据须要修改Cookie的内容。

(2). Session 及其相关 API:

一样地,会话状态也能够保存在服务器端。客户端请求服务器,若是服务器记录该用户状态,就获取Session来保存状态,这时,若是服务器已经为此客户端建立过session,服务器就按照sessionid把这个session检索出来使用;若是客户端请求不包含sessionid,则为此客户端建立一个session而且生成一个与此session相关联的sessionid,并将这个sessionid在本次响应中返回给客户端保存。保存这个sessionid的方式能够采用 cookie机制 ,这样在交互过程当中浏览器能够自动的按照规则把这个标识发挥给服务器;若浏览器禁用Cookie的话,能够经过 URL重写机制将sessionid传回服务器。

(3). Session 与 Cookie 的对比:

  • 实现机制:Session的实现经常依赖于Cookie机制,经过Cookie机制回传SessionID;

  • 大小限制:Cookie有大小限制而且浏览器对每一个站点也有cookie的个数限制,Session没有大小限制,理论上只与服务器的内存大小有关;

  • 安全性:Cookie存在安全隐患,经过拦截或本地文件找获得cookie后能够进行攻击,而Session因为保存在服务器端,相对更加安全;

  • 服务器资源消耗:Session是保存在服务器端上会存在一段时间才会消失,若是session过多会增长服务器的压力。

(4). Application:

Application(ServletContext):与一个Web应用程序相对应,为应用程序提供了一个全局的状态,全部客户均可以使用该状态。

15)滑动窗口机制

答:由发送方和接收方在三次握手阶段,互相将本身的最大可接收的数据量告诉对方。也就是本身的数据接收缓冲池的大小。这样对方能够根据已发送的数据量来计算是否能够接着发送。在处理过程当中,当接收缓冲池的大小发生变化时,要给对方发送更新窗口大小的通知。这就实现了流量的控制。

16)经常使用的HTTP方法有哪些?

答:

  • GET:用于请求访问已经被URI(统一资源标识符)识别的资源,能够经过URL传参给服务器

  • POST:用于传输信息给服务器,主要功能与GET方法相似,但通常推荐使用POST方式。

  • PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置。

  • HEAD:得到报文首部,与GET方法相似,只是不返回报文主体,通常用于验证URI是否有效。

  • DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。

  • OPTIONS:查询相应URI支持的HTTP方法。

17)常见HTTP状态码

答:

  1. 1xx(临时响应)

  2. 2xx(成功)

  3. 3xx(重定向):表示要完成请求须要进一步操做

  4. 4xx(错误):表示请求可能出错,妨碍了服务器的处理

  5. 5xx(服务器错误):表示服务器在尝试处理请求时发生内部错误

  6. 常见状态码:

  • 200(成功)

  • 304(未修改):自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容

  • 401(未受权):请求要求身份验证

  • 403(禁止):服务器拒绝请求

  • 404(未找到):服务器找不到请求的网页

18)SQL 注入

答:SQL注入就是经过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

(1).SQL注入攻击的整体思路:

  1. 寻找到SQL注入的位置

  2. 判断服务器类型和后台数据库类型

  3. 针对不通的服务器和数据库特色进行SQL注入攻击

(2). SQL注入攻击实例:

好比,在一个登陆界面,要求输入用户名和密码,能够这样输入实现免账号登陆:

用户名: ‘or 1 = 1 --密 码:复制代码

用户一旦点击登陆,如若没有作特殊处理,那么这个非法用户就很得意的登录进去了。这是为何呢?下面咱们分析一下:从理论上说,后台认证程序中会有以下的SQL语句:

String sql = “select * from user_table where username=’ “+userName+” ’ and password=’ “+password+” ‘”;

所以,当输入了上面的用户名和密码,上面的SQL语句变成:

SELECT * FROM user_table WHERE username=’’or 1 = 1 – and password=’’

分析上述SQL语句咱们知道,username=‘ or 1=1 这个语句必定会成功;而后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起做用。这样,上述语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

(3). 应对方法:

1.参数绑定:

使用预编译手段,绑定参数是最好的防SQL注入的方法。目前许多的ORM框架及JDBC等都实现了SQL预编译和参数绑定功能,攻击者的恶意SQL会被当作SQL的参数而不是SQL命令被执行。在mybatis的mapper文件中,对于传递的参数咱们通常是使用#和

不能识别此Latex公式:来获取参数值。当使用#时,变量是占位符,就是通常咱们使用javajdbc的PrepareStatement时的占位符,全部能够防止sql注入;当使用复制代码

时,变量就是直接追加在sql中,通常会有sql注入问题。

2.使用正则表达式过滤传入的参数

19)XSS 攻击

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

(1). XSS攻击的危害:

  • 盗取各种用户账号,如机器登陆账号、用户网银账号、各种管理员账号

  • 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

  • 盗窃企业重要的具备商业价值的资料

  • 非法转帐

  • 强制发送电子邮件

  • 网站挂马

  • 控制受害者机器向其它网站发起攻击

(2). 缘由解析:

  • 主要缘由:过于信任客户端提交的数据!

  • 解决办法:不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理而后方可进行下一步的操做。

  • 进一步分析细节:客户端提交的数据原本就是应用所须要的,可是恶意攻击者利用网站对客户端提交数据的信任,在数据中插入一些符号以及javascript代码,那么这些数据将会成为应用代码中的一部分了,那么攻击者就能够肆无忌惮地展开攻击啦,所以咱们毫不能够信任任何客户端提交的数据!!!

(3). XSS 攻击分类:

  • 1. 反射性 XSS 攻击(非持久性 XSS 攻击):

漏洞产生的缘由是攻击者注入的数据反映在响应中。一个典型的非持久性XSS攻击包含一个带XSS攻击向量的连接(即每次攻击须要用户的点击),例如,正常发送消息:

http://www.test.com/message.php?send=Hello,World!复制代码

接收者将会接收信息并显示Hello,World;可是,非正常发送消息:

http://www.test.com/message.php?send=<script>alert(‘foolish!’)</script>!复制代码

接收者接收消息显示的时候将会弹出警告窗口!

  • 2. 持久性XSS攻击 (留言板场景):

XSS攻击向量(通常指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。也就是说,每当用户使用浏览器打开指定页面时,脚本便执行。与非持久性XSS攻击相比,持久性XSS攻击危害性更大。从名字就能够了解到,持久性XSS攻击就是将攻击代码存入数据库中,而后客户端打开时就执行这些攻击代码。

例如,留言板表单中的表单域:

<input type=“text” name=“content” value=“这里是用户填写的数据”>复制代码

正常操做流程是:用户是提交相应留言信息 —— 将数据存储到数据库 —— 其余用户访问留言板,应用去数据并显示;而非正常操做流程是攻击者在value填写:

<script>alert(‘foolish!’);</script> <!--或者html其余标签(破坏样式)、一段攻击型代码-->复制代码

并将数据提交、存储到数据库中;当其余用户取出数据显示的时候,将会执行这些攻击性代码。

(4). 修复漏洞方针:

漏洞产生的根本缘由是 太相信用户提交的数据,对用户所提交的数据过滤不足所致使的,所以解决方案也应该从这个方面入手,具体方案包括:

  • 将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了(若是在cookie中设置了HttpOnly属性,那么经过js脚本将没法读取到cookie信息,这样能有效的防止XSS攻击);

  • 表单数据规定值的类型,例如:年龄应为只能为int、name只能为字母数字组合。。。。

  • 对数据进行Html Encode 处理

  • 过滤或移除特殊的Html标签,例如: <script><iframe> , < for <> for>&quot for

  • 过滤JavaScript 事件的标签,例如 “onclick=”, “onfocus” 等等。

须要注意的是,在有些应用中是容许html标签出现的,甚至是javascript代码出现。所以,咱们在过滤数据的时候须要仔细分析哪些数据是有特殊要求(例如输出须要html代码、javascript代码拼接、或者此表单直接容许使用等等),而后区别处理!

20)OSI 网络体系结构与 TCP/IP 协议模型

答:OSI 是一个理论上的网络通讯模型,而 TCP/IP 则是实际上的网络通讯标准。可是,它们的初衷是同样的,都是为了使得两台计算机可以像两个知心朋友那样可以互相准确理解对方的意思并作出优雅的回应。如今,咱们对 OSI 七层模型的各层进行简要的介绍:

 

1). 物理层

参考模型的最低层,也是OSI模型的第一层,实现了相邻计算机节点之间比特流的透明传送,并尽量地屏蔽掉具体传输介质和物理设备的差别,使其上层(数据链路层)没必要关心网络的具体传输介质。

2). 数据链路层(data link layer)

接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;一样,也未来自上层的数据帧,拆装为位流形式的数据转发到物理层。这一层在物理层提供的比特流的基础上,经过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的经过物理介质传输数据的方法。

3). 网络层

将网络地址翻译成对应的物理地址,并经过路由选择算法为分组经过通讯子网选择最适当的路径。

 

4). 传输层(transport layer)

在源端与目的端之间提供可靠的透明数据传输,使上层服务用户没必要关系通讯子网的实现细节。在协议栈中,传输层位于网络层之上,传输层协议为不一样主机上运行的进程提供逻辑通讯,而网络层协议为不一样主机提供逻辑通讯,以下图所示。

实际上,网络层能够看做是传输层的一部分,其为传输层提供服务。但对于终端系统而言,网络层对它们而言是透明的,它们知道传输层的存在,也就是说,在逻辑上它们认为是传输层为它们提供了端对端的通讯,这也是分层思想的妙处。

5). 会话层(Session Layer)

会话层是OSI模型的第五层,是用户应用程序和网络之间的接口,负责在网络中的两节点之间创建、维持和终止通讯。

6). 表示层(Presentation Layer):数据的编码,压缩和解压缩,数据的加密和解密

表示层是OSI模型的第六层,它对来自应用层的命令和数据进行解释,以确保一个系统的应用层所发送的信息能够被另外一个系统的应用层读取。

7). 应用层(Application layer):为用户的应用进程提供网络通讯服务

21)网络层的 ARP 协议工做原理?

答:地址解析协议(ARP) 是经过解析网路层地址来找寻数据链路层地址的一个在网络协议包中极其重要的网络传输协议。

网络层的ARP协议完成了IP地址与物理地址的映射。首先,每台主机都会在本身的ARP缓冲区中创建一个ARP列表,以表示IP地址和MAC地址的对应关系。当源主机须要将一个数据包要发送到目的主机时,会首先检查本身ARP列表中是否存在该IP地址对应的MAC地址:若是有,就直接将数据包发送到这个MAC地址;若是没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。网络中全部的主机收到这个ARP请求后,会检查数据包中的目的IP是否和本身的IP地址一致。若是不相同就忽略此数据包;若是相同,该主机首先将发送端的MAC地址和IP地址添加到本身的ARP列表中,若是ARP表中已经存在该IP的信息,则将其覆盖,而后给源主机发送一个ARP响应数据包,告诉对方本身是它须要查找的MAC地址;源主机收到这个ARP响应数据包后,将获得的目的主机的IP地址和MAC地址添加到本身的ARP列表中,并利用此信息开始数据的传输。若是源主机一直没有收到ARP响应数据包,表示ARP查询失败。

22)IP地址的分类

答:整个的因特网就是一个单一的、抽象的网络。IP 地址就是给因特网上的每个主机(或路由器)的每个接口分配一个在全世界范围是惟一的 32 位标识符,它是一个逻辑地址,用以屏蔽掉物理地址的差别。IP地址编址方案将IP地址空间划分为A、B、C、D、E五类,其中A、B、C是基本类,D、E类做为多播和保留使用,为特殊地址。

每一个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的全部主机都使用同一个网络ID,网络上的一个主机(包括网络上工做站,服务器和路由器等)有一个主机ID与其对应。A~E类地址的特色以下:

  • A类地址:以0开头,第一个字节范围:0~127;

  • B类地址:以10开头,第一个字节范围:128~191;

  • C类地址:以110开头,第一个字节范围:192~223;

  • D类地址:以1110开头,第一个字节范围为224~239;

  • E类地址:以1111开头,保留地址

 

1). A类地址:1字节的网络地址 + 3字节主机地址,网络地址的最高位必须是“0”

一个A类IP地址是指, 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。若是用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。A类IP地址中网络的标识长度为8位,主机标识的长度为24位,A类网络地址数量较少,有126个网络,每一个网络能够容纳主机数达1600多万台。

A类IP地址的地址范围1.0.0.0到127.255.255.255(二进制表示为:00000001 00000000 00000000 00000000 - 01111110 11111111 11111111 11111111),最后一个是广播地址。A类IP地址的子网掩码为255.0.0.0,每一个网络支持的最大主机数为256的3次方-2=16777214台。

2). B类地址: 2字节的网络地址 + 2字节主机地址,网络地址的最高位必须是“10”

一个B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码。若是用二进制表示IP地址的话,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为16位,主机标识的长度为16位,B类网络地址适用于中等规模的网络,有16384个网络,每一个网络所能容纳的计算机数为6万多台。

B类IP地址地址范围128.0.0.0-191.255.255.255(二进制表示为:10000000 00000000 00000000 00000000—-10111111 11111111 11111111 11111111),最后一个是广播地址。B类IP地址的子网掩码为255.255.0.0,每一个网络支持的最大主机数为256的2次方-2=65534台。

3). C类地址: 3字节的网络地址 + 1字节主机地址,网络地址的最高位必须是“110”

一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。若是用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为24位,主机标识的长度为8位,C类网络地址数量较多,有209万余个网络。适用于小规模的局域网络,每一个网络最多只能包含254台计算机。

C类IP地址范围192.0.0.0-223.255.255.255(二进制表示为: 11000000 00000000 00000000 00000000 - 11011111 11111111 11111111 11111111)。C类IP地址的子网掩码为255.255.255.0,每一个网络支持的最大主机数为256-2=254台。

4). D类地址:多播地址,用于1对多通讯,最高位必须是“1110”

  D类IP地址在历史上被叫作多播地址(multicast address),即组播地址。在以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的最高位必须是“1110”,范围从224.0.0.0到239.255.255.255。

5). E类地址:为保留地址,最高位必须是“1111”

23)IP地址与物理地址

答:物理地址是数据链路层和物理层使用的地址,IP地址是网络层和以上各层使用的地址,是一种逻辑地址,其中ARP协议用于IP地址与物理地址的对应。

24)影响网络传输的因素有哪些?

答:将一份数据从一个地方正确地传输到另外一个地方所须要的时间咱们称之为响应时间。影响这个响应时间的因素有不少。

  • 网络带宽:所谓带宽就是一条物理链路在 1s 内可以传输的最大比特数,注意这里是比特(bit)而不是字节数,也就是 b/s 。网络带宽确定是影响数据传输的一个关键环节,由于在当前的网络环境中,平均网络带宽只有 1.7 MB/s 左右。

  • 传输距离:也就是数据在光纤中要走的距离,虽然光的传播速度很快,但也是有时间的,因为数据在光纤中的移动并非走直线的,会有一个折射率,因此大概是光的 2/3,这个时间也就是咱们一般所说的传输延时。传输延时是一个没法避免的问题,例如,你要给在杭州和青岛的两个机房的一个数据库进行同步数据操做,那么一定会存在约 30ms 的一个延时。

  • TCP 拥塞控制:咱们知道 TCP 传输是一个 “停-等-停-等” 的协议,传输方和接受方的步调要一致,要达到步调一致就要经过拥塞控制来调节。TCP 在传输时会设定一个 “窗口”,这个窗口的大小是由带宽和 RTT(Round-Trip Time,数据在两端的来回时间,也就是响应时间)决定的。计算的公式是带宽(b/s)xRTT(s)。经过这个值就能够得出理论上最优的 TCP 缓冲区的大小。Linux 2.4 已经能够自动地调整发送端的缓冲区的大小,而到 Linux 2.6.7 时接收端也能够自动调整了。

相关文章
相关标签/搜索