我是靠谱客的博主 天真小虾米,最近开发中收集的这篇文章主要介绍计算机网络总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

计算机网络总结

      • 1. OSI网络模型与TCP/IP网络模型
      • 2. 三次握手
      • 3. 四次挥手
      • 4. TCP与UDP的区别
      • 5. HTTP/1.0,HTTP/1.1和HTTP/2.0的区别
      • 6. ARP协议
      • 7. DNS服务的寻址过程
      • 8. URI和URL
      • 9.HTTP协议相关知识点
        • HTTP方法
        • GET方法和POST方法的区别
        • 使用Cookie的状态管理
        • HTTP报文结构
        • 报文主体和实体主体的差异
        • 内容协商技术
      • 10. HTTP状态码
        • 10.1 2XX 成功
        • 10.2 3XX 重定向
        • 10.3 4XX 客户端错误
        • 10.4 5XX 服务器错误
      • 11. 从输入网址到获得页面的全过程(用户访问某网站的全过程/URL响应过程)
      • 12. HTTP和HTTPS的区别
      • 13. 为什么不能一直使用HTTPS呢?
      • 14. HTTPS的工作原理?
      • 15. 共享密钥加密(对称密钥加密)和公开密钥加密(非对称密钥加密)
      • 16. 什么是“中间人攻击”?
      • 17. 什么是无状态协议?HTTP是无状态协议吗?怎么解决?
      • 18. Cookie和Session的区别?
      • 19. 跨站脚本攻击(XSS),SQL注入攻击,DDOS攻击?
      • 20.客户端不断请求连接会怎么样?DDos攻击?

1. OSI网络模型与TCP/IP网络模型

(1)OSI网络模型

OSI七层模型功能TCP/IP协议族
应用层文件传输,文件服务,电子邮件,虚拟终端FTP(文件传输协议),DNS(域名系统),HTTP(超文本传输协议)等
表示层代码转换,数据加密,数据格式化没有协议
会话层建立或解除与别的接点的联系没有协议
传输层提供端对端的接口TCP(传输控制协议),UDP(用户数据报协议)
网络层为数据包选择路由IP等
数据链路层传输有地址的帧以及错误检测功能以太网协议
物理层以二进制数据形式在物理媒体上传输数据ISO2110,IEEE802,IEEE802.2

(2)TCP/IP网络模型

TCP/IP四层模型功能TCP/IP协议族
应用层向用户提供应用服务时通信的活动FTP(文件传输协议),DNS(域名系统),HTTP(超文本传输协议)等
传输层提供处于网络连接中两台计算机之间的数据传输TCP(传输控制协议),UDP(用户数据报协议)
网络层(网络互连层)处理网络上流动的数据包(数据包是网络传输的最小数据单位),该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方IP等
链路层(数据链路层,网络接口层)处理连接网络的硬件部分ARP等

2. 三次握手

“三次握手”即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在TCP协议中,主动发起请求的一端称为“客户端”,被动连接的一端称为“服务端”。不管是客户端还是服务端,TCP连接建立完后都能发送和接收数据。
在这里插入图片描述
最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接(A作为客户端),而B被动打开连接(B作为服务端)。
A、B处于关闭状态CLOSED---->B处于收听状态LISTEN---->A处于同步已发送状态SYN-SENT---->B处于同步收到状态SYN-RCVD---->A进入连接已建立状态ESTABLISHED---->B也进入连接已建立状态ESTABLISHED。

B的TCP服务器进程先创建传输控制块TCB(Transmission Control Block),准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。若有,则作出响应。

(1)第一次握手:客户端A的TCP客户进程也是首先创建传输控制块TCB,然后向B发出连接请求报文段(首部的同步标志位SYN=1,随机产生一个初始序号seq=x,注意:SYN=1的报文段不能携带数据,但要消耗掉一个序号),此时TCP客户进程进入SYN-SENT(同步已发送)状态,等待服务端B确认。
(2)第二次握手:服务端B收到连接请求报文段后,如果同意建立连接,则向客户端A发送确认报文段(标志位SYN=1,标志位ACK=1,确认号等于收到序号加1即ack=x+1,随机产生一个序号seq=y),此时TCP服务器进程进入SYN-RCVD(同步收到)状态;
(3)第三次握手:客户端A收到来自服务端B的确认后,要检查确认号ack是否为x+1以及标志位ACK是否为1,如果正确则向服务端B发送确认报文段(将标志位ACK=1,确认号等于收到序号加1即ack=y+1,序号seq=x+1,因为A发送第一个报文段时初始序号为seq=x,所以A发送第二个报文段时序号要加1即seq=x+1)并将数据包发送给服务端B;之后服务端B检查确认号ack是否为y+1以及标志位ACK是否为1,如果正确则连接成功。TCP连接已经建立,客户端A进入ESTABLISHED(已建立连接)状态。当服务端B收到客户端A的确认后,也进入ESTABLISHED(已建立连接)状态。这样就完成了三次握手,随后客户端A和服务端B之间就可以开始传送数据了。

为什么建立TCP连接需要三次握手,而不是两次握手?
答:防止失效的连接请求报文段(若客户端向服务端发送的连接请求丢失,客户端等待应答超时后就会再次发送连接请求,此时,上一个连接请求就是『失效的』)被服务端接收,从而产生错误。
若建立TCP连接只需要两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答(确认报文段)后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便会超时重发请求,如果服务端正确接收了这个重发的连接请求并确认应答就进入了ESTABLISHED状态,在客户端收到了服务端的确认应答后就进入了ESTABLISHED状态,之后双方便开始通信,通信结束后释放连接,通信双方都进入了CLOSED状态。此时,如果那个『失效的』连接请求到达了服务端,由于只有两次握手,服务端收到请求后就又会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,那么服务端将会一直等待下去,这样就会浪费服务端连接资源。

3. 四次挥手

“四次挥手”即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。
在这里插入图片描述
数据传送结束后,此时客户端A和服务端B仍处于ESTABLISHED状态,通信的双方都可以释放连接。
A、B处于连接建立状态ESTABLISHED---->A处于终止等待1状态FIN-WAIT-1---->B处于关闭等待状态CLOSE-WAIT---->A处于终止等待2状态FIN-WAIT-2---->B处于最后确认状态LAST-ACK---->A处于时间等待状态TIME-WAIT---->B进入关闭状态CLOSED---->A在等待2MSL后也进入关闭状态CLOSED。

(1)第一次挥手:客户端A的TCP客户进程先向服务端B发出连接释放报文段(标志位FIN=1,并随机产生一个初始序号seq=u),并停止再发送数据,主动关闭客户端到服务器的TCP连接,进入FIN-WAIT-1(终止等待1)状态,等待B的确认。
(2)第二次挥手:服务端B收到连接释放报文段后即发出确认报文段(标志位ACK=1,确认号为收到序号加1即ack=u+1,并随机产生一个序号seq=v),B进入CLOSE-WAIT(关闭等待)状态,此时的TCP处于半关闭状态,A到B的连接释放。客户端A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。
(3)第三次挥手:如果服务端B没有要向A发出的数据了,则B发出连接释放报文段(标志位FIN=1,标志位ACK=1,确认号为收到序号加1即ack=u+1,并随机产生一个序号seq=w),B进入LAST-ACK(最后确认)状态,等待A的确认。
(4)第四次挥手:客户端A收到服务端B的连接释放报文段后,对此发出确认报文段(标志位ACK=1,确认号为收到序号加1即ack=w+1,序号seq=u+1,因为A发送第一个报文段时初始序号为seq=u,所以A发送第二个报文段时序号要加1即seq=u+1),A进入TIME-WAIT(时间等待)状态。当服务端B收到了来自A的确认后,B就进入了关闭状态CLOSED。但此时TCP连接还未释放掉,需要经过时间等待计时器所设置的时间2MSL后,A才会进入关闭状态CLOSED。

为什么客户端A在TIME-WAIT状态需要等待2MSL(MSL:Maximum Segment Lifetime,最长报文段寿命)后才能进入CLOSED状态?
答:(1)保证客户端A发送的最后一个ACK报文段(确认报文段)能够到达服务端B:这个ACK报文段有可能丢失,使得处于LAST-ACK状态的B收不到对其已发送的FIN+ACK报文段的确认,导致B将超时重传FIN+ACK报文段,而A能在2MSL时间内收到这个重传的FIN+ACK报文段,接着A会重传一次ACK报文段,重新启动2MSL计时器,最后A和B都进入到CLOSED状态。如果A在TIME-WAIT状态不等待一段时间,而是发送完ACK报文段后立即释放连接进入CLOSED状态,则A就无法收到B重传的FIN+ACK报文段,A就不会再发送一次ACK报文段,则B就无法正常进入到CLOSED状态。
(2)防止“『已失效的』连接请求报文段”出现在新连接中:客户端A在发送完最后一个ACK报文段(确认报文段)后,A进入TIME-WAIT(时间等待)状态,再经过2MSL的时间,就可以使本连接持续时间内所产生的所有报文段都从网络中消失,从而使下一个新连接中不会出现这种旧连接中的请求报文段。

为什么建立TCP连接的时候需要三次握手,而关闭TCP连接的时候却需要四次挥手?
答:因为在建立TCP连接时,当服务端收到客户端的SYN报文段(连接请求报文段)后,可以直接发送SYN+ACK报文(SYN报文是用来同步的,ACK报文是用来应答的)。但是关闭TCP连接时,当服务端收到来自客户端的FIN报文段(连接释放报文段)时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文(确认报文段或者应答),告诉客户端"你发的FIN报文我收到了,但是你需要等到我的所有的报文都发送完了,我才能发送我的FIN+ACK报文来表示我同意关闭连接",因此服务端的确认报文段(ACK报文)和连接释放报文段(FIN+ACK报文)不能一起发送,故需要四次挥手才能关闭TCP连接。

4. TCP与UDP的区别

TCP(传输控制协议)和UDP(用户数据报协议)都是属于传输层的协议,它们之间的主要区别如下:
(1)TCP是面向连接的,UDP是无连接的;
(2)TCP是可靠传输,UDP是不可靠传输;
(3)TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;
(4)TCP是面向字节流的,UDP是面向报文的;
(5)TCP有拥塞控制机制,UDP没有拥塞控制机制(适合媒体通信);
(6)TCP的首部开销(20个字节)比UDP的首部开销(8个字节)要大。

5. HTTP/1.0,HTTP/1.1和HTTP/2.0的区别

HTTP/1.0:(1996年)
(1)HTTP/1.0仅仅提供了最基本的认证,这时候用户ID和密码未经加密因此容易受到窥探;
(2)HTTP/1.0默认使用短链接,即每次发送数据都会经过TCP的三次握手和四次挥手,效率比较低;
(3)HTTP/1.0只使用header中的If-Modified-Since(从何时修改)和Expires(有效期)作为缓存失效的标准;
(4)HTTP/1.0不支持断点续传,即每次都会传送全部的页面和数据;
(5)HTTP/1.0认为每台计算机只能绑定一个IP地址,因此请求消息中的URL并没有传递主机名。

HTTP/1.1:(1999年)
(1)HTTP/1.1使用摘要算法进行身份认证;
(2)HTTP/1.1默认使用长连接,即只需一次建立就可以多次传输数据,传输完成后,只需一次断开连接即可。长连接的连接时长可以通过请求头中的keep-alive来设置;
(3)HTTP/1.1中新增了E-tag,If-Unmodified-Since,If-Match,If-None-Match等缓存控制标头来控制缓存失效;
(4)HTTP/1.1支持断点续传,通过使用请求头中的Range来实现;
(5)HTTP/1.1使用了虚拟网络,在一台物理服务器上可以存在多个虚拟主机,并且它们共享一个IP地址。

HTTP/2.0:(2015年)
(1)头部压缩:由于HTTP/1.1经常会出现User-Agent,Cookie,Accept,Server,Range等字段可能会占用几百甚至几千字节,而body却经常只有几十字节,所以导致头部偏重,HTTP/2.0使用HPACK算法进行压缩;
(2)二进制格式:HTTP/2.0使用了更加接近TCP/IP的二进制格式而抛弃了ASCII码,提升了解析效率;
(3)强化安全:HTTP/2.0一般都跑在HTTPS上;
(4)多路复用:即每一个请求都是用作连接共享,一个请求对应一个ID,这样一个连接上可以有多个请求。

6. ARP协议

ARP(地址解析协议)是解决同一局域网(LAN)上的主机或路由器的IP地址和MAC地址(硬件地址,物理地址)的映射问题。ARP是一种用于解析地址的协议,根据通信方的IP地址就能反查出对应的MAC地址。
ARP解决这个问题的方法:在主机ARP高速缓存中存放一个从IP地址到MAC件地址的映射表。
主机A向主机B发送IP数据报,首先A会在其ARP高速缓存中查看有无B的IP地址,如果有就反查出其对应的MAC地址,再把这个MAC地址写入MAC帧。如果没有,主机A就会自行运行ARP,ARP进程在本局域网上广播发送一个ARP请求分组,在本局域网中的所有主机上运行的ARP进程都会收到这个ARP请求分组, 主机B收到这个请求分组后,就会向A发送一个ARP响应分组,并写入自己的MAC地址。主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址与MAC地址的映射。
PS:ARP是解决同一个局域网上的主机或者路由器的IP地址和MAC地址的映射问题。ARP请求是通过广播传送的,而ARP响应是通过单播传送的。
参考:https://blog.csdn.net/chenkaibsw/article/details/79772021

7. DNS服务的寻址过程

DNS(域名系统)是位于应用层的协议,负责域名到IP地址之间的解析服务。计算机既可以被赋予IP地址,也可以被赋予主机名和域名。用户通常使用主机名或者域名来访问对方计算机,而不是直接通过IP地址访问。DNS服务就提供通过域名查找IP地址或者逆向从IP地址反查域名的服务。

(1)在浏览器中输入域名(例如:www.qq.com),操作系统会先检查自己本地的Hosts文件(虽然引入了DNS服务,但是用于记录域名到IP地址映射关系的Hosts文件仍然保存在操作系统中,Hosts文件的优先级高于DNS查询,操作系统会先在Hosts文件中查找域名对应的IP地址)是否有这个网址映射关系,如果有,就调用这个IP地址映射,完成域名解析。
(2)如果Hosts文件中没有这个域名的映射,则查找本地DNS解析器缓存是否有这个网址映射关系,如果有,直接返回,完成域名解析。
(3)如果Hosts文件和本地DNS解析器缓存中都没有相应的网址映射关系,则首先会找到TCP/IP参数中设置的首选DNS服务器(称为本地DNS服务器),此服务器收到查询时,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户端,完成域名解析,此解析具有权威性。
(4)如果要查询的域名,不由本地DNS服务器本地区域文件解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
(5)如果本地DNS服务器本地区域文件解析和缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询。如果未设置转发器(未启用转发模式),则本地DNS服务器就把请求发送至13台根DNS服务器,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的IP信息。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器(qq.com)的IP地址给本地DNS服务器。当本地DNS服务器收到这个IP地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。如果设置转发器(启用转发模式),则本地DNS服务器就会把请求转发至上一级DNS服务器,由上一级DNS服务器进行解析,如果上一级DNS服务器仍不能解析,则或找根DNS服务器或把请求转发至上上级DNS服务器,以此循环。最后把结果返回给本地DNS服务器,再由此本地DNS服务器返回给客户端。
PS:从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间的交互查询就是迭代查询。
参考:https://blog.csdn.net/weixin_41910694/article/details/91960815

8. URI和URL

(1)URI是统一资源标识符,通过字符串来唯一标识一个互联网资源。(例如:通过身份证号“12345”这个字符串就可以唯一标识一个人:张三)
(2)URL是统一资源定位符,表示资源在互联网上所处的位置,可以提供该资源的路径,URL是URI的子集。(例如:通过地址“住址协议://地球/中国/陕西省/西安市/XX大学/7#518寝室/张三.人”来找到这个人)

9.HTTP协议相关知识点

客户端(发送请求):请求访问文本、图像等资源的一端。
HTTP请求报文段:请求方法(请求访问服务器的类型),请求URI(指明请求访问的资源对象),协议版本(同来提示客户端所使用的HTTP协议的功能),可选的请求首部字段,内容实体。
HTTP请求行:请求方法(请求访问服务器的类型),请求URI(指明请求访问的资源对象),协议版本(提示客户端使用的HTTP协议的功能)。
服务器端(响应回复):提供资源响应的一端。
HTTP响应报文段:协议版本(表示服务器对应的HTTP协议版本),状态码(表示请求处理成功或者失败的数字代码)及原因短语(用以解释状态码),响应首部字段(包含创建响应的日期和时间的属性),实体主体(表示资源实体的主体,注意在此之前用空行分隔)。
HTTP响应行:协议版本(表示服务器对应的HTTP协议版本),状态码(表示请求处理成功或者失败的数字代码),原因短语(用以解释状态码)。

HTTP方法

方法作用
GET获取资源:请求访问已经被URI识别的资源,指定的资源经服务器端解析后返回响应内容(如果请求的资源是文本,则保持原样返回;如果请求的资源是通用网关接口CGI这样的程序 ,则返回经过执行后的输出结果)。
POST传输实体主体
PUT传输文件:要求在请求报文的主体中包含文件的内容,并保存在请求URI指定的位置。PUT方法自身不带验证机制
HEAD获取报文首部,但不返回报文主体,用于确认URI的有效性及资源更新的日期时间等
DELETE删除文件:与PUT方法相对,用于按照请求URI删除指定的资源。DELETE方法自身不带验证机制。
OPTIONS(HTTP/1.1特有)询问支持的方法:用于查询针对请求URI指定的资源支持的方法
TRACE(HTTP/1.1特有)追踪路径:是让Web服务器端将之前的请求通信返回给客户端的方法。客户端在发送请求时会在Max-Forward首部字段中填入数值,每经过一个服务器端数字就会减1,当数字刚好为0时就停止继续传输,最后接收到请求的服务器端则返回状态码200 OK的响应。客户端通过TRACE方法可以查询发送出去的请求是怎样被加工修改/篡改的。
CONNECT(HTTP/1.1特有)要求用隧道协议连接代理:要求在与代理服务器通信时建立隧道,通过隧道协议进行TCP通信,主要使用SSL(安全套接层)和TLS(传输层安全)将通信的内容加密后再经网络隧道传输。

GET方法和POST方法的区别

(1)功能:GET一般用来从服务器上获取资源,POST一般用来更新服务器上的资源。也就是说,GET一般用于请求服务器返回资源,而POST则一般用于表单的提交,相当于把信息提交给服务器,等待服务器做出响应。
(2)REST(表征状态转移)服务角度:GET是幂等的(即读取同一个资源,总是得到相同的数据),而POST不是幂等的(因为每次请求对资源的改变并不是相同的)。进一步地,GET不会改变服务器上的资源,而POST会改变服务器上的资源。
(3)请求参数形式:GET会将请求的数据附在URL之后,即将请求的数据放置在HTTP请求报文的请求头中。而POST会将请求的数据放置在HTTP请求报文的请求体中。
(4)安全性:POST的安全性要比GET的安全性更高,因为GET请求的数据将明文出现在URL上从而导致容易被攻击者窃取,对信息造成破坏和伪造;而POST请求的数据则是被包装在请求体中,相对更安全。
(5)请求大小:GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小;而POST请求的长度则没有大小限制。
(6)GET请求会被浏览器主动缓存;而POST请求不会,除非手动设置。
(7)GET在浏览器反复的回退和前进操作是无害的,而POST会再次提交表单请求。
(8)GET在发送过程中会产生一个TCP数据包;而POST在发送过程中会产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200 OK(返回数据);而对于POST方式的请求,浏览器会先发送http header,服务器响应100 CONTINUE,浏览器再发送data,服务器响应200 OK(返回数据)。
参考:https://blog.csdn.net/weixin_41910694/article/details/91960815

使用Cookie的状态管理

Cookie表示在HTTP服务器和客户端之间传递的状态信息,因为HTTP是无状态的协议(无状态协议是指浏览器对于事务的处理没有记忆能力),但是一些万维网常常希望能够识别用户,所以万维网站点可以使用Cookie来跟踪用户,使浏览器具有记忆能力。Cookie技术通过在请求和响应写入Cookie信息来控制客户端的状态。
Cookie的工作原理:
(1)在这里插入图片描述客户端发出一个请求,服务器会为其产生一个唯一的识别码,并以此作为索引在服务器的后端数据库中生成一个项目。然后,服务器会在发送给客户端的HTTP响应报文中添加被叫做Set-Cookie的首部字段信息(通知客户端保存Cookie),客户端会保存Cookie。
(2)
在这里插入图片描述当客户端第二次向该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器发现客户端发送过来的Cookie后,会检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

HTTP报文结构

用于HTTP协议交互的信息被称为HTTP报文。
HTTP报文通常由两部分组成,即报文首部(客户端或者服务器需要处理的请求或者响应的内容及属性)和报文主体(应被发送的数据,通常,并不一定要有报文主体)。报文首部和报文主体之间要有一个空行(回车CR+换行LF)分隔。
在这里插入图片描述
请求报文:请求端(客户端)的HTTP报文叫做请求报文。
请求报文的报文首部:请求行,请求首部字段,通用首部字段,实体首部字段和其他(可能包含HTTP的RFC中未定义的首部,Cookie等)。
请求行:请求方法(告知服务器意图的HTTP方法/表示请求访问服务器的类型),请求URI(指明请求访问的资源对象),协议版本(表示客户端使用的HTTP功能)。
在这里插入图片描述
响应报文:响应端(服务器端)的HTTP报文叫做响应报文。
响应报文的报文首部:状态行,响应首部字段,通用首部字段,实体首部字段和其他(可能包含HTTP的RFC中未定义的首部,Cookie等)。
状态行:协议版本(表示服务器对应的HTTP版本),状态码(表示请求成功或者失败的数字代码),原因短语(用于解释状态码)。

报文主体和实体主体的差异

报文:是HTTP通信的基本单位,由8位组字节流组成,通过HTTP通信传输。
实体:作为请求或者响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
HTTP报文主体用于传输请求或者响应的实体主体。通常,报文主体就等于实体主体。但是当在传输中进行编码操作时,实体主体的内容发生了变化,才导致它和报文主体产生差异。
编码方式:
(1)内容编码(类似于在发送邮件时,将文件压缩后再添加为附件):是指应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。常用的内容编码有gzip(GNU zip),compress(UNIX系统的标准压缩),deflate(zlib),identity(不进行编码)。
(2)分块传输编码:把实体主体分块的功能。分块传输编码会将实体主体分割成多个部分(块),每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。使用分块传输编码的实体主体会由接受的客户端负责解码,恢复到编码前的实体主体。在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。

内容协商技术

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。内容协商会以语言、字符集、编码方式等作为基准判断响应的资源。

内容协商技术有以下3种类型:
(1)服务器驱动协商:由服务器端进行内容协商。以请求的首部字段作为参考,在服务器端自动处理。
(2)客户端驱动协商:由客户端进行内容协商的方式。用户从浏览器的可选项列表中手动选择,例如按浏览器的类型自行切换成PC版或者手机版页面。
(3)透明协商:是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方式。

10. HTTP状态码

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。
状态码的类别有以下5种:

类别原因短语
1XXInformational(信息性状态码)接收的请求正在处理
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirectional(重定向状态码)需要进行附加操作以完成请求
4XXClient Error(客户端错误状态码)服务器端无法处理请求
5XXServer Error(服务器错误状态码)服务器请求处理错误

10.1 2XX 成功

(1)200 OK:表示从客户端发来的请求在服务器端被正常处理了。
(2)204 No Content:表示服务器接收的请求已被成功处理,但在返回的响应报文中不包含实体的主体部分,也不允许包含任何实体的主体。
(3)206 Partial Content:表示客户端进行了范围请求,而服务器端成功执行了这部分的GET请求。

10.2 3XX 重定向

(1)301 Moved Permanently:永久性重定向。该状态码表示请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI。
(2)302 Found:临时重定向。该状态码表示请求的资源已经被分配了新的URI,希望用户本次能使用新的URI访问。已移动的资源对应的URI将来还有可能发生改变。(虽然标准禁止将POST方法改成GET方法,但是实际使用时大家都会这么做)
(3)303 See Other:该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。
(4)304 Not Modified:该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况时,直接返回304 Not Modified(服务器端的资源并未发生改变,可以直接使用客户端未过期的缓存)。304状态码返回时,不包含任何响应的主体部分。
(5)307 Temporary Redirect:临时重定向。307状态码遵照浏览器标准,不会将POST方法改成GET方法。

10.3 4XX 客户端错误

(1)400 Bad Request:该状态码表示请求报文中存在语法错误。当发生错误时,需要修改请求的内容后再次发送请求。
(2)401 Unauthorized:该状态码表示发送的请求需要有通过HTTP认证(BASIC认证,DIGEST认证)的认证信息。另外若之前已经进行过1次请求,则表示用户认证失败。返回含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部用以质询用户信息。当浏览器初次接收到401响应,会弹出认证用的对话窗口。
(3)403 Forbidden:该状态码表明请求资源的访问被服务器拒绝了。(未获得文件系统的访问授权,访问权限出现某些问题)
(4)404 Not Found:该状态码表示服务器端未找到请求的资源,也可以在服务器端拒绝请求并且不想说明理由时使用。

10.4 5XX 服务器错误

(1)500 Internal Server Error:该状态码表示服务器端在执行请求时发生了错误,可能是Web应用存在的bug或者某些临时故障。
(2)503 Service Unavailable:该状态码表明服务器端暂时处于超负载或者正在进行停机维护,现在无法处理请求。

11. 从输入网址到获得页面的全过程(用户访问某网站的全过程/URL响应过程)

(1) 域名解析:
例如,要查询www.baidu.com的IP地址(DNS解析URL)
在这里插入图片描述
①浏览器根据输入的URL地址搜索自己的DNS缓存(维护一张域名与IP地址的映射表);
②若没有找到,则搜索操作系统的DNS缓存(维护一张域名与IP地址的映射表);
③若没有找到,则搜索操作系统的hosts文件(在Windows系统下维护一张域名与IP地址的映射表);
④若没有找到,则操作系统会将域名发送至本地域名服务器(递归查询,以下是迭代查询),本地域名服务器会搜索自己的DNS缓存,如果查找成功则直接返回结果;
⑤如果没有找到,则本地域名服务器会向根域名服务器发起请求,然后根域名服务器会返回com域的顶级域名服务器地址;之后,本地域名服务器会向com域的顶级域名服务器发起请求,然后顶级域名服务器会返回baidu.com域的权限域名服务器的地址;之后,本地域名服务器会向baidu.com域的权限域名服务器发起请求,得到www.baidu.com的IP地址;
⑥本地域名服务器将得到的IP地址返回给操作系统,同时自己也将IP地址缓存起来;
⑦操作系统将得到的IP地址返回给浏览器,同时自己也将IP地址缓存起来;
⑧至此,浏览器已经得到了域名对应的IP地址。
(2)浏览器和目标服务器通过三次握手建立TCP 连接。
(3)在建立TCP连接后,浏览器向服务器发起HTTP-GET请求,包括其中的URL。
(4)服务器收到请求并响应HTTP请求。
(5)浏览器解析HTML代码,并请求HTML代码中的资源(例如图片)。
(6)通过四次挥手断开连接(短连接),也可继续保持连接(HTTP1.1后默认使用长连接)。
(7)浏览器对页面进行渲染然后呈现给用户。

PS:

  1. 客户端发起请求时:
    会将请求数据封装成http 包->封装成tcp 包->封装成ip 包->封装成数据帧->硬件将帧转换成bit 流->通过物理硬件(网卡芯片)发送到指定地点;

  2. 服务器接收请求时:
    bit 流->转换成数据帧->转换成ip 包->转换成tcp 包->转换成http 包->得到请求数据。

3.DNS(域名系统)是一种由分层的DNS服务器实现的分布式数据库,运行在UDP上,使用53端口,提供域名和IP地址之间的转换服务,它的主要层次结构如下:
在这里插入图片描述

12. HTTP和HTTPS的区别

HTTP具有以下缺点:(1)通信使用明文(不加密),内容可能会被窃听;(2)不验证通信方的身份,因此有可能遭遇伪装;(3)无法证明报文的完整性,所以有可能已遭篡改。
而HTTPS=HTTP+加密+认证+完整性保护。

HTTP和HTTPS的区别如下:
(1)HTTP在地址栏上的协议是以http://开头的,而HTTPS在地址栏上的协议是以https://开头的。
(2)HTTP是未经安全加密的协议,信息是明文传输(不加密),没有加密机制,它的传输过程容易被攻击者监听、数据容易被窃取、发送方和接收方容易被伪造;而HTTPS则是具有安全性的SSL(安全套接层)加密传输协议。
(3)HTTP的默认端口号是80,而HTTPS的默认端口号是443。
(4)HTTP的连接很简单,是无状态的协议;HTTPS是由SSL+HTTP协议(HTTPS是身披SSL外壳的HTTP)构建的可进行加密处理、身份认证的网络协议,比HTTP更安全。
(5)HTTP直接和TCP通信;而HTTPS是先和SSL通信,再由SSL和TCP通信。
(6)HTTPS需要到证书认证机构(CA)申请证书(公钥证书/数字证书),一般免费证书较少,因而需要一定费用。

13. 为什么不能一直使用HTTPS呢?

(1)与纯文本通信相比,加密通信会消耗更多的CPU及内存资源。因此对于非敏感信息使用HTTP通信,而对于包含个人信息等敏感数据(有需要隐藏的信息)则使用HTTPS加密通信。
(2)节约购买证书的开销。

14. HTTPS的工作原理?

在这里插入图片描述
(1)客户端通过发送Client Hello开始SSL通信,报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的加密算法和密钥长度等)。
(2)服务器可进行SSL通信时会以Server Hello报文作为应答,报文中包含了SSL版本以及加密组件(服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的)。
(3)服务器发送Certificate报文,报文中包含了公开密钥证书。
(4)服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
(5)SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应,报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串,该报文已使用公开密钥进行加密。
(6)客户端继续发送Change Cipher Spec报文,该报文会提示服务器在此报文之后的通信会使用Pre-master secret密钥加密。
(7)客户端发送Finished报文,报文中包含连接至今全部报文的整体校验值。这次握手协商是否成功,要以服务器能否正确解密该报文作为判定标准。
(8)服务器同样发送Change Cipher Spec报文。
(9)服务器同样发送Finished报文。
(10)客户端和服务器的Finished报文交换完毕之后,SSL连接建立完成,通信会受到SSL保护。

15. 共享密钥加密(对称密钥加密)和公开密钥加密(非对称密钥加密)

共享密钥加密(对称密钥加密):加密和解密同用一个密钥的加密方式。以共享密钥方式加密时必须把密钥也发送给对方,同时还得设法安全地保管接收到的密钥。
公开密钥加密(非对称密钥加密):使用一对非对称的密钥进行加密,一把叫做私有密钥(不能让其他任何人知道),一把叫做公开密钥(可以随意发布,任何人都可以获得)。使用公开密钥加密方式时,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。这样就不需要发送用来解密的私有密钥,也就不必担心密钥被攻击者窃听而盗走了。

HTTPS使用共享密钥加密和公开密钥加密两者并用的混合加密机制。在交换密钥环节使用公开密钥加密方式,在之后建立通信交换报文阶段使用共享密钥加密方式。
(1)使用公开密钥加密方式安全地交换在稍后的共享密钥加密中所使用的密钥;
(2)在确保交换的密钥是安全的前提下,使用共享密钥加密方式进行通信。

16. 什么是“中间人攻击”?

在这里插入图片描述
请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击

比如:从某个Web网站上下载内容,是无法确定客户端下载的文件和服务器上存放的文件是否前后一致的。文件内容在传输途中可能已被篡改为其他的内容。即使内容真的已被改变,作为接收方的客户端也是觉察不到的。

17. 什么是无状态协议?HTTP是无状态协议吗?怎么解决?

无状态协议是指浏览器对于事务的处理没有记忆能力。
HTTP是无状态协议。
使用Cookie来管理Session,以弥补HTTP协议中不存在的状态管理功能。
在这里插入图片描述
(1)客户端把用户ID和密码等登录信息放入报文的实体部分,通常是使用POST方法把请求发送给服务器。
(2)服务器会向客户端发放用以识别用户的Seesion ID,通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与Seesion ID绑定后记录在服务器。服务器向客户端返回响应,并在响应报文的首部字段Set-Cookie内写入Seesion ID。
(3)客户端接收到从服务器发来的Seesion ID后,会将其作为Cookie保存在本地。下一次向服务器发送请求时,浏览器会自动发送Cookie,所以Seesion ID也随之发送到服务器。服务器可通过验证接收到的Seesion ID识别用户和其认证状态。

18. Cookie和Session的区别?

(1) 由于HTTP协议是无状态协议,所以服务器端需要记录用户的认证状态时,就需要通过Session机制来识别具体的用户。典型的场景比如购物车,当你点击下单按钮时,由于HTTP是无状态协议,所以并不知道是哪个用户操作的,所以服务器要为特定的用户创建特定的Session,用于标识这个用户,并且跟踪这个用户,这样才知道购物车里面有几本书。这个Session是保存在服务器端的,有一个唯一标识。在服务器端保存Session的方法有很多,例如内存、数据库、文件等,对于大型的网站,一般会有专门的Session服务器集群。
(2) 每次进行HTTP请求的时候,客户端都会发送相应的Cookie信息到服务器端。实际上大多数的应用都是通过 Cookie 来实现Session跟踪的(使用Cookie来管理Session以弥补HTTP协议不存在的状态管理功能)。首先,客户端把用户ID和密码等登录信息放入请求报文的实体部分,通常使用POST方法将请求发送给服务器。服务器向客户端发放用以识别用户的Session ID,通过验证客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与Session ID绑定后记录在服务器,服务器向客户端返回响应,并在响应报文的首部字段Set-Cookie中写入Session ID。客户端接收到服务器发送过来的Session ID后,会将其作为Cookie保存在本地。下次客户端再次向服务器发送请求时,浏览器会自动发送Cookie,Session ID也就随之发送到服务器端了。服务器端通过验证接收到的Session ID识别用户和其认证状态。
(3) Cookie其实还可以用在一些方便用户的场景下,设想用户某次登陆过一个网站,下次登录的时候不想再次输入账号了,可以将这个登录信息(用户ID)写入到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮助用户将用户名给填写了,能够方便一下用户。这也是Cookie名称的由来。

总结:
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式(通过Cookie来管理Session以弥补HTTP协议不存在的状态管理功能)。
Session是在服务器端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中。
Cookie和Session的域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享。

19. 跨站脚本攻击(XSS),SQL注入攻击,DDOS攻击?

(1)跨站脚本攻击(XSS)

定义:跨站脚本攻击是指通过存在安全漏洞的Web网站注册到用户浏览器内的运行非法的HTML标签或者JavaScript进行的一种攻击。XSS是一种经常出现在Web应用中的计算机安全漏洞,也是Web中最主流的攻击方式。XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到Web页面中去,使别的用户访问都会执行相应的嵌入代码。

危害
· 利用虚假输入表单骗取用户的个人信息,比如登陆账号、网银账号等;
· 利用脚本窃取用户的Cookie值,受害者在不知情的情况下,帮助攻击者发送恶意请求;
· 显示伪造的文章或者图片。

防止XSS解决方案
· 过滤用户提交的数据;
· 将重要的Cookie标记为HttpOnly,使得JavaScript中的document.cookie语句就不能获取到Cookie了;
· 只允许用户输入我们期望的数据,例如:age用户年龄只允许用户输入数字,而数字之外的字符都过滤掉;
· 对数据进行HTML Encode 处理:用户将数据提交上来的时候进行HTML编码,将相应的符号转换为实体名称再进行下一步的处理;
· 过滤或移除特殊HTML标签;
· 过滤JavaScript事件的标签。

(2)SQL注入攻击

定义:SQL注入攻击是指针对Web应用使用的数据库,运行非法的SQL而产生的一种攻击。。

危害
· 非法查看或者篡改数据库内的数据;
· 规避认证;
· 执行和数据库服务器业务关联的程序等。

SQL注入的方式
· 表单提交,主要为POST请求,也包括GET请求;
· URL参数提交,主要为GET请求参数;
· Cookie参数提交;
· HTTP请求头部的一些可修改的值,比如Referer、User_Agent等。

防止SQL注入攻击的解决方案
· 对用户的输入进行校验,使用正则表达式过滤输入的参数;
· 使用参数化语句,不要拼接SQL,可以使用安全的存储过程;
· 不要使用管理员权限的数据库连接,为每个应用使用权限有限的数据库连接;
· 检查数据存储类型;
· 将重要的信息加密。

(3)DDOS攻击
定义
DoS(Denial of Service)攻击是一种让运行中的服务呈停止状态的攻击,也称为服务停止攻击或者拒绝服务攻击。凡是利用网络安全防护措施不足导致用户不能继续使用正常服务的攻击手段,都可以被称为是拒绝服务攻击,其目的是通过消耗网络宽带或系统资源,使网络或计算机不能提供正常的服务。

DDoS(Distributed Denial of Service ,分布式拒绝服务)攻击是指多台计算机发起的DoS攻击。凡是攻击者通过控制在网络上的傀儡主机,同时发动它们向目标主机进行DoS攻击的方式就称为分布式拒绝服务(DDoS)攻击。

DoS攻击方式
· 集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也呈停止状态;
· 通过攻击安全漏洞使服务停止。

DDoS的危害
· 造成客户业务不可用,使得客户利益受损;
· 客户网内一个业务受到攻击,客户联网全面受阻,所有业务瘫痪,连锁反应严重;
· 攻击引发的政治影响、社会舆论的压力给企业带来名誉损失。

防御DDoS攻击的方案
· 及时更新系统补丁;
· 安装查杀软硬件,及时更新病毒库;
· 设置复杂口令,降低系统被控制的可能性;
· 关闭不必要的端口与服务;
· 经常检测网络的脆弱性,发现问题及时修复;
· 对于重要的Web服务器可以建立多个镜像实现负载均衡。

20.客户端不断请求连接会怎么样?DDos攻击?

服务器会为每个请求创建一个连接,并向其发送确认报文,然后等待客户端进行确认
(1) DDos攻击
客户端向服务器发送连接请求数据包;
服务端向客户端发送确认数据包;
客户端不向服务器发送确认数据包,服务器一直等待着来自客户端的确认。
(2) DDos解决方案(没有彻底根治的办法,除非不使用TCP)
限制同时打开SYN半连接的数目;
缩短SYN半连接的Time out时间;
关闭不必要的服务。

最后

以上就是天真小虾米为你收集整理的计算机网络总结的全部内容,希望文章能够帮你解决计算机网络总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部