计算机网络知识总结

本文主要是自己学习过程中的一些知识总结,文中有些图片来自经典的计算机网络书籍和一些大神的BLOG,如有错误,还请指正。

目录

一、概论

1、互联网的组成

2、计算机的时延

3、协议分层

二、物理层

1、物理层的四大特性

2、信息的通信方式

3、集线器:物理层

三、数据链路层

1、数据链路层的3个基本问题

2、PPP协议

3、数据链路层的以太网CSMA/CD

四、网络层

1、IP协议

2、IP数据报格式:首部最小20字节

3、网际控制报文协议ICMP

4、IP层的路由选择协议(内RIP、OSPF、外BGP边界网关)

5、IPv6

6、熟知端口号

五、传输层

1、用户数据报协议UDP

2、传输控制协议TCP

 六、应用层

1、域名系统DNS

2、文件传输协议FTP

七、HTTP相关

1、HTTP

2、加密和证书

3、HTTP和HTTPS

4、HTTP1.0、HTTP1.1和HTTP2.0

5、从输入网址到获得页面的网络请求过程

6、GET和POST的区别

7、cookie和session的区别

8、如何理解HTTP协议是无状态的?

9、什么是短连接和长连接

八、网络安全

1、跨站脚本攻击XSS

2、跨站请求伪造CSRF

3、SQL 注入攻击

4、拒绝服务攻击DoS

5、I/O复用select/poll/epoll)


一、概论

1、互联网的组成

答:分为边缘部分和核心部分,边缘部分有C/S和P2P两种方式;核心部分主要有3种方式:电路交换、分组交换和报文交换。

2、计算机的时延

答:发送时延、传播时延长、处理时延、排队时延。

3、协议分层

答:(1)分层的好处:

A、各层之间独立;B、灵活性好C、结构上可分开D、易于实现和维护E、能促进标准化工作

(2)各层应该实现的功能:

A、差错控制;B、流量控制C、分段和重组D、复用和分用E、连接建立和释放

(3)协议层次:

    

二、物理层

1、物理层的四大特性

2、信息的通信方式

答:单工、半双工和全双工。

3、集线器:物理层

       中间设备:

三、数据链路层

1、数据链路层的3个基本问题

答:封装成帧(SOH、EOT)、透明传输(字节填充)、差错控制(循环冗余检测)。

2、PPP协议

答:(1)组成及工作状态:

(2)帧格式

3、数据链路层的以太网CSMA/CD

答:(1)以太网的工作方式

(2)CSMA\CD协议——协调总线上各计算机的工作,只能使用半双工通信

截断二进制指数退避、争用期51.2us、帧间最小间隔9.6us

       截断二进制指数退避:确定碰撞后的重传时机。

       CSMA\CD的流程:

(3)MAC层:6字节,48位

四、网络层

1IP协议

答:(1)分层:

(2)分类的IP地址:32位

       两级的IP地址:

       重要特点:4个

(3)地址解析协议ARP

为什么要采用抽象的IP地址而不是直接使用硬件地址?

2IP数据报格式:首部最小20字节

(1)IP数据报的格式

2)固定部分的字段

3)可变部分的字段

(4)IP层转发分组的流程

(5)划分子网

子网掩码:将IP地址与子网掩码转化为二进制再相与就可得到网络地址

       使用子网时的分组转发:

(6)构建超网

3、网际控制报文协议ICMP

答:(1)格式:

(2)2种类型:差错报告报文ICMP询问报文

(3)重要应用    

Aping

ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。

ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。

BTraceroute

Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。

Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。

4IP层的路由选择协议(内RIPOSPF、外BGP边界网关)

答:(1)总体划分:

(2)RIP协议:距离向量协议、UDP报文(20字节)

       距离向量算法

(3)内部网络协议OSPF:IP报文(24字节)

(4)外部网关协议BGP:TCP连接

5IPv6

答:(1)组成:

(2)IPv4向IPv6过渡

       双协议栈隧道技术

6、熟知端口号

答:服务器端口号客户端口号

五、传输层

1、用户数据报协议UDP

答:(1)特点

(2)首部格式

2、传输控制协议TCP

答:

(1)特点:

(2)TCP的连接

(3)TCP报文段:首部最小20个字节

4TCP可靠传输的实现:滑动窗口、超时重传和选择确认

A、滑动窗口

       A的发送窗口:

       B的接收窗口:

       4点需要注意的地方:

B、超时重传:每次重传的时候把新的重传时间设置为旧的重传时间的2

C、选择确认

5TCP流量控制:利用滑动可变窗口实现并设置持续计时器防止死锁

6TCP拥塞控制:慢开始、拥塞避免、快重传、快恢复——都是基于拥塞窗口的机制

A、拥塞控制与流量控制的区别

B、慢开始

C、拥塞避免:引入慢开始门限,加法增大

D、快重传:让发送方尽快知道发生了个别报文段的丢失

E、快恢复:丢失个别报文段使用快恢复

F、主动队列管理RED:避免发生网络中的全局同步现象,如RED

7TCP运输连接管理:3次握手4次挥手

A、3次握手

       为什么采用3次握手?

B、4次挥手

       为什么等待2MSL

为什么会出现大量的time_wait状态?

由于主动关闭TCP连接的一方才会进入TIME_WAIT状态,一般情况服务器端不会出现TIME_WAIT状态,因为大多数情况都是客户端主动发起连接并主动关闭连接。但是某些服务如pop/smtp、ftp却是服务端收到客户端的QUIT命令后主动关闭连接,这就造成这类服务器上容易出现大量的TIME_WAIT状态的连接,而且并发量越大处于此种状态的连接越多。另外,对于被动关闭连接的服务在主动关闭客户端非法请求或清理长时间不活动的连接时(这种情况很可能是客户端程序忘记关闭连接)也会出现TIME_WAIT的状态。

8)解释RTORTT和超时重传

1、超时重传:发送端发送报文后若长时间未收到确认的报文则需要重发该报文。可能有以下几种情况:

发送的数据没能到达接收端,所以对方没有响应。

接收端接收到数据,但是ACK报文在返回过程中丢失。

接收端拒绝或丢弃数据。

2RTO从上一次发送数据,因为长期没有收到ACK响应,到下一次重发之间的时间。就是重传间隔。

通常每次重传RTO是前一次重传间隔的两倍,计量单位通常是RTT。例:1RTT,2RTT,4RTT,8RTT......

重传次数到达上限之后停止重传。

3RTT数据从发送到接收到对方响应之间的时间间隔,即数据报在网络中一个往返用时。大小不稳定。

 六、应用层

1、域名系统DNS

答:解析过程

2、文件传输协议FTP

答:(1)工作步骤:

(2)两个连接

七、HTTP相关

1HTTP

答:(1)特点:面向事务的、无连接的、无状态的

(2)HTTP1.0和HTTP1.1

(3)报文结构

HEAD获取报文首部

和 GET 方法一样,但是不返回报文实体主体部分。主要用于确认 URL 的有效性以及资源更新的日期时间等。

PUT上传文件

由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。

PATCH对资源进行部分修改

PUT 也可以用于修改资源,但是只能完全替代原始资源,PATCH 允许部分修改。

DELETE删除文件

与 PUT 功能相反,并且同样不带验证机制。

OPTIONS查询支持的方法

查询指定的 URL 能够支持的方法。

CONNECT要求在与代理服务器通信时建立隧道

使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

4)状态码

A1XX 信息

100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。

B2XX 成功

200 OK

204 No Content :请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。

206 Partial Content :表示客户端进行了范围请求。响应报文包含由 Content-Range 指定范围的实体内容。

C3XX 重定向

301 Moved Permanently :永久性重定向

302 Found :临时性重定向

303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。

注:虽然 HTTP 协议规定 301、302 状态下重定向时不允许把 POST 方法改成 GET 方法,但是大多数浏览器都会在 301、302 和 303 状态下的重定向把 POST 方法改成 GET 方法。

304 Not Modified :如果请求报文首部包含一些条件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不满足条件,则服务器会返回 304 状态码。

307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。

D4XX 客户端错误

400 Bad Request :请求报文中存在语法错误。

401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。

403 Forbidden :请求被拒绝,服务器端没有必要给出拒绝的详细理由。

404 Not Found

E5XX 服务器错误

500 Internal Server Error :服务器正在执行请求时发生错误。

503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

2、加密和证书

答:(1)加密:2种

A、对称加密技术

加密和解密使用相同的密钥的加密算法。有时又叫传统加密算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥或者单密钥算法,常见的对称加密有DES(Data Encryption Standard)、AES(Advanced Encryption Standard)、RC4、IDEA。

       B、非对称加密技术:

       非对称加密算法有两个密钥:公开密钥(public key)和私有密钥(private key);并且加密密钥和解密密钥是成对出现的。非对称加密算法在加密和解密过程使用了不同的密钥,非对称加密也称公钥加密,在密钥对中,其中一个密钥是对外公开的,所有都可以获取到,称为公钥,其中一个密钥是不公开的称为私钥。非对称加密算法对加密内容的长度有限制,不能超过公钥长度。常见的非对称加密RSA、DSA/DSS等。

(2)数字摘要

       数字摘要是采用单项Hash函数将需要加密的明文"摘要"成一串固定长度(128位)的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文摘要必定一定。“数字摘要”是https能确保数据完整性和防篡改的根本原因。常用的摘要主要有MD5、SHA1、SHA256等。

A、散列函数

B、MD5

C、SHA

(3)数字签名

数字签名技术就是对"非对称密钥加解密"和"数字摘要"两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一起传送给接受者。接受者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原因产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输的过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

       A、数字签名的过程:

明文——>hash运算——>摘要——>私钥加密——>数字签名

B、数字签名的两种功效:

              1、能确定消息确实由发送方签名并发出来的,因为别人假冒不了发送方的签名。

2、数字签名能确定消息的完整性。

(4)数字证书

A、数字证书的颁发过程:

用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发送给用户一个数字证书,该证书内包含用户的人信息和他的公钥信息,同时还附有认证中心的签名信息(根证书私钥)签名。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布,数字证书各不相同,每种证书可提供不同级别的可信度。

B、证书包含哪些内容

1、证书颁发机构的名称

2、证书本身的数字签名

3、证书持有者的公钥

4、证书签名用到的Hash算法

C、验证证书的有效性

浏览器默认都是会内置CA跟证书,其中根证书包含了CA的公钥。

3HTTPHTTPS

答:1)概念:

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

2)区别

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

3HTTP的工作原理

1、地址解析,需要域名系统DNS解析域名localhost.com,得主机的IP地址

2、封装HTTP请求数据包,把以上部分结合本机自己的信息,封装成一个HTTP请求数据包

3、封装成TCP包,建立TCP连接(TCP的三次握手)

4、客户机发送请求命令,建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。

5、服务器响应

服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

6、服务器关闭TCP连接

4HTTPS的工作原理

1、客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

2、Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥S)传送一份给客户端。

3、客户端首先验证服务器证书S,然后与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。

4、客户端根据双方同意的安全等级,建立会话密钥C,然后利用网站的公钥S将会话密钥加密,并传送给Web服务器。

5、Web服务器利用自己的私钥解密出会话密钥,并将需要传递的数据用私钥加密并发送。

6、客户端收到数据用私钥解密即可。

4HTTP1.0HTTP1.1HTTP2.0

答:1HTTP1.0 HTTP 1.1主要区别

A、长连接

HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。

HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用个长连接来发多个请求。

B、节约带宽

HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。

这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

另外HTTP还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础。

CHOST

现在可以web server例如tomat,设置虚拟站点是非常常见的,也即是说,web server上的多个虚拟站点可以共享同一个ip和端口。HTTP1.0是没有host域的,HTTP1.1才支持这个参数。

D、流水线(Pipelining

请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。例如:一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。 HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容。

2HTTP1.1 HTTP 2.0主要区别

A、多路复用

HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。

B、数据压缩

HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。

C、服务器推送

当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。

D、新的二进制格式

HTTP 1.x的解析是基于文本。基于文本的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合,基于这种考虑HTTP2.0的协议解析决定采用二进制分帧格式,实现方便且健壮。

5、从输入网址到获得页面的网络请求过程

答:

1)查询 DNS

浏览器搜索自身的DNS缓存

搜索操作系统的DNS缓存,本地host文件查询

如果 DNS 服务器和我们的主机在同一个子网内,系统会按照下面的 ARP 过程对 DNS 服务器进行 ARP查询

如果 DNS 服务器和我们的主机在不同的子网,系统会按照下面的 ARP 过程对默认网关进行查询

2)浏览器获得域名对应的IP地址后,发起三次握手

3TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了

4TLS 握手

1、客户端发送一个 ClientHello 消息到服务器端,消息中同时包含了它的 Transport Layer Security (TLS) 版本,可用的加密算法和压缩算法。

2、服务器端向客户端返回一个 ServerHello 消息,消息中包含了服务器端的TLS版本,服务器所选择的加密和压缩算法,以及数字证书认证机构(Certificate Authority,缩写 CA)签发的服务器公开证书,证书中包含了公钥。客户端会使用这个公钥加密接下来的握手过程,直到协商生成一个新的对称密钥

3、客户端根据自己的信任CA列表,验证服务器端的证书是否可信。如果认为可信,客户端会生成一串伪随机数,使用服务器的公钥加密它。这串随机数会被用于生成新的对称密钥

4、服务器端使用自己的私钥解密上面提到的随机数,然后使用这串随机数生成自己的对称主密钥

5、客户端发送一个 Finished 消息给服务器端,使用对称密钥加密这次通讯的一个散列值

6、服务器端生成自己的 hash 值,然后解密客户端发送来的信息,检查这两个值是否对应。如果对应,就向客户端发送一个 Finished 消息,也使用协商好的对称密钥加密

7、从现在开始,接下来整个 TLS 会话都使用对称秘钥进行加密,传输应用层(HTTP)内容

5HTTP 服务器请求处理

HTTPD(HTTP Daemon)在服务器端处理请求/响应。最常见的 HTTPD 有 Linux 上常用的 Apache 和 nginx,以及 Windows 上的 IIS。

HTTPD 接收请求

服务器把请求拆分为以下几个参数:

HTTP 请求方法(GET, POST, HEAD, PUT, DELETE, CONNECT, OPTIONS, 或者 TRACE)。直接在地址栏中输入 URL 这种情况下,使用的是 GET 方法域名:google.com请求路径/页面:/ (我们没有请求google.com下的指定的页面,因此 / 是默认的路径)

服务器验证其上已经配置了 google.com 的虚拟主机

服务器验证 google.com 接受 GET 方法

服务器验证该用户可以使用 GET 方法(根据 IP 地址,身份信息等)

如果服务器安装了 URL 重写模块(例如 Apache 的 mod_rewrite 和 IIS 的 URL Rewrite),服务器会尝试匹配重写规则,如果匹配上的话,服务器会按照规则重写这个请求

服务器根据请求信息获取相应的响应内容,这种情况下由于访问路径是 "/" ,会访问首页文件(你可以重写这个规则,但是这个是最常用的)。

服务器会使用指定的处理程序分析处理这个文件,假如 Google 使用 PHP,服务器会使用 PHP 解析 index 文件,并捕获输出,把 PHP 的输出结果返回给请求者

6)服务器接受到这个请求,根据路径参数,经过后端的一些处理生成HTML页面代码返回给浏览器

7)浏览器拿到完整的HTML页面代码开始解析和渲染,如果遇到引用的外部js,CSS,图片等静态资源,它们同样也是一个个的HTTP请求,都需要经过上面的步骤

8)浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给用户

6GETPOST的区别

答:

1)作用

GET 用于获取资源,而 POST 用于传输实体主体。

2)参数

GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中,而 POST 的参数存储在实体主体中。不能因为 POST 参数存储在实体主体中就认为它的安全性更高,因为照样可以通过一些抓包工具(Fiddler)查看。

3)安全

安全的 HTTP 方法不会改变服务器状态,也就是说它只是可读的。

GET 方法是安全的,而 POST 却不是,因为 POST 的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。

安全的方法除了 GET 之外还有:HEAD、OPTIONS。不安全的方法除了 POST 之外还有 PUT、DELETE。

4)幂等性

幂等的 HTTP 方法,同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。换句话说就是,幂等方法不应该具有副作用(统计用途除外)。

所有的安全方法也都是幂等的。在正确实现的条件下,GET,HEAD,PUT 和 DELETE 等方法都是幂等的,而 POST 方法不是。

5)可缓存

如果要对响应进行缓存,需要满足以下条件:

请求报文的 HTTP 方法本身是可缓存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可缓存,POST 在多数情况下不可缓存的。

响应报文的状态码是可缓存的,包括:200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501。

响应报文的 Cache-Control 首部字段没有指定不进行缓存。

6)数据包

GET产生一个TCP数据包;POST产生两个TCP数据包。

7cookiesession的区别

答:1Cookie

       Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。它用于告知服务端两个请求是否来自同一浏览器,并保持用户的登录状态。

1、用途

会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)

个性化设置(如用户自定义设置、主题等)

浏览器行为跟踪(如跟踪分析用户行为等)

2、创建过程

       服务器发送的响应报文包含 Set-Cookie 首部字段,客户端得到响应报文后把 Cookie 内容保存到浏览器中。

       客户端之后对同一个服务器发送请求时,会从浏览器中读出 Cookie 信息通过 Cookie 请求首部字段发送给服务器。

3、分类

       会话期 Cookie:浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。

持久性 Cookie:指定一个特定的过期时间(Expires)或有效期(max-age)之后就成为了持久性的 Cookie。

2Session

Session 可以存储在服务器上的文件、数据库或者内存中,现在最常见的是将 Session 存储在内存型数据库中,比如 Redis。

       使用 Session 维护用户登录的过程如下:

A、用户进行登录时,用户提交包含用户名和密码的表单,放入 HTTP 请求报文中;

B、服务器验证该用户名和密码;

C、如果正确则把用户信息存储到 Redis 中,它在 Redis 中的 ID 称为 Session ID;

D、服务器返回的响应报文的 Set-Cookie 首部字段包含了这个 Session ID,客户端收到响应报文之后将该 Cookie 值存入浏览器中;

E、客户端之后对同一个服务器进行请求时会包含该 Cookie 值,服务器收到之后提取出 Session ID,从 Redis 中取出用户信息,继续之后的业务操作。

       应该注意 Session ID 的安全性问题,不能让它被恶意攻击者轻易获取,那么就不能产生一个容易被猜到的 Session ID 值。此外,还需要经常重新生成 Session ID。在对安全性要求极高的场景下,例如转账等操作,除了使用 Session 管理用户状态之外,还需要对用户进行重新验证,比如重新输入密码,或者使用短信验证码等方式。

3)区别

1、Cookie 只能存储 ASCII 码字符串,而 Session 则可以存取任何类型的数据,因此在考虑数据复杂性时首选 Session;

2、Cookie 存储在浏览器中,容易被恶意查看。如果非要将一些隐私数据存在 Cookie 中,可以将 Cookie 值进行加密,然后在服务器进行解密;

3、对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的,因此不建议将所有的用户信息都存储到 Session 中。

8、如何理解HTTP协议是无状态的?

答:HTTP协议是无状态的(stateless),指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。

缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

9、什么是短连接和长连接

答:在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

八、网络安全

1、跨站脚本攻击XSS

答:1)概念

XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

2)危害

       1、窃取用户的 Cookie 值

2、伪造虚假的输入表单骗取个人信息

3、显示伪造的文章或者图片

3)防范

A、设置 Cookie 为 HttpOnly

设置了 HttpOnly 的 Cookie 可以防止 JavaScript 脚本调用,就无法通过 document.cookie 获取用户 Cookie 信息。

B、过滤特殊字符

例如将 < 转义为 &lt;,将 > 转义为 &gt;,从而避免 HTML 和 Jascript 代码的运行。

2跨站请求伪造CSRF

答:1)概念

跨站请求伪造(Cross-site request forgery,CSRF),是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。

XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户浏览器的信任。

2)与XSS的区别

       xss原理上利用的是浏览器可以拼接成任意的javascript,然后黑客拼接好javascript让浏览器自动地给服务器端发出多个请求(get、post请求)。 csrf原理上利用的是网站服务器端所有参数都是可预先构造的原理,然后黑客拼接好具体请求url,可以引诱你提交他构造好的请求。

3)防范

A、检查Referer字段

HTTP请求head里有个Referer字段,用于表明请求的来源地址。正常情况下,Referer字段和请求的地址是位于同一域名下的,如果是CSRF攻击发起的请求,那么Referer字段和请求的地址就不是同一域名了,那么服务器就能识别出恶意访问。设置了 HttpOnly 的 Cookie 可以防止 JavaScript 脚本调用,就无法通过 document.cookie 获取用户 Cookie 信息。

B、添加校验token

当用户正常访问网站时,服务器会生产一个随机数,并且把该随机数埋入该页面里(一般放在form表单,<input type="hidden" name="_csrf_token" value="xxxx">)。正常访问,客户的浏览器是能够得到并且返回该字段,而CSRF一开始是不知道该字段的数值,服务器接受请求发现该字段的异常,从而拒绝该请求。

3SQL 注入攻击

答:1)概念

所谓SQL注入,是将客户机提交或Web表单递交的数据,拼接成SQL语句字符串时。如果客户端提交的数据有非法字符或SQL语句关键字时,会造成执行的SQL语句语法错误,或执行结果不正确的情况。通过SQL注入,黑客可以最终达到欺骗服务器,执行恶意的SQL语句,甚至破坏数据库结构的目的。

2)防范

       A、使用参数化查询

Java 中的 PreparedStatement 是预先编译的 SQL 语句,可以传入适当参数并且多次执行。由于没有拼接的过程,因此可以防止 SQL 注入的发生。

       B、单引号转换

将传入的参数中的单引号转换为连续两个单引号,PHP 中的 Magic quote 可以完成这个功能。

4、拒绝服务攻击DoS

答:1)概念

拒绝服务攻击(denial-of-service attack,DoS),亦称洪水攻击,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。

分布式拒绝服务攻击(distributed denial-of-service attack,DDoS),指攻击者使用网络上两个或以上被攻陷的电脑作为“僵尸”向特定的目标发动“拒绝服务”式攻击。

2)防范

没有根治的办法,除非不用TCP/IP链接

A、确保服务器的系统文件是最新版本,并及时更新系统补丁

B、关闭不必要的服务

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

D、缩短SYN半连接的time out时间

E、正确设置防火墙

F、禁止对主机的非开放服务的访问

G、限制特定IP短地址的访问

H、启用防火墙的防DDos的属性

I、严格限制对外开放的服务器的向外访问

J、运行端口映射程序祸端口扫描程序,要认真检查特权端口和非特权端口。

K、认真检查网络设备和主机/服务器系统的日志。只要日志出现漏洞或是时间变更,那这台机器就可能遭到了攻击。

L、限制在防火墙外与网络文件共享。这样会给黑客截取系统文件的机会,主机的信息暴露给黑客,无疑是给了对方入侵的机会。

5I/O复用select/poll/epoll

答:select/poll/epoll 都是 I/O 多路复用的具体实现,select 出现的最早,之后是 poll,再是 epoll。

(1)select

有三种类型的描述符类型:readset、writeset、exceptset,分别对应读、写、异常条件的描述符集合。fd_set 使用数组实现,数组大小使用 FD_SETSIZE 定义。

              timeout 为超时参数,调用 select 会一直阻塞直到有描述符的事件到达或者等待的时间超过 timeout。

成功调用返回结果大于 0,出错返回结果为 -1,超时返回结果为 0。

(2)poll

pollfd 使用链表实现。

(3)select和poll比较

1、功能

select 和 poll 的功能基本相同,不过在一些实现细节上有所不同。

A、select 会修改描述符,而 poll 不会;

B、select 的描述符类型使用数组实现,FD_SETSIZE 大小默认为 1024,因此默认只能监听 1024 个描述符。如果要监听更多描述符的话,需要修改 FD_SETSIZE 之后重新编译;而 poll 的描述符类型使用链表实现,没有描述符的数量的限制;

C、poll 提供了更多的事件类型,并且对描述符的重复利用上比 select 高。

D、如果一个线程对某个描述符调用了 select 或者 poll,另一个线程关闭了该描述符,会导致调用结果不确定。

2. 速度

select 和 poll 速度都比较慢。

A、select 和 poll 每次调用都需要将全部描述符从应用进程缓冲区复制到内核缓冲区。

B、select 和 poll 的返回结果中没有声明哪些描述符已经准备好,所以如果返回值大于 0 时,应用进程都需要使用轮询的方式来找到 I/O 完成的描述符。

3. 可移植性

几乎所有的系统都支持 select,但是只有比较新的系统支持 poll。

(4)epoll

epoll_ctl() 用于向内核注册新的描述符或者是改变某个文件描述符的状态。已注册的描述符在内核中会被维护在一棵红黑树上,通过回调函数内核会将 I/O 准备好的描述符加入到一个链表中管理,进程调用 epoll_wait() 便可以得到事件完成的描述符。

从上面的描述可以看出,epoll 只需要将描述符从进程缓冲区向内核缓冲区拷贝一次,并且进程不需要通过轮询来获得事件完成的描述符。

epoll 仅适用于 Linux OS。

epoll 比 select 和 poll 更加灵活而且没有描述符数量限制。

epoll 对多线程编程更有友好,一个线程调用了 epoll_wait() 另一个线程关闭了同一个描述符也不会产生像 select 和 poll 的不确定情况。

(5)工作场景

1、select 应用场景

select 的 timeout 参数精度为 1ns,而 poll 和 epoll 为 1ms,因此 select 更加适用于实时要求更高的场景,比如核反应堆的控制。

select 可移植性更好,几乎被所有主流平台所支持。

2、poll 应用场景

poll 没有最大描述符数量的限制,如果平台支持并且对实时性要求不高,应该使用 poll 而不是 select。

需要同时监控小于 1000 个描述符,就没有必要使用 epoll,因为这个应用场景下并不能体现 epoll 的优势。

需要监控的描述符状态变化多,而且都是非常短暂的,也没有必要使用 epoll。因为 epoll 中的所有描述符都存储在内核中,造成每次需要对描述符的状态改变都需要通过 epoll_ctl() 进行系统调用,频繁系统调用降低效率。并且epoll 的描述符存储在内核,不容易调试。

3、epoll 应用场景

只需要运行在 Linux 平台上,并且有非常大量的描述符需要同时轮询,而且这些连接最好是长连接。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值