计算机网络相关[旧版]


计算机网络基础知识总结

网络层

IP分组

分组格式:


在这里插入图片描述

路由选择协议:RIP与OSPF

RIP

1.简介

  • 它是一种基于距离矢量(Distance-Vector)算法的协议;
  • 将跳数作为度量值,最大为15跳;
  • 由于只相信邻居,因此站的不够高,看得不够远;
  • 不适合大型网络。
  • 有计数到无穷、收敛慢等缺点。

2.工作原理

  • 每个路由器维护一张矢量信息表,表中有两个向量:Di和Si,分别表示该路由器到其他所有路由器的距离及其下一跳
  • 默认30秒交换一次矢量信息表(全部路由表);
  • 每个路由器(节点)根据收到的矢量信息,更新自己的路由表。

可能受到的攻击

  • 这样如果一个攻击者向一台运行RIP协议的路由器发送了人为构造的带破坏性的路由更新报文,就很容易的把路由器的路由表搞紊乱,从而导致网络中断。

OSPF

1.简介

  • 是链路状态路由选择协议LS;
  • 使用带宽作为度量值;
  • 收敛速度快;
  • 主要思想:发现邻居、设置到邻居的成本、构造 LSA 发送 LSA和计算图;
  • 站得高看得远;

2.工作原理

  • 建立路由器毗邻关系(最关键);
  • 选举DR(大家都与DR交换数据)和BDR;
  • 发现路由
  • 选择最佳路由
  • 维护路由信息

    在这里插入图片描述

3.分组类型


在这里插入图片描述

4.可能受到的攻击

  • 如果一个攻击者冒充一台合法路由器与网络中的一台路由器建立邻接关系,并向攻击路由器输入大量的链路状态广播LSA,组成链路状态数据库的数据单元),就会引导路由器形成错误的网络拓扑结构,从而导致整个网络的路由表紊乱,导致整个网络瘫痪。

ARP与PARP

ARP协议

ARP协议用于通过IP地址找到MAC地址,工作流程:


PARP协议

PARP协议是根据MAC地址获取IP地址的字而已,当计算机刚开机时只知道自己的MAC地址,可以用这个协议查询自己的IP地址,工作流程如下:

  • 给主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
  • 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
  • 如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
  • 如果不存在,RARP服务器对此不做任何的响应;
  • 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

ARP攻击

图解ARP欺骗与泛洪
ARP欺骗与泛洪
1. ARP泛洪攻击

  • 通过向网关发送大量ARP报文,导致网关无法正常响应。首先发送大量的ARP请求报文,然后又发送大量虚假的ARP响应报文,从而造成网关部分的CPU利用率上升难以响应正常服务请求,而且网关还会被错误的ARP表充满导致无法更新维护正常ARP表,消耗网络带宽资源。

2.ARP欺骗主机的攻击

  • ARP欺骗主机的攻击也是ARP众多攻击类型中很常见的一种。攻击者通过ARP欺骗使得局域网内被攻击主机发送给网关的流量信息实际上都发送给攻击者。主机刷新自己的ARP使得在自己的ARP缓存表中对应的MAC为攻击者的MAC,这样一来其他用户要通过网关发送出去的数据流就会发往主机这里,这样就会造成用户的数据外泄

3.欺骗网关的攻击

  • 欺骗网关就是把别的主机发送给网关的数据通过欺骗网关的形式使得这些数据通过网关发送给攻击者。这种攻击目标选择的不是个人主机而是局域网的网关,这样就会攻击者源源不断的获取局域网内其他用户的数据.造成数据的泄露,同时用户电脑中病毒的概率也会提升。

传输层

TCP与UDP

TCP 和 UDP 总结

UDP

首先看UDP的包头:

  • 可以看到:UDP数据报除了端口号,几乎什么都没有了
  • 端口号:如果没有这两个端口号,那么数据报就不知道该传给哪个应用了
  • UDP长度:长度字段是指整个UDP的长度
  • 校验和:整个数据的校验。
1.UDP的特点

1.面向无连接、面向报文
UDP是想发就发,无需建立连接,并且不会对数据报文进行任何拆分和拼接操作。
具体流程:

  • 在发送端,应用层将数据传递给传输层UDP协议,UDP只会给数据报文添加一个UDP头标识,然后就传给网络层了;
  • 在接收端,网络层将数据传递给传输层,UDP会去除UDP报头就传递给应用层,不会有任何拼接操作。

2.有单播,多播,广播的功能

  • UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。

3.不可靠性

  • 首先不可靠性体现在无连接上(可能无法到达?);
  • 想发就发的特点,不会管网络情况(没有拥塞控制),也不管对面收到了没有;

4.头部开销较小

  • 这使得UDP传输报文时比较高效

5.适用于实时性较高的场景

2.UDP适用场景
  • 直播:宁可丢包,也不要卡顿的;
  • 实时游戏:实时性要求高
  • DHCP:如果一台主机要使用DHCP就说明它还没有IP地址,也就是它不能用TCP;
  • DNS域名解析

TCP

当一台计算机想要与另一台计算机通讯时,两台计算机之间的通信需要畅通且可靠,这样才能保证正确收发数据。例如,当你想查看网页或查看电子邮件时,希望完整且按顺序查看网页,而不丢失任何内容。当你下载文件时,希望获得的是完整的文件,而不仅仅是文件的一部分,因为如果数据丢失或乱序,都不是你希望得到的结果,于是就用到了TCP。

在这里插入图片描述

  • 首先,源端口与目的端口必不可少;
  • 接下来是数据报的序号,主要是为了解决乱序问题
  • 确认序号,对已收到的包进行确认,主要是为了解决不丢包的问题;
  • 数据偏移 :用于表示该报文的首部长度,单位是4字节指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度,主要用在对IP分组进行分段传输;
  • 保留区:
  • UAPRSF:控制比特;
  • 窗口:窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的,用于流量控制
滑动窗口

TCP滑动窗口

TCP的特点

1.面向连接

  • 需要三次握手建立连接,为数据的可靠传输打下基础;

2.仅支持单播

  • 是一对一进行的

3.面向字节流

  • TCP不像UDP那样一个个报文传输,而是以字节流动的方式进行传输;
  • TCP对字节流的内容不作任何解释,对字节流的解释由TCP连接双方的应用层解释。

4.可靠传输

  • 利用确认机制保证可靠传输;
  • 超时重传机制
  • TCP数据报中的序列号保证不乱序;
  • 拥塞控制

5.全双工传输

  • TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)。
TCP保证可靠传输

1.将数据截断为合理长度

  • 这和UDP完全不同,应用程序产生的数据报长度将保持不变。

2.超时重发

  • 当TCP发出一个数据报之后,会启动定时器,如果定时器超时,自然重发

3. 确认机制

  • 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒 (等待捎带确认)。

4.校验机制

  • TCP数据报中有整个报文的校验,一旦叫研报出错,则丢弃报文段,不给予确认,这样超时后就会重发了

5.顺序控制

  • 利用序列号字段,对失序的数据报进行重新排序再交给应用层;
  • 丢弃重复的数据报。

6.流量控制

  • 防止数据报淹没接收端,因此设置了窗口字段;

7.拥塞控制

  • 慢开始与拥塞避免
  • 快重传和快恢复
TCP拥塞控制

如果网络发生拥塞,分组将会丢失,此时发送方会继续重传,造成更加拥塞。因此当出现拥塞时,要控制发送方的速率,这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度

在这里插入图片描述
主要的措施有四个:慢开始、拥塞避免、快重传、快恢复,主要原理是控制拥塞窗口cwnd
在这里插入图片描述
1.慢开始与拥塞避免

  • 发送的最初执行慢开始,令cwnd = 1,发送方只能发送一个报文段;当发送方收到确认后,将cwnd加倍,因此发送的报文段数量为:1、2、4、8…;
  • 设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1;
  • 如果出现了超时,则令 ssthresh = cwnd / 2,然后重新执行慢开始

2.快重传与快恢复

  • 在发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如收到三个 M2,则 M3 丢失,立即重传 M3。
  • 在这种情况下,只是丢失个别报文段,而不是网络拥塞,因此执行快恢复,令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免
  • 慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增长速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。
TCP适用场景
  • HTTP,HTTPS,FTP等传输文件;
  • POP,SMTP等邮件传输的协议;
三次握手与四次握手

三次握手与四次挥手

TCP状态转换

TCP共有11种状态,可以从客户端和服务端两方面来看:
客户端

  • CLOSED:初始状态;
  • SYN-SENT:客户端发送一个SYN报文(第一次握手后),进入SYN-SENT状态;
  • ESTABLISHED:客户端收到SYN确认报文(第二次握手),并给服务端发送第三次握手的内容,之后连接建立,双方开始传输数据;
  • FIN_WAIT1:某一时刻,客户端给服务端发送第一次挥手的报文,进入FIN_WAIT1状态,即等待确认报文的状态
  • FIN-WAIT2:客户端收到服务端的确认报文(第二次挥手),进入FIN-WAIT2状态,等待服务端的FIN报文(第三次挥手);
  • TIME-WAIT:客户端收到了对方的FIN报文(第三次挥手),进入TIME-WAIT状态,整个状态时间是2*MSL(Max Segment Lifetime,最大分段生存期,指一个TCP报文在Internet上的最长生存时间);
  • CLOSED:TIME-WAIT状态过后,正式断开连接(双向都断开了)。

服务端

  • CLOSED:初始状态;
  • LISTEN:表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接;
  • SYN_RCVD:服务器接收到来自客户端请求连接的SYN报文(第一次握手),发送ACK+FIN报文(第二次握手),进入SYN_RCVD状态,等待第三次握手报文的到来;
  • ESTABLISHED:服务端收到了第三次握手的报文,进入连接状态,开始传输数据;
  • CLOCED_WAIT:服务端收到了客户端的FIN报文(第一次挥手),并发送ACK报文(第二次挥手),然后进入CLOSED_WAIT状态(等待服务端将自己的数据全部传输完成);
  • LAST_ACK:服务端向客户端发送了FIN报文(第三次挥手报文),进入LAST_ACK状态,等待对方的确认(第四次挥手);
  • CLOSED:服务端受到了ACK(第四次挥手),就可以断开连接(双向都断开了)了。

应用层

DNS

DNS解析域名的过程:


在这里插入图片描述

1.过程
0. DNS客户端(主机)希望查询www.qq.com的IP地址;

  1. 主机检查自己的host文件,没有找到对应的记录;
  2. 主机向本地DNS服务器NServer02发送查询www.qq.com的请求(主机的查询是递归查询);
  3. 本地DNS服务器没有www.qq.com的记录,于是向根域名服务器发出查询请求(本地DNS服务器是迭代查询);
  4. 根域名服务器也不知道www.qq.com的IP,于是向本地DNS返回.com顶级域名服务器的地址;
  5. 本地DNS服务器NServer02向.com顶级域名的DNS服务器发出请求;
  6. 但.com域名服务器也不知道www.qq.com的地址,于是向本地DNS返回qq.com域的DNS服务器地址;
  7. NServer02向qq.com域名的DNS服务器发出请求;
  8. qq.com域名服务器直到www.qq.com的地址,于是返回给NServer02;
  9. Nserver02将www.qq.com的地址返回给主机。

2.补充

  • 在3中,为什么直接向根域名服务器发出请求:因为在根服务器有所有顶级域名(.com,.org等)的地址;
  • 域名解析时用UDP:主机生成一个DNS查询报文(UDP),该报文具有53号端口,因为DNS服务器的端口是53(传输层);
  • DNS服务器何时采用TCP连接:区域传送时使用TCP(端口也是53),辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。

3.DNS攻击

  • DNS劫持:DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能访问或访问的是假网址。这类攻击一般通过恶意软件来更改终端用户TCP/IP设置,将用户指向恶意DNS服务器,该DNS服务器会对域名进行解析,并最终指向钓鱼网站等被攻击者操控的服务器。
  • DDoS攻击:针对DNS的DDoS攻击通过控制大批僵尸网络利用真实DNS协议栈发起大量域名查询请求,利用工具软件伪造源IP发送海量DNS查询,发送海量DNS查询报文导致网络带宽耗尽而无法传送正常DNS查询请求。发送大量非法域名查询报文引起DNS服务器持续进行迭代查询,从而达到较少的攻击流量消耗大量服务器资源的目的。

HTTP

HTTP协议,一篇就够了

HTTP简介

  • HTTP协议是Hyper Text Transfer Protocol(超文本传输协议),用于从万维网服务器传输超文本到本地浏览器应用层协议;
  • HTTP是基于TCP/IP用心协议来传输数据的;
  • HTTP协议工作于客户端-服务端架构之上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

主要特点

  1. 简单快速:客户端请求服务时,只需要传送请求方法和路径,请求方法以偶GET等;
  2. 灵活:可以传输任意类型的数据对象;
  3. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间;
  4. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP之URL

1. 定义

  • HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接,URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息;
  • URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址

2.组成
以下面这个URL为例,介绍下普通URL的各部分组成:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

  1. 协议:http;
  2. 域名部分:www.aspxfans.com;
  3. 端口部分:8080,若省略,则采用默认端口
  4. 虚拟目录部分:/news/
  5. 文件名部分:index.asp
  6. 参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符;
  7. 锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分。

HTTP之消息请求Request

客户端发送一个http请求包括四部分:请求行(request line),请求头部(header),空行和请求数据


在这里插入图片描述
在这里插入图片描述

1.请求行

  • 用来说明请求类型,要访问的资源以及所使用的http协议版本;
  • 请求方法:GET;
  • 要访问的资源:/562f25980001b1b106000338.jpg
  • http’协议版本:HTTP1.1

2.请求头部

  • 用来说明服务器要使用的附加信息
  • 请求目的地HOST:img.mukewang.com;
  • User-Agent:用户代理,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等;
  • … …

3.空行

  • 恒为空的行

4.请求数据(主体)

  • 本例中为空

HTTP之相应消息Response

一般情况下,服务器接收并处理客户端发过来的请求后会返回一个响应消息,HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文

在这里插入图片描述
在这里插入图片描述

1.状态行

  • HTTP协议版本号:HTTP/1.1
  • 状态码:200
  • 状态消息:OK

2.消息报头

  • Date:生成响应的日期和时间;
  • Content-Type:MIME类型的HTML(text/html),MIME类型的HTML(text/html)。

3.空行

  • 恒为空的行;

4.响应正文

  • 服务器返回给客户端的文本信息。

HTTP之状态码

状态码类别含义
1XX信息性状态码接收的请求正在处理
2XX成功状态码请求正常处理完毕
3XX重定向状态码需要附加操作以完成请求
4XX客户端错误码服务器无法处理请求
5XX服务器错误码服务器处理请求时出错

常见状态码:

100		Continue    //表明目前一切正常
200		OK 			//客户端请求成功
204		No Content  //请求已经成功处理,但是返回的响应报文不包含实体的主体部分
301 				//永久性重定向
302 				//临时性重定向
400					//请求报文语法错误
401					//表明发送的请求需要有认证信息,若之前已发过一次,则表示认证失败
404					//No found
500					//服务器正在执行请求时出错
503					//服务器超载或正在停机维护

HTTP之请求方法

HTTP1.0:GET、POST和HEAD
HTTP1.1新增:OPTIONS、PUT、DELETE、TRACE和CONNECT方法。

  1. GET

获取资源

  1. POST

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

  1. PUT :

上传文件,不带验证机制,不安全

  1. DELETE

与PUT功能相反,也不带验证机制

  1. CONNECT

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

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


在这里插入图片描述

HTTP工作原理

1.客户端连接到Web服务器

  • 建立TCP连接,端口号为80;

2.发送HTTP请求

  • 通过TCP套接字,客户端向Web服务器发送一个请求报文;

3.服务器接收到请求并返回HTTP响应

  • Web服务器解析请求,定位请求资源,将资源副本写到TCP套接字,由客户端读取;

4.释放TCP连接

  • connection 模式为close:则服务器主动关闭TCP连接,客户端被动关闭连接,释放连接;
  • connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

5.客户端浏览器解析HTML内容

  • 首先解析状态行
  • 解析消息报头中的每一个响应头
  • 解析HTML文本。

GET与POST

get与post的分析

原理

GET一般用于获取/查询资源信息,而POST一般用于更新资源信息:

1. GET用于信息获取,而且应该是“安全的”和幂等的

  • “安全”:这里的安全意味着GET用于获取信息而非修改信息,即GET不会对资源参数副作用;
  • 幂等:对同一URL的多个请求应该返回同样的结果。

2.POST表示可能修改变服务器上的资源的请求

  • 新闻以网站为例,读者对新闻发表自己的评论应该通过POST实现,因为在评论提交后站点的资源已经不同了,或者说资源被修改了。
GET和POST的区别

1.请求的数据的位置

  • GET请求的数据会附在URL之后(就是把数据放置在**HTTP协议头(请求行)**中),以?分割URL和传输数据,参数之间以&相连,如:login.action?;
  • POST提交的数据是放在请求数据(请求主体)中

2.传输的字节数

  • 对于GET来说,由于它通过URL提交数据,因此GET可提交的数据量与URL的长度直接相关
  • 在HTTP协议规范中:没有对URL长度进行限制;因此限制URL长度的是浏览器和服务器,IE对URL长度的限制是2083字节,有些浏览器理论上没有长度限制,URL受限于操作系统的支持
  • POST是没有大小限制的,HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理能力。

3.POST的安全性要比GET的安全性高

  • 通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存。

HTTP与HTTPS

详细解析HTTP与HTTPS

  • HTTP传输的数据都不经过加密,也就是明文传输,不安全;
  • 因此设计SSL协议用于对HTTP传输的加密,也就是HTTPS,其工作过程如下

在这里插入图片描述

1.客户端发起HTTPS请求
也就是输入一个https网址,然后回车。

2.服务器的配置
采用HTTPS协议的服务器需要有一套数字证书,可以自己申请(会弹出提示页面,需要客户端验证才能继续访问),也可以向组织CA申请(要钱的,但不会弹出提示页面)。
这一套证书就是一对公钥和私钥

3.传送证书
其实就是传送公钥,以及证书的颁发机构,过期时间等;

4.客户端解析证书

  • 这部分工作由客户端的TLS来完成,会检查证书(公钥):颁发机构,过期时间等;
  • 如果检查无误,就能生成一个随机值(可以理解为随机的一个私钥,与证书里面的的私钥完全是两回事),然后用证书提供的公钥进行加密

5.向服务端传送加密过的随机值(私钥)

6.服务段用私钥将随机值解密
服务端用证书的私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该私钥进行对称加密

7.传输加密后的信息

8.客户端解密信息
客户端用之前生成的随机值(私钥)解密服务段传过来的信息,于是获取了解密后的内容。

由上可见:HTTPS用了非对称性加密和对称性加密相结合的技术

HTTP长连接与短连接

HTTP长连接与短连接

HTTP的版本

HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
简书:HTTP各个版本详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值