网络安全必备网络基础知识一

写在前面,这玩意写的我头疼,虽然也是照着资料敲键盘,但是很多内容都没有展开,毕竟网络知识太多太多了,而这里虽然是简化版的适用于安全从业者的基础知识,但也有小一万字,我写都这么痛苦了,相信很多人看到这些纯文字的理论知识会更加痛苦,但是如果你看完了这篇文章,你会对网络有一个基本的认识,此外如果想更加深入的了解网络知识,可以看我网络专栏的其他文章,虽然也是安全方向的,但是基础知识还是很全的,这里仅是一个重点的总结

网络协议基础01

网络协议分层

TCP/IP四层模型:网络接口层-》网络层-》传输层—》应用层

现在基本上说TCP/IP为五层将网络接口层分为物理层和数据链路层两层

OSI七层参考模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

ps:OSI模型是理想模型,没事实际应用到生活中,并不是真实使用的,仅用来参考

协议的每一层间都是环环相扣的,每一层协议都是在使用下层协议提供的服务的基础上为上层协议提供服务

所以,协议的每一层只需要专注于该层所需完成的功能,而不需要关注其他环节,即我只完成我的工作

对于协议的理解可以类比于寄快递,每一层相当于快递中转的一个节点

应用层

应用层是最上层的,也是我们能直接接触到的

应用层简单来说就是,我们使用的应用程序/浏览器/app等软件就是在应用层实现的

比如说QQ聊天,我们看到的聊天窗口就是在应用层实现的

同时,我们需要跟朋友聊天,即两台不同的设备间需要通信,那么QQ(应用)就会把数据传递给下一层——传输层

总结来说,应用层就是使用传输层的服务为客户提供交互功能服务

所以,应用层只需要专注于为用户提供应用功能,不需要关注数据是如何传输的

应用层类比快递流程,处于寄/收快递的阶段,发送端只需要将要发送的内容打包交给邮递员(传输层)即可,剩下的就不需要考虑快递是如何被运输的,而接收端只需要将拿到的包裹拆开使用即可,也不需要了解快递是如何送过来的。

应用层工作在操作系统中的用户态,传输层及以下则工作在内核态

传输层

传输层使用网络层的服务,为应用层提供通信服务

应用层的数据包会传给传输层,传输层是为应用层提供网络支持的

传输层有两个重要的传输协议——TCP和UDP

TCP全程叫传输层控制协议,大部分应用使用的正是TCP传输协议,比如HTTP应用层协议

TCP协议相比UDP多了很多特性,如三次握手四次挥手流量控制、超时重传、拥塞控制等,这些都是为了保证数据包可靠的传输给对端

UDP相对于TCP就简单很多,简单到只负责发送数据包,不保证数据包是否能抵达对端,但UDP协议的实时性相对更好,传输效率更高。

UDP协议也可以实现可靠传输,把TCP的特性在应用层实现即可,不过要实现一个商用的可靠UDP传输协议,也不是一件简单的事情,不如直接使用TCP

TCP和UDP简单理解,一个保证数据能完整安全的抵达对端,但是效率相对不高;另一个虽然可能会丢失部分数据,但是传输效率相对较高。每一种协议必然存在优点但也难免存在一些缺陷,在不同应用场景下,选择合适的传输协议,可以事半功倍

如,在视频通话时,相信大家经历过在网络状况差的情况下,画质降低/卡顿/甚至有声音没图像,这种应用场景使用的就是UDP协议,我需要及时的将内容发送给对端,但是损失部分画质并没有太大的影响,所以使用UDP。如果使用TCP,那么将不会出现画质降低和画面丢失的情况,但可能会非常的卡,我说了一句话,对端在三分钟后才完整收到。

再比如,网络支付操作时,使用的就是TCP协议,因为如果丢失任何一部分数据,那么就可能出现无法挽回的大问题

应用需要传输的数据可能会非常大,如果直接传输就不好控制,因此当传输的数据包大小超过MSS(TCP最大报文段长度),就要将数据包分块,这样即使途中有一个分块丢失或损坏了,只需要重新发送这一个分块,而不用重新发送整个数据包。在TCP协议中,我们把每一个分块称为一个TCP段

当设备作为接收方时

传输层则要把数据包传给应用,但是一台设备上可能会有很多应用在接收或传输数据,因此需要用一个编号将应用区分开来,这个编号就是端口

比如常见的端口与服务的对应:web服务 80端口;ssh服务 22端口;mysql 3306端口;远程连接 3389端口;redis服务 6379端口等等

而对于浏览器来说,每一个标签栏都是一个独立的进程,操作系统会为这些进程分配临时的端口号

由于传输层的报文会携带端口号,因此接收方可以识别出该报文是发送给哪个应用的

传输层就好像快递小哥,在寄快递时,为包裹打上送送货地址和收货地址,再送到快件总部;在收快递时,根据收货地址,准确的将包裹送到个人手中

网络层

网络层使用数据链路层的服务,为传输层提供数据传输服务

传输层可能会被认为是负责将一个数据从一个设备传输到另一个设备,事实上它做不到

实际场景中的网络环境是错综复杂的,中间有各种各样的线路和分叉路口,如果一个设备的数据要传输给另一个设备,就需要在各种各样的路径和节点进行选择,而传输层的设计理念是简单、高效、专注,如果传输层还负责这一块功能就有点违背设计原则了

其实传输层就是快递小哥的角色,他只需要服务好客户(应用层)即可,帮助实现应用到应用的通信,而实际的传输功能就交给下一层快递公司也就是网络层

网络层最常使用的是IP协议IP协议会将传输层的报文作为数据部分,再加上IP包头组装成IP报文,如果IP报文大小超过MTU(以太网中一般为1500字节)就会再次进行分片,得到一个即将发送到网络的IP报文。

为了解决上面提到的网络环境复杂节点多等问题,网络层需要有区分设备的编号

我们一般用IP地址给设备进行编号,对于IPv4协议,IP地址共32位,分成了形如192.168.1.1的四段,每一段是8个二进制位,换算为十进制最大值为255

但是,只有一个单纯的IP地址虽然做到了区分设备,但是寻址起来就特别麻烦,而设备有多,一个一个去匹配显然不科学

因此,需要将IP地址分成两种意义:

  1. 一个是网络号,负责标识IP地址是属于哪个子网的;
  2. 一个是主机号,负责标识同一子网下的不同主机;

这时候就需要配合子网掩码才能算出IP地址的网络号和主机号,那么在寻址过程中,先匹配到相同的网络号后,再去寻找对应的主机

除了寻址能力,IP协议还有另一个重要的职能就是路由。实际场景中,两台设备并不是使用一条网线连接起来的,而是通过很多网关、路由器、交换机等众多网络设备连接起来的,那么就会形成很多条网络的路径,因此当数据包到达一个网络节点,就需要通过算法决定下一步走那条路径——下一跳地址

所以,IP协议的寻址作用是告诉我们去往下一个目的地该向哪个方向走,而路由则是根据下一个目的地选择最优路径。寻址更像在导航,而路由则更像在操作方向盘。

网络层就好比快递公司,快递公司会把取到的货物打上快递公司的标签(IP头),并且分发到下一层;收货时,将标签撕去,发给快递员

数据链路层

数据链路层使用物理层的服务,为网络层提供链路级别传输的服务

在实际的场景中,网络并不是一个整体,比如在家和学校就不属于一个网络,所以数据不仅可以在同一个网络设备中进行传输,也可以跨网络进行传输

一旦数据需要跨网络传输,就需要有一个设备在两个网络当中,这个设备一般是路由器,路由器可以通过路由表计算出下一个要去的IP地址。

数据链路层要解决的问题就是,路由器怎么直到这个IP地址对应的是那个设备呢

于是,就需要有一个专门的层来标识网络中的设备,让数据在一个链路中传输,这就是数据链路层

每一台设备的网卡都会有一个MAC地址,是用来唯一标识设备的,路由器计算出了下一个目的地IP地址,再通过ARP协议找到该目的地的MAC地址,这样就知道这个IP地址是哪个设备的了

数据链路层就好比调度人员,通过快递公司的标签,将包裹送到指定的车辆上去

物理层

物理层为数据链路层提供二进制传输服务

当数据准备要从设备发送到网络时,需要把数据包转换成电信号,让其可以在物理介质中传输,这一层就是物理层,物理层才开始真正的传输数据

应用层的数据报文经过传输层打上TCP/UDP的标签,经过网络层打上IP的标签,再经过数据链路层打上MAC地址的标签,最后通过物理层传输,传输时遇到的不同网络设备,会一定程度上的解封装,比如需要路由器进行转发时,路由器会解封装到网络层,查看目的地址与下一跳地址,再将数据包重新封装后扔到下一跳地址所对应的设备,经过多个节点后,到达目的地地址,一层一层解封装后交还给应用层的应用。

整个传输过程简单来说就是封装与解封装的过程

什么是IP

IP的基本认识

IP的作用

IP在TCP/IP参考模型中处于第三层,也就是网络层

网络层的主要作用是:实现主机与主机之间的通信,也叫点对点通信

IP的作用是在复杂的网络环境中将数据包发送给最终的目的主机

IP与MAC的关系

IP(网络层)和MAC(数据链路层)之间的区别和关系

在上面我们知道IP的作用是主机之间通信的,而MAC的作用则是实现直连的两个设备之间通信,而IP负责在没有直连的两个网络之间进行通信传输

简单来说就是MAC看过程,而IP看结果

MAC只负责某一个区间之间的通信传输

IP负责将数据包发给最终的目的地址

将数据传输比作旅行,IP就是行程表,而MAC地址就是车票,一次旅行可能需要很多张车票,但只需要一张行程表

源目IP在传输过程中是不会变化的,只有源目MAC地址一直在变化

IP的基础知识

IP地址的定义

在TCP/IP网络通信时,为了保证能正常通信,每个设备都需要配置正确的IP地址,否则无法实现正常的通信

IPv4地址由32位正整数来表示,IP地址在计算机是以二进制方法处理的

而人们为了方便记忆,采用了点分十进制的标记方式,也就是将32位IP地址以每8位为一组,共分为四组,每组以[.]隔开,再将每组转换成十进制,这样便变成了我们熟悉的192.168.x.x

IP地址的最大值为:2的32次方,4294967296

也就是说,最大允许43亿台计算机连接到网络。

但实际上,IP地址并不是根据主机台数来配置的,而是以网卡,像服务器、路由器等设备都是有两个以上的网卡,也就是它们会有两个以上的IP地址

很遗憾的说,现在IPv4地址已经用差不多了,为解决此问题还出现了子网划分等应对措施

不过目前IPv6的诞生彻底解决了IP地址不够用的问题

Ip地址分类

互联网诞生之初,IP地址显得很充裕,于是计算机科学家门设计了分类地址。

IP地址分为5种类型:ABCDE五类

A类地址:标识位为0,后跟7位网络号,和24位主机号

B类地址:标识为为10,后跟14位网络号,和16位主机号

C类地址:标识位为110,后跟21位网络号,和8位主机号

D类地址:标识位位1110,后跟28位组播地址

E类地址:标识位位11110,后跟27位留待后用

标识位就是分类号,用以区分IP地址类别

举个例子192.168.x.x,内网地址,将192转化位2进制,11000000,标识位匹配110,则为C类网

其中对于A、B、C类主要分为两个部分,分别是主机号和网络号

A类地址IP范围:0.0.0.0~127.255.255.255 最大主机数量16777214

B类地址IP范围:128.0.0.0~191.255.255.255 最大主机数量65534

C类地址IP范围:192.0.0.0~223.255.255.255 最大主机数量 254

注:这里的最大主机数量是指每一个C类地址可以有的最大主机数量

最大主机个数就是要看主机号的位数,如C类网8位主机号,那么C类地址的最大主机个数为:2的8次方-2=254个

为啥要减2呢?因为在IP地址中有两个IP是特殊的,分别为主机号全为1(广播地址)和主机号全为0(主机地址),这两个地址是不能用的。在分配的时候应当去除这两种情况

广播地址用于在同一个链路中相互连接的主机之间发送数据包

IP分类的优点

不管是路由器还是主机解析到一个IP地址的时候,我们判断其IP地址的首位是否为0,为0则为A类网,那么就能很快找出网络地址和主机地址

如果第一位为1,则继续判断第二位是否为0,为0则为B类网

如果第二位为1,则继续判断第三位是否为0,为0则是C类网

依次类推

说白了,就是根据标识位判断是那类网,标识位的设计还是比较巧妙的,0,10,110,1110,…

所以,这种分类地址的优点就是简单明了,基于网络地址的选路简单

公有IP与私有IP地址

在A、B、C分类地址,实际上分公有IP地址和私有IP地址,如我们刚才提到的192.168.x.x就是C类私有地址

私有地址划分表

A类:10.0.0.0~10.255.255.255.255

B类:172.16.0.0~172.31.0.0

C类:192.168.0.0~192.168.255.255

平时在学校、办公室、家中用的IP地址,一般都是私有IP地址,因为这些地址允许组织内部的IT人员自己管理、自己分配,而且可以重复,因此你家的IP和我家的IP可以是一样的。

就像Windows系统中ipconfig看到的ip地址,一般情况下就是私有地址,这个地址在同一网络下不会重复,但在不同网络下则可能相同

举个栗子,每个城市都有自己的中学,在城市中可以直接称为一中、二中,但是不同城市间,就要带上城市名,XX市一中或XX区一中(公网IP地址),是国家同一分配的,不能两所学校都叫DG一中

所以,公有IP地址是有一个组织统一分配的,假设你要开一个博客网站,那么你就需要去申请购买一个公有IP,这样全世界的人才能访问,并且公有IP地址基本上要在整个互联网范围内保持一致

IP协议相关技术

DNS域名解析

正在上网时,通常使用的是域名而不是IP地址,因为域名方便人们记忆

那么实现这一技术的就是DNS域名解析,DNS可以将域名网址自动转换为具体的IP地址

域名的层级关系

DNS中的域名都是用句点来分隔的,比如www.baidu.com,这里的句点代表了不同层次之间的界限

在域名中,越靠右的位置标识其层级越高

根域是在最顶层,它的下一层就是.com顶级域,再下面是baidu.com

所以域名的层级关系类似一个树状结构

根 DNS 服务器

顶级域 DNS 服务器 com

权威 DNS 服务器 baidu.com

根域的DNS服务器信息保存在互联网中所有的DNS服务器中,这样一来任何DNS服务器就可以找到并访问根域DNS服务器了

因此,客户端只要能够找到任意一台DNS服务器,就可以通过它找到根域DNS服务器,然后再一路顺藤摸瓜找到位于下层的某台目标DNS服务器

域名解析工作流程

浏览器首先看一下自己的缓存里面有没有,如果没有就向操作系统的缓存要,如果还没有就检查本机域名解析文件hosts,如果还是没有,就会DNS服务器进行查询

  1. 客户端首先会发出一个DNS请求,访问www.baidu.com的IP地址是啥,并发给本地DNS服务器(也就是客户端的TCP/IP设置中填写的DNS服务器地址)kali中可以 cat /etc/resolv.conf查看,如果kali域名解析失效,可以ping 8.8.8.8排查是否是DNS服务器的问题
  2. 本地域名服务器收到客户端的请求后,如果缓存里的表格能找到www.baidu.com,则它直接返回IP地址。如果没有,本地DNS会去问它的根域名服务器:“大哥,能告诉我www.baidu.com的IP地址吗?“根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路
  3. 根DNS收到来自本地DNS的请求后,发现后置是.com,说”www.baidu.com这个域名归.com区域管理,我给你.com顶级域名服务器的地址,你去问问它吧”
  4. 本地DNS收到顶级域名服务器的地址后,发起请求问“二哥,你能告诉我www.baidu.com的IP地址吗?”
  5. 顶级域名服务器说:“我给你负责www.baidu.com区域的权威DNS服务器的地址,它应该知道"
  6. 本地DNS于是转向问权威DNS服务器:”三哥,www.baidu.com对应的IP是啥啊?"
  7. 权威DNS服务器查询后将对应的IP地址x.x.x.x告诉本地DNS
  8. 本地DNS再将IP地址返回客户端,客户端和目标建立连接

至此,我们完成了DNS解析过程

ARP与RAPP协议

在传输一个IP数据报的时候,确定了源IP地址和目标IP地址后,就会通过主机路由表确定IP数据包下一跳。然而,网络层的下一层是数据链路层,所以我们还要知道,下一跳的MAC地址

那么ARP又是怎么知道对方的MAC地址呢

简单地说,ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的

主机会通过广播发送ARP请求,这个包中包含了想要知道的MAC地址的主机IP地址

当同链路中的所有设备收到ARP请求时,会去拆开ARP请求包里的内容,如果ARP请求包中目标IP地址与自己的IP地址一致,那么这个设备就将自己的MAC地址塞入ARP响应包返回给主机

操作系统通常会把第一次通过ARP获取的MAC地址缓存起来,以便下次直接从缓存中找到对应IP地址的MAC

不过MAC地址的缓存是有一定期限的,超过这个期限,缓存内容将被清除(老化时间)

RARP协议又是什么

ARP协议是已知IP地址求MAC地址,那RARP协议正好相反

它是已知MAC地址请求IP地址。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到

通常这需要一台RARP服务器,在这个服务器上注册设备的MAC地址以及其IP地址,然后再将这个设备接入到网络

该设备会发送一条“我的 MAC 地址是XXXX,请告诉我,我的IP地址应该是什么”的请求信息。

RARP 服务器接到这个消息后返回“MAC地址为 XXXX 的设备,IP地址为 XXXX”的信息给这个设备。

最后,设备就根据从 RARP 服务器所收到的应答信息设置自己的 IP 地址。

DHCP 动态获取 IP 地址

DHCP 在生活中我们是很常见的了,我们的电脑通常都是通过 DHCP 动态获取 IP 地址,大大省去了配 IP 信息繁琐的过程。

接下来,我们来看看我们的电脑是如何通过 4 个步骤的过程,获取到 IP 的。

DHCP 交互的 4 个步骤:

客户端首先发起 DHCP 发现报文(DHCP DISCOVER) 的 IP 数据报,由于客户端没有 IP 地址,也不知道 DHCP 服务器的地址,所以使用的是 UDP 广播通信,其使用的广播目的地址是255.255.255.255(端口 67) 并且使用 0.0.0.0(端口 68) 作为源 IP 地址。

DHCP 客户端将该 IP 数据报传递给链路层,链路层然后将帧广播到所有的网络中设备。DHCP 服务器收到 DHCP 发现报文时,用 DHCP 提供报文(DHCP OFFER) 向客户端做出响应。该报文仍然使用 IP 广播地址 255.255.255.255,该报文信息携带服务器提供可租约的IP 地址、子网掩码、默认网关、DNS 服务器以及 IP 地址租用期。

客户端收到一个或多个服务器的 DHCP 提供报文后,从中选择一个服务器,并向选中的服务器发送 DHCP 请求报文(DHCP REQUEST进行响应,回显配置的参数。

最后,服务端用 DHCP ACK 报文对 DHCP 请求报文进行响应,应答所要求的参数。

一旦客户端收到 DHCP ACK 后,交互便完成了,并且客户端能够在租用期内使用 DHCP 服务器分配的 IP 地址。

如果租约的 DHCP IP 地址快期后,客户端会向服务器发送 DHCP 请求报文:

服务器如果同意继续租用,则用 DHCP ACK 报文进行应答,客户端就会延长租期。

服务器如果不同意继续租用,则用 DHCP NACK 报文,客户端就要停止使用租约的 IP 地址。

可以发现,DHCP 交互中,全程都是使用 UDP 广播通信。

咦,用的是广播,那如果 DHCP 服务器和客户端不是在同一个局域网内,路由器又不会转发广播包,那不是每个网络都要配一个 DHCP 服务器?

所以,为了解决这一问题,就出现了 DHCP 中继代理。

有了 DHCP 中继代理以后,对不同网段的 IP 地址分配也可以由一个 DHCP 服务器统一进行管理。DHCP 客户端会向 DHCP 中继代理发送 DHCP 请求包,而 DHCP 中继代理在收到这个广播包以后,再以单播的形式发给 DHCP 服务器。服务器端收到该包以后再向 DHCP 中继代理返回应答,并由 DHCP 中继代理将此包转发给 DHCP客户端 。

因此,DHCP 服务器即使不在同一个链路上也可以实现统一分配和管理IP地址。

NAT 网络地址转换

IPv4 的地址是非常紧缺的,在前面我们也提到可以通过无分类地址来减缓 IPv4 地址耗尽的速度,但是互联网的用户增速是非常惊人的,所以 IPv4 地址依然有被耗尽的危险。于是,提出了一个种网络地址转换 NAT 的方法,再次缓解了 IPv4 地址耗尽的问题。

简单的来说 NAT 就是在同个公司、家庭、教室内的主机对外部通信时,把私有 IP 地址转换成公有IP 地址。那不是 N 个 私有 IP 地址,你就要 N 个公有 IP 地址?这怎么就缓解了 IPv4 地址耗尽的问题?这不瞎扯吗?

确实是,普通的 NAT 转换没什么意义。由于绝大多数的网络应用都是使用传输层协议 TCP 或 UDP 来传输数据的。因此,可以把 IP 地址 + 端口号一起进行转换。这样,就用一个全球 IP 地址就可以了,这种转换技术就叫网络地址与端口转换 NAPT。
NAPT
假设图中有两个客户端 192.168.1.10 和 192.168.1.11 同时与服务器 183.232.231.172 进行通信,并且这两个客户端的本地端口都是 1025。

此时,两个私有 IP 地址都转换 IP 地址为公有地址 120.229.175.121,但是以不同的端口号作为区分。于是,生成一个 NAPT 路由器的转换表,就可以正确地转换地址跟端口的组合,令客户端 A、B 能同时与服务器之间进行通信。

这种转换表在 NAT 路由器上自动生成。例如,在 TCP 的情况下,建立 TCP 连接首次握手时的SYN 包一经发出,就会生成这个表。而后又随着收到关闭连接时发出 FIN 包的确认应答从表中被删除。

ICMP 互联网控制报文协议

ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议。里面有个关键词 —— 控制,如何控制的呢?

网络包在复杂的网络传输环境里,常常会遇到各种问题。当遇到问题的时候,总不能死个不明不白,没头没脑的作风不是计算机网络的风格。所以需要传出消息,报告遇到了什么问题,这样才可以调整传输策略,以此来控制整个局面。

ICMP 功能都有啥?

ICMP 主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。

在 IP 通信中如果某个 IP 包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP负责通知。主机 A 向主机 B 发送了数据包,由于某种原因,途中的路由器 2 未能发现主机 B 的存在,这时,路由器 2 就会向主机 A 发送一个 ICMP 目标不可达数据包,说明
发往主机 B 的包未能成功。ICMP 的这种通知消息会使用 IP 进行发送 。

因此,从路由器 2 返回的 ICMP 包会按照往常的路由控制先经过路由器 1 再转发给主机 A。收到该 ICMP 包的主机 A 则分解 ICMP 的首部和数据域以后得知具体发生问题的原因。

ICMP 大致可以分为两大类:

一类是用于诊断的查询消息,也就是「查询报文类型」

另一类是通知出错原因的错误消息,也就是「差错报文类型」

你可能感兴趣的:(网络基础,渗透测试,网络,web安全,网络协议,网络安全)