既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
每发送完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组。包括三种情况:
- 无差错
A 发送分组 M1,发送完后暂停并等待 B 的确认;B 收到 M1 后向 A 发送确认;A 收到确认后再发送下一个分组 M2。
- 出现差错
B 收到 M1 后检测到了差错,或者 M1 在传输过程中丢失,这两种情况下 B 都不会发送确认信息,解决方法是:A 只要超过一段时间没有收到确认,就进行超时重传,每发送完一个分组就设置超时计时器,如果在计时器到期前收到确认就撤销计时。
注意:① 发送完分组后必须暂时保留副本,收到确认再清除。② 分组和确认分组都必须进行编号。③ 超时时间应当比分组传输的往返时间稍长,过短会产生不必要的重传,过长会降低通信效率。
- 确认丢失和确认延迟
B 发送的确认丢失,A 会超时重传,B 会丢弃重传分组并重新确认;B 发送的确认迟到,A 收到重复确认后将其丢弃。
通常 A 最终总是可以收到对所有发出分组的确认,如果 A 不断重传分组但总收不到确认,就说明通信线路质量太差,不能通信。
停止等待协议的优点是简单,缺点是信道利用率低。为了提高传输效率,发送方可以连续发送多个分组,不必每发送完一个分组就停下来等待确认,使信道上一直有数据传送。但流水线传输可能会遇到差错,解决方法包括回退 N 步和选择重传。
根据上述的确认和重传机制,我们就可以在不可靠的网络上实现可靠的传输。
2.8.2 回退 N 步协议 GBN
回退 N 步即 GBN 协议,允许发送方发送多个分组而不需要等待确认。GBN 中发送方已发送但还未确认的序号和允许发送但还未发送的序号可以被看作一个长度为 N 的窗口,随协议运行该窗口向前滑动,因此 GBN 也被称为滑动窗口协议。
GBN 采用累积确认的方式,对按序到达的最后一个分组发送确认,如果超时,发送方会重传所有已发送但还未确认的分组。例如发送了序号为 1~5 的五个分组,除了第三个全部收到了,那么确认序号就是 2,发送方将重传 3~5 的分组。
在 GBN 中,接收方丢弃所有失序分组,因为接收方必须按序交付数据。这种做法的优点是缓存简单,不需要缓存任何失序分组;缺点是对失序分组的重传可能出错而导致更多重传。
2.8.3 选择重传协议
GBN 中单个分组的差错就能引起大量分组重传,随着信道差错率的增加,流水线会被不必要重传的分组所充斥。
选择重传即 SR 协议,让发送方仅重传那些它怀疑接收出错的分组,避免不必要的重传。接收方将确认一个正确接收的分组而不管其是否按序,失序分组将被缓存直到收到所有丢失分组,此时将分组按序交付上层。
三. HTTP 协议
HTTP 是一种无状态的协议,服务器不存储任何关于该客户的状态信息。
3.1 HTTP 和 HTTPS
3.1.1 HTTP 和 HTTPS的区别?
- 安全性:https安全,http不安全
- 证书:https需要使用申请 CA证书,http不需要证书
- 传输协议: https密文传输,HTTP是明文传输
- 端口:https端口是443,http端口是80
3.1.2 HTTP 为什么不安全?
- http协议属于明文传输协议,没有加密,无法保证通信内容不被窃听。
- 没有报文完整性验证,无法确保通信内容在传输中不被改变。
- 没有身份鉴别,无法让通信双方确认对方身份。
3.1.3 HTTPS 为什么安全?
- HTTP over SSL,在 HTTP 传输上增加了 SSL 安全套接字层(Secure Socket Layer),通过机密性、数据完整性、身份鉴别为 HTTP 事务提供安全保证。
- SSL 会对数据进行加密并把加密数据送往 TCP 套接字,在接收方,SSL 读取 TCP 套接字的数据并解密,把数据交给应用层。
- HTTPS 采用混合加密机制,使用非对称加密传输对称密钥保证传输安全,使用对称加密保证通信效率。
- SSL 依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTP 和 HTTPS 建立连接(相同部分):
- HTTP和HTTPS都需要在建立连接的基础上来进行数据传输,是基本操作
- 当客户在浏览器中输入网址的并且按下回车,浏览器会在浏览器DNS缓存,本地DNS缓存,和Hosts中寻找对应的记录,如果没有获取到则会请求DNS服务来获取对应的ip
- 当获取到ip后,tcp连接会进行三次握手建立连接
HTTP 请求过程:
- 建立连接完毕以后客户端会发送响应给服务端
- 服务端接受请求并且做出响应发送给客户端
- 客户端收到响应并且解析响应响应给客户
HTTPS 请求过程:
- 在使用 HTTPS 是需要保证服务端配置正确了对应的安全证书
- 客户端发送请求到服务端
- 服务端返回公钥和证书到客户端
- 客户端接收后会验证证书的安全性,如果通过则会随机生成一个随机数,用公钥对其加密,发送到服务端
- 服务端接受到这个加密后的随机数后会用私钥对其解密得到真正的随机数,随后用这个随机数当做私钥对需要发送的数据进行对称加密
- 客户端在接收到加密后的数据使用私钥(即生成的随机值)对数据进行解密并且解析数据呈现结果给客户
- SSL 加密建立
TLS/SSL 协议是怎样保障信息安全的?
- 证书体系
- 密钥交换协议
- 对称加密算法
3.1.4 对称加密和非对称加密的区别
加密和解密过程不同
- 对称加密过程和解密过程使用的同一个密钥,加密过程相当于用原文+密钥可以传输出密文,同时解密过程用密文-密钥可以推导出原文。
- 非对称加密采用了两个密钥,一般使用公钥进行加密,使用私钥进行解密。
加密解密速度不同
- 对称加密解密的速度比较快,适合数据比较长时的使用。
- 非对称加密和解密花费的时间长、速度相对较慢,只适合对少量数据的使用。
传输的安全性不同
- 对称加密的过程中无法确保密钥被安全传递,密文在传输过程中是可能被第三方截获,如果密码本也被第三方截获,则传输的密码信息将被第三方破获,安全性相对较低。
- 非对称加密算法中私钥是基于不同的算法生成不同的随机数,私钥通过一定的加密算法推导出公钥,但私钥到公钥的推导过程是单向的,也就是说公钥无法反推导出私钥。所以安全性较高。
3.1.5 什么是数字证书?
数字证书有点类似于我们的居民身份证,只是数字证书是基于互联网通信的,用于标记通信双方身份的一种方式。数字证书是由权威机构 Certificate Authority 发行的,又称之为证书授权,简称为:CA。人们在网上可以根据它来识别对方身份信息。
数字证书绑定了公钥及其持有者的真实身份,它类似于现实生活中的居民身份证,所不同的是数字证书不再是纸质的证照,而是一段含有证书持有者身份信息并经过认证中心审核签发的电子数据,广泛用在电子商务和移动互联网中。
3.1.6 什么是数字签名?
数字签名是指将摘要信息使用接收者的公钥进行加密,与密文一起发送给接收者。接收者使用自己的私钥对摘要信息进行解密,然后使用 Hash 函数对收到的密文产生一个摘要信息,然后将摘要信息与发送着传输过来解密后的摘要信息对比是否一致。如果一致,则表明数据信息没有被篡改。
也就是说,数字签名能够验证收到的信息的完整性,避免中途信息被劫持篡改或丢失。对方可以根据数字签名来判断获取到的数据信息时候是最原始的数据。
3.2 报文格式
请求报文
请求报文包括请求行、首部行和实体。
- 请求行包括方法、URL 和 HTTP 版本。方法包括了 GET、POST、HEAD、PUT 和 DELETE 等。HEAD 类似于 GET,当服务器收到一个 HEAD 请求时,会用一个 HTTP 报文进行响应,但并不返回请求对象,通常使用 HEAD 进行调试;PUT 常用于上传对象到 Web 服务器;DELETE 用于删除 Web 服务器上的对象。
- 首部行可以携带信息,例如
Connection:close
可以告诉服务器不要使用持续连接;User-agent
可以指明浏览器类型,服务器可以为不同类型的用户代理发送对象的不同版本。 - 在首部行后有一个空行,后面跟着的是实体。使用 GET 时实体为空,而使用 POST 时才会使用实体。
响应报文
响应报文包括状态行、首部行和实体。
- 状态行包括协议版本、状态码和对应的状态信息。
- 首部行中,
Date
是服务器发送响应报文的时间;Server
指明了服务器类型,类似于请求报文中的User-agent
。 - 实体是报文的主要部分,即所请求的对象本身。
3.3 状态码
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
状态码 | 短语 | 含义 |
---|---|---|
200 | OK | 成功响应 |
301 | Moved Permanently | 请求对象已被永久转移,新的 URL 定义在响应报文的首部行,客户端将自动获取。 |
302 | Found | 与301类似,但资源只是临时被移动,客户端继续使用原有 URL。 |
400 | Bad Request | 通用的差错代码,请求不能被服务器理解。 |
401 | Unauthorized | 未认证,缺乏相关权限。 |
402 | Payment Required | 保留,将来使用。 |
403 | Forbidden | 服务器理解客户端的请求,但是拒绝执行。 |
404 | Not Found | 被请求的文档不在服务器上,有可能因为请求 URL 出错。 |
405 | Method Not Allowed | 客户端中请求的方法被禁止,例如限制 POST 方式但使用了 GET 访问。 |
500 | Internal Server Error | 服务器内部错误,无法完成请求。 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求。 |
502 | Bad Gateway | 作为网关或代理工作的服务器尝试执行请求时,从远程服务器收到了一个无效响应。 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时无法处理客户端的请求。 |
504 | Gateway Timeout | 充当网关或代理的服务器,未及时从远端服务器获取请求。 |
505 | HTTP Version Not Supported | 服务器不支持请求报文使用的 HTTP 版本。 |
Http 请求中常见的请求头?
- Accept:浏览器可接受的MIME类型
- Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
- Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
- Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。可以在浏览器中进行设置。
- Host:初始URL中的主机和端口
- Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
- Content-Type:内容类型、If-Modified-Since: Wed, 02 Feb 201112:04:56 GMT利用这个头与服务器的文件进行比对,如果一致,则从缓存中直接读取文件。
- User-Agent:浏览器类型.
- Content-Length:表示请求消息正文的长度
- Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
- Cookie:这是最重要的请求头信息之一
- Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT
3.4 使用 HTTP 长连接(持续连接)有哪些优点?
网络上说HTTP分为长连接和短连接,其实本质上是说的 TCP 连接。TCP 连接是一个双向的通道,它是可以保持一段时间不关闭的,因此 TCP 连接才有真正的长连接和短连接这一说。
1.区分长连接和短连接
HTTP1.1 之后默认为长连接
2.优点
- 减少握手次数
- 减少慢启动的影响
- 首先,长连接是为了复用。长连接情况下,多个 HTTP 请求可以复用同一个 TCP 连接,这就节省了很多 TCP 连接建立和断开的消耗。
比如你请求了博客园的一个网页,这个网页里肯定还包含了 CSS、JS 等等一系列资源,如果你是短连接(也就是每次都要重新建立 TCP 连接)的话,那你每打开一个网页,基本要建立几个甚至几十个 TCP 连接,这浪费了很多资源。
但如果是长连接的话,那么这么多次 HTTP 请求(这些请求包括请求网页内容,CSS 文件,JS 文件,图片等等),其实使用的都是一个 TCP 连接,很显然是可以节省很多消耗的。
3.缺点
对头阻塞。如果在一次长连接中发送多个请求,如果某次请求丢一个包,则会阻塞。
3.5 HTTP 请求幂等性
幂等性定义:指一次和多次请求某一个资源应该具有同样的副作用。
GET
方法用于获取资源,不具有副作用,所以是幂等的。DELETE
方法用于删除资源,有副作用,但它应该满足幂等性。删除一次和多次结果一样。POST
请求会在服务器端创建资源,两次相同的请求就会创建两份资源。所以不幂等。PUT
是更新资源,更新一次或多次副作用一样,所以是幂等的。
3.6 GET 和 POST 的区别
- GET 读取一个资源,可以将 GET 数据缓存在浏览器、代理或服务端。反复 GET 不应该对访问有副作用,没有副作用被称为幂等。
POST 不是幂等的,意味着不能随意多次执行,因此不能缓存,如果尝试重新执行 POST 请求,浏览器会弹出提示框询问是否重新提交表单。
- GET 请求由 url 触发,想携带参数就只能在 url 后附加。
POST 请求来自表单提交,表单数据被浏览器编码到 HTTP 请求报文的请求体中。主要有两种编码格式,一种是 application/..
,用来传输简单数据;另一种是 multipart/form-data
格式,用来传输文件,对二进制数据传输效率高。
- 从攻击的角度说,无论 GET 还是 POST 都不安全,因为 HTTP 是明文协议。
- GET 长度受限于 url,而 url 的长度由浏览器和服务器决定。
POST 没有大小限制,起限制作用的是服务器的处理能力。
3.7 cookie
HTTP 的无状态性简化了服务器设计,提高了性能,使其可以同时处理大量 TCP 连接,但无状态也导致服务器不能识别用户。为解决该问题, HTTP 使用 cookie 客户端会话技术对用户进行追踪。
工作流程
① 当客户通过浏览器第一次访问站点时,该站点将产生一个唯一识别码,并以此作为索引,在后端数据库中产生一个表项。
② 服务器用一个包含 Set-cookie
首部的 HTTP 响应报文对浏览器进行响应,浏览器收到后将其添加到自己管理的 cookie 文件。
③ 在下次访问该站点时,请求报文的首部行会包括这个识别码,尽管浏览器不知道客户是谁,但可以确定是同一个客户。
3.8 cookie 和 session 的区别
① cookie 只能存储 ASCII 码,而 session 可以存储任何类型的数据。
② session 存储在服务器,而 cookie 存储在客户浏览器中,容易被恶意查看。。
③ session 的运行依赖 session id,而 session id 存在 cookie 中,叫做 JSESSIONID。如果浏览器禁用了 cookie ,同时 session 也会失效(可以通过其它方式实现,比如在 url 中传递 session_id)。
3.9 输入一个 url 发生的事
- 判断 url 是否合法,如果不合法会使用默认的搜索引擎进行搜索。如果输入的是一个域名,默认会加上一个 http 前缀。
- 先检查浏览器的 DNS 缓存,没有则检查本地 hosts 文件的缓存,如果仍然没有会向 DNS 服务器发送请求,最终DNS 服务器得到域名和 IP 地址的映射关系,把结果返回给用户并进行缓存。
- 获取 IP 地址后,通过 TCP 三次握手建立连接,发送请求报文。
- 服务器收到请求报文后进行响应,主进程进行监听,创建子进程处理,先判断是否是重定向,如果是重定向则返回重定向地址。如果是静态资源则直接返回,否则通过 REST URL 在代码层面处理,最后返回响应报文。
- 浏览器收到 HTTP 响应报文后进行解析,首先查看响应报文的状态码,根据不同的状态码做不同处理。之后解析 HTML、CSS、JS 等文件,构建 DOM 树,渲染树,重绘。最后将像素发送 GPU 进行渲染,将渲染结果返回给用户并进行缓存。
- 通过 TCP 的四次挥手断开连接,如果是 HTTP1.1 则会将连接保持一小段时间(长连接)。
3.10 HTTPS 单向认证与双向认证
单向认证
单向认证:只对通信某一方的身份合法性进行认证,例如在web应用中客户端在与服务端进行通信的时候,只要求对服务端的身份进行认证(这就要求服务端必须有一个CA证书,以供检验)。
单向认证原因:用户数目广泛,且无需在通讯层对用户身份进行验证,一般都是在应用逻辑层保证用户的合法登入。
文字描述:
首先建立链接 => 验证服务端身份 => 用服务端公钥加密得到后期通信用的密钥 => 服务端用私钥解密,拿到密钥 => 双方使用密钥通信
在上面这个过程中,我们可以看到仅仅是验证了服务端的身份,如果有人冒充了客户端,那该怎么办,就是下面要说的双向认证。
双向认证
较于单向认证来说,双向认证多了验证客户端身份的这一环节
文字描述:
首先建立连接 -> 验证服务端身份->验证客户端身份->客户端发送加密方案->服务端用客户端公钥加密,选择方案->客户端拿到方案,用服务端公钥加密密文->服务端解密,拿到密文->双方使用密文通信
(这个方案指的是对称机密的方案~)
Http1、Http2、Http3 区别
HTTP1.0:
- 浏览器与服务器只保持短暂的连接,浏览器每次请求都需要与服务器建立一个TCP连接
HTTP1.1:
- 引入了持久连接(TCP 默认不关闭,可以被多个请求复用)
- 在同一个 TCP 连接里,客户端可以发送多个请求
- 多个请求按次序在服务端被处理
- 新增了一些请求方法、请求头和响应头
HTTP2.0
- 采用二进制格式而非文本格式
- 完全多路复用,而非有序并阻塞的、只需要建立一个连接即可实现并行
- 使用报头压缩,降低开销
- 服务器推送
HTTP3.0
- QUIC 基于 UDP 实现,是 HTTP/3 中的底层支撑协议,该协议基于 UDP,又取了 TCP 中的精华,实现了即快又可靠的协议。
Ping 命令
ping 命令使用什么协议
ping 命令使用 ICMP 协议,是“Internet Control Message Protocol”(Internet 控制消息协议)的缩写,该协议是 TCP/IP 协议簇的一个子协议,用于在 IP 主机、路由器之间传递控制消息,控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP 协议
ICMP 是个非常有用的协议﹐尤其是当我们要对网路连接状况进行判断的时候。
ICMP 协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。 它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到 IP 数据无法访问目标、IP 路由器无法按当前的传输速率转发数据包等情况时,会自动发送 ICMP 消息。
在网络中经常会使用到 ICMP 协议。例如经常用于检查网络不通的 ping 命令,这个 ping 的过程实际上就是 ICMP 协议工作的过程。
其功能主要有:侦测远端主机是否存在,建立及维护路由资料,重导资料传送路径(ICMP 重定向),资料流量控制。ICMP 在沟通之中,主要是透过不同的类别(Type)与代码(Code) 让机器来识别不同的连线状况。
Ping 功能常见应用
- 使用 ipconfig /all,观察本地网络设置是否正确。
- Ping127.0.0.1,127.0.0.1 回送地址 Ping 回送地址是为了检查本地的 TCP/IP 协议是否设置成功。
- Ping 本机 IP 地址,是为了检查本机的 IP 地址是否设置有误。
- Ping 本网网关或本网 IP 地址,是为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常。(在非局域网中这一步骤可以忽略)
- Ping 本地 DNS 地址,是为了检查本地 DNS 服务器是否工作正常。
- Ping 远程 IP 地址,这主要是检查本网或本机与外部的连接是否正常。
四. IP 协议
4.1 IP 协议的功能
- 寻址和路由;(根据对方的IP地址,寻找最佳路径传输信息)
- 传递服务:① 不可靠(IP协议只是尽自己最大努力去传输数据包),可靠性由上层协议提供(TCP协议);② 无连接;(事先不建立会话)
- 数据包的分片和重组。
4.2 IP 数据包详解
- 版本号 (4位):
0100 = Version : 4(表示使用的 IPv4协议),对等层之间要使用同一种IP协议(IPv4协议);
- 首部长度 (4位)
在IP数据报中有4bit来标示首部长度,1bit=4字节,所以15bit对应60字节。普通的IP首部长为20个字节,所以这个标识符值为5即可,60是最大字节长。
数据报中有4位bit空位来交给“首位长度”,那填满就是1111,折合十进制的15;如果不填满,写的是0001,折合十进制就是1。
填满的1111,代表了首部长度是15X4=60字节;写0001,代表了首部长度是1X4=4字节…就是1bit的标示数代表了首部是4个字节长 填满时的1111对应首部最大长度60字节。
- 服务类型 (8位)
Differentiated Services Field 字段来区分服务,Delay = 1 延迟小,Throughput = 1吞吐量大,Reliability = 1 质量比较高,Cost = 1 最小代价。同一时刻只能有一位是1。
- 总长度 (16位)
2^16 - 1 = 65535 字节,是首部和数据之和的长度,单位为字节,因此数据报的最大长度为65535字节(MTU最大传送单元)
- 标识符 (16位)
是一个计数器,用来产生数据包的标识。
- 标志位 (3位)
数据包在传输的过程中,标志字段MF(More Fregment),MF = 1表示后面还有分片,MF = 0 表示最后一个分片
- 片偏移 (13位)
每个数据片不同时传输,标志着某片在原分组中的相对偏移位置,以8字节为1个偏移单位;
- 生存时间 (8位)
使用“跳数“作为TTL的单位。数据报每经历一个路由器时对应的TTL值就会减 1 。防止数据报发送在路由器中出现环路,因为数据报在传送的过程中要占用一定的带宽(TTL值为零自动丢弃)
- 协议 (8位)
指出此数据报所携带上层数据使用的TCP协议还是UDP协议,以便对等层接收到数据报交给上层相应的协议(TCP或者UDP协议)进行处理
- 首部检验和 (16位)
只校验数据报的首部,不包含数据部分;看IP数据报头部是否被破坏、被篡改和丢失等;
- 源地址 (32位)
数据向外发送,发送机器本身的IP地址,也成为逻辑地址
- 目的地址 (32位)
数据具体要发送目标及其的IP地址。
4.3 逻辑地址和物理地址解释
逻辑地址:(工作在网络层)也称为IP地址,具有特征 ① 全局唯一性;② 使用软件来实现网络中地址管理;③ 占32位,4字节;
物理地址:(工作在网络接口层)也称为硬件地址、链路地址或MAC地址,具有特征:① 本地范围唯一性;② 使用硬件实现(路由器、计算机有设置MAC地址的位置);③ 占48位,12字节,16进制表示!例如:74-E5-0B-35-60-16 :0111 0100-1110 0101-0000 1011-0011 0101-0110 0000-0001 0110
4.4 为什么有了 IP 地址,还要使用 MAC 地址
- IP地址一般情况下容易修改和变动,具有随意性,不能在网络上固定标识一台设备;
- MAC地址一般情况出厂时由厂家烧录到网卡中,不容易修改,在局域范围内容易唯一定位一台设备。
- 从拓扑结构和分层上分析,IP地址属于网络层,主要功能在广域网范围内路由寻址,选择最佳路由,而MAC地址在网络接口层要形成适合于网络媒体上传输的数据帧。
注意:标识一个设备的三种方式:① 域名访问(www.baidu.com,应用层);② 设备的IP地址访问(网络层);③ 设备的MAC地址(在局域网当中唯一标识该设备,实际不用其访问,在网络接口层,具有固定的特性,不易发生紊乱现象)。
4.5 子网掩码
子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
ip分类:
- A类:1.0.0.0 - 126.255.255.255 (子网掩码:255.X.X.X)
- B类:128.0.0.0 - 191.255.255.255 (子网掩码:255.255.X.X)
- C类:192.0.0.0 - 233.255.255.255 (子网掩码:255.255.255.X)
- D类:224.0.0.0 - 239.255.255.255
- E类:240.0.0.0 - 254.255.255.255
IP地址 = 网络地址 + 主机地址
A类 8位 + 24位
B类 16位 + 16位
C类 24位 + 8位
详细计算:
创建vlan1:ip地址:192.168.1.1 子网掩码:255.255.255.0
创建vlan2: ip地址:192.168.2.1 子网掩码:255.255.255.0
判断它们是不是在同一个网段?
'''
将ip地址192.168.1.1转换为二进制
11000000 10101000 00000001 00000001
将子网掩码255.255.255.0转换成二进制
11111111.11111111.11111111.00000000
然后将两者相“与(and)"运算:
11000000 10101000 00000001 00000001
11111111.11111111.11111111.00000000
然后得到:
11000000 10101000 00000001 00000000
转换成网络号就是:192.168.1.0
'''
同理计算出vlan2的网络号是:192.168.2.0。所以不是一个网段。
4.6.MAC 地址
MAC地址是一个用来确认网络设备位置的位址。MAC地址用于在网络中唯一标示一个网卡,就如同身份证上的身份证号码,具有唯一性。
IP属于网络层,连接网络(网络之间通过ip互连)。
MAC属于数据链路层,连接局域网中的主机。
IP 地址和 MAC 地址相同点是它们都唯一,不同的特点主要有:
- IP地址可以根据需要改动,而MAC则是生产厂商烧录好的,不能改动
- 长度不同。IP地址为32位,MAC地址为48位
- 分配依据不同。IP地址的分配是基于网络拓扑,MAC地址的分配是基于制造商
- 寻址协议层不同。IP地址应用于网络层,而MAC地址数据链路层。数据链路层协议可以使数据从一个节点传递到相同链路的另一个节点上(通过MAC地址),而网络层协议使数据可以从一个网络传递到另一个网络上
4.7 路由最短路径算法
狄克斯特拉(Dijkstra)算法、A*算法、SPFA算法、Bellman-Ford算法和Floyd-Warshall算法
狄克斯特拉算法可分为5步:(有向加权图)
- 找出从起点出发,可以前往的、开销最小的未处理点
- 对于该节点的邻居,检查是否有前往他们的更短路径,如果有,则更新其开销
- 将该节点加入已处理队列中,后续不再处理该节点
- 重复1-4步,直到对图中除了终点的所有节点都进行了检查
- 得到最终路径
五. 网络安全
5.1 安全的计算机网络特性
- 机密性
仅有通信双方能理解传输内容,报文必须加密使截获者无法理解。
- 报文完整性
通信内容在传输过程中需要确保未被篡改。
- 端点鉴别
通信双方都能证实另一方的身份。
- 运行安全性
几乎所有机构都与互联网相连,需要通过访问控制确保安全性,防火墙位于机构和公共网络之间,控制通过网络的分组;入侵检测系统执行分组检查任务,检测可疑活动。
5.2 常见的网络攻击
5.2.1 篡改
攻击者篡改网络上传输的报文、中断报文的传送、或者把完全伪造的报文发给接收端。
5.2.2 恶意程序
- ① 计算机病毒,修改其他程序来把自身的变种复制进去。
- ② 计算机蠕虫,通过网络通信把自己从一个节点发往另一个节点,并自动启动。
- ③ 特洛伊木马,它执行的功能并非声称的功能,而是恶意程序。
- ④ 逻辑炸弹,当运行环境满足某种条件时就会执行某种功能。
- ⑤ 后门入侵,利用系统漏洞通过网络入侵。
5.2.3 拒绝服务 DoS
DoS 攻击使网络、主机不能由合法用户使用,电子邮件服务器、DNS 服务器和机构都可能成为攻击目标。
DoS 包括:
- 弱点攻击,向目标主机上运行的易受攻击的应用程序或操作系统发送精细制作的报文。
- 带宽洪泛,攻击者向目标主机发送大量分组,使其接入链路变得阻塞导致分组无法到达服务器。
- 连接洪泛,在目标主机创建大量 TCP 连接,主机因这些伪造的连接而陷入阻塞。
5.2.4 ARP 欺骗
攻击者向以太网交换机发送大量伪造的源 MAC 地址,以太网交换机把虚假的 MAC 地址填入到交换表中,导致交换机无法正常工作。
预防ARP欺骗:
- 加强路由器的密码复杂度
- 使用预防软件,杀毒软件
5.2.5 SQL 注入
sql 注入就是通过把 SQL 命令插入 web 表单或域名中,达到欺骗服务器以执行恶意的 SQL 命令。
产生的原因其实是没有对输入进行安全过滤,后台直接将用户的输入当做了 sql 语句的一部分执行。
类型:数字型注入,字符型注入,基于报错注入等。
预防 SQL 注入
- 严格检查输入参数的类型和格式
- 过滤和转义特殊字符
SQL 盲注:
数据库的执行结果不会直接显示到页面上,页面上只会显示真和假两种状态。
5.2.6 XSS(跨站脚本攻击)攻击
xss其实也算是注入的一种,只不过属于html/js注入,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
预防 XSS 攻击:
- 所有的输入都是不可信任的。严格检查输入参数的类型和格式。
5.2.7 文件上传漏洞
文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成的,攻击者可通过 Web 访问的目录上传任意文件,包括网站后门文件(webshell),进而远程控制网站服务器。
预防文件上传漏洞:
- 严格限制和校验上传的文件,禁止上传恶意代码的文件。
- 校验文件后缀和类型。
5.2.8 CSRF(跨站请求伪造)攻击
- 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
- 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
- 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
- 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
- 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
CSRF 攻击必须满足两个条件:
- 登录受信任网站 A,并在本地生成 Cookie
- 在不登出 A 的情况下,访问危险网站 B
预防 CSRF 攻击:
- 验证 HTTP Referer 字段。 根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。
- 在请求地址中添加 token 并验证。token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对
- 加验证码
5.2.9 DDoS(分布式拒绝服务)攻击
Distributed Denial of Service是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,由于攻击的发出点是分布在不同地方的,所以这类攻击称为分布式拒绝服务攻击。
每一个攻击代理主机都会向目标主机发送大量的服务请求数据包,这些数据包经过伪装,无法识别它的来源,而且这些数据包所请求的服务往往要消耗大量的系统资源,造成目标主机无法为用户提供正常服务。甚至导致系统崩溃。分类:
- SYN Flood 攻击
SYN Flood 利用了TCP协议实现上的一个缺陷。通过向网络服务所在端口发送大量的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占满,从而阻止其他合法用户进行访问。
2. UDP Flood 攻击
UDP Flood是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。由于UDP协议是一种无连接的服务,在UDP Flood攻击中,攻击者可发送大量伪造源IP地址的小UDP包。
3. ICMP Flood 攻击
ICMP Flood利用大的流量给服务器带来较大的负载,影响服务器的正常服务。
4. Connection Flood 攻击
Connection Flood利用真实的IP地址向服务器发起大量的连接。并且建立连接之后很长时间不释放,占用服务器的资源,造成服务器上残余连接(WAIT状态)过多,效率降低,甚至资源耗尽,无法响应其他客户所发起的链接。
5. HTTP Get 攻击
特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用。
5.3 安全协议
网络层
IPsec 是能够为两个网络实体提供通信安全的协议族,没有限定用户必须使用的加密算法,许多机构都使用 IPsec 保证 VPN 的安全性。
IPsec 有两个主要协议:鉴别首部 AH 和封装安全有效载荷 ESP。AH 提供源鉴别和数据完整性服务,而 ESP 除了这两种服务外还提供机密性服务,因此使用比 AH 广泛。使用 AH 或 ESP 的 IP 数据报称为 IP 安全数据报,IP 安全数据报有两种工作方式:
- 运输方式,在整个运输层报文段的前后分别加上控制信息,再加上 IP 首部;
- 隧道方式,在原始 IP 数据报的前后分别加上控制信息,这种方式使用较多。
运输层
运输层的安全协议主要是 SSL 和 TLS ,TLS 是 SSL3.0 的修改版本。SSL 主要作用在端系统的 HTTP 和运输层之间,在 TCP 上建立起一个安全通道,为 TCP 传输数据提供安全保障。
SSL 提供的安全服务包括:
- 服务器鉴别:允许用户证实服务器的身份,支持 SSL 的客户端通过验证来自服务器的证书鉴别服务器的身份并取得服务器的公钥;
- 客户鉴别:SSL 可选的安全服务,允许服务器验证用户的身份;
- 加密的 SSL 会话:对客户和服务器发送的所有报文进行加密,检测报文是否被篡改。
5.4 安全技术
5.4.1 密码技术
密码技术使发送方可以伪装数据,入侵者不能从截获到的数据中获得有效信息。
对称加密
使用相同的加密密钥和解密密钥,运算速度快,但安全性差。使用对称密钥时,在通信信道上可以进行一对一的双向保密通信,每一方既可以用该密钥加密明文,也可以解密密文。这种保密通信仅限于持有此密钥的双方。
非对称加密
使用公钥进行加密,私钥进行解密,公钥是任何人都可以得知的,而私钥是通信双方独有的。运算速度慢,但是安全性好。最常见的公钥加密算法是 RSA,它使用两个大素数 p 和 q 生成密钥,pq 的值越大破解难度越大,但耗时也越长。使用公开密钥时,在通信信道上是多对一的单向保密通信,可以同时有很多客户利用公钥对报文加密后发送给服务器,服务器利用其私钥可以对收到的密文一一解密,但如果是反方向则行不通,例如网购时很多客户都向同一网站发送各自的信用卡信息。
5.4.2 数字签名
作用
报文鉴别:接收者可以确认报文发送方的身份。
报文完整性:接收者可以确信报文内容没有被篡改过。
不可否认:发送者事后不能抵赖对报文的签名。
实现原理
用私钥对报文进行 D 运算得到密文,接收方会利用发送方的公钥进行 E 运算还原出明文。
- 报文鉴别:除了发送方外没有人持有其私钥,无法产生发送方才能产生的密文。
- 报文完整性:如果其他人篡改过密文,解密出的明文就会不可读。
- 不可否认:如果发送方抵赖发送过报文,接收方可以把初始报文和密文发送给公证的第三者,第三者通过公钥进行验证。
公钥认证
攻击者可能会发送使用自己私钥加密的密文和自己的公钥来伪造发送方的身份,该问题通过 CA 解决,发送方在发送数据时也会发送 CA 签署的证书,接收方会利用 CA 的公钥核实发送方证书的合法性并提取发送方的公钥。
CA 即认证中心,将公钥与特定的实体绑定, 职责是使识别和发行证书合法化。CA 认证一个实体的真实身份,生成一个将其身份和实体的公钥绑定起来的证书,证书包含了这个公钥和公钥所有者全局唯一的身份标识信息(例如一个人名或一个 IP)。
5.4.3 报文鉴别
报文鉴别就是鉴别收到的报文确实是期望的发送方发送的,而不是别人伪造的。
数字签名可以实现报文鉴别,但缺点是对较长报文进行签名时需要长时间的运算。有一种相对简单的报文鉴别方式,即密码散列函数,要找到两个不同的报文,它们具有相同的密码散列函数输出,在计算上是不可行的。
使用散列函数进行报文鉴别
通信双方共享一个密钥 k ,发送方生成报文 m,用 k 级联 m 生成 m+k,并使用 SHA-1 或 MD5 这样的散列函数计算 m+k 的散列值 h,这个散列值就被称为报文鉴别码 MAC。发送方会利用 MAC 生成扩展报文并发送给接收方。接收方收到后,由于知道共享密钥 k,因此可以计算出 MAC,如果和 h 相等就可以得出一切正常的结论。
5.4.4 端点鉴别
端点鉴别主要通过鉴别协议 ap 实现,鉴别协议通常在两个通信实体运行其他协议之前运行,仅当鉴别完成后各方才继续下面的工作。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
CA 解决,发送方在发送数据时也会发送 CA 签署的证书,接收方会利用 CA 的公钥核实发送方证书的合法性并提取发送方的公钥。
CA 即认证中心,将公钥与特定的实体绑定, 职责是使识别和发行证书合法化。CA 认证一个实体的真实身份,生成一个将其身份和实体的公钥绑定起来的证书,证书包含了这个公钥和公钥所有者全局唯一的身份标识信息(例如一个人名或一个 IP)。
5.4.3 报文鉴别
报文鉴别就是鉴别收到的报文确实是期望的发送方发送的,而不是别人伪造的。
数字签名可以实现报文鉴别,但缺点是对较长报文进行签名时需要长时间的运算。有一种相对简单的报文鉴别方式,即密码散列函数,要找到两个不同的报文,它们具有相同的密码散列函数输出,在计算上是不可行的。
使用散列函数进行报文鉴别
通信双方共享一个密钥 k ,发送方生成报文 m,用 k 级联 m 生成 m+k,并使用 SHA-1 或 MD5 这样的散列函数计算 m+k 的散列值 h,这个散列值就被称为报文鉴别码 MAC。发送方会利用 MAC 生成扩展报文并发送给接收方。接收方收到后,由于知道共享密钥 k,因此可以计算出 MAC,如果和 h 相等就可以得出一切正常的结论。
5.4.4 端点鉴别
端点鉴别主要通过鉴别协议 ap 实现,鉴别协议通常在两个通信实体运行其他协议之前运行,仅当鉴别完成后各方才继续下面的工作。
[外链图片转存中…(img-X4KGlov7-1715795699251)]
[外链图片转存中…(img-f9sB2DTL-1715795699251)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!