小弟目前正在寻求工作机会,有合适的麻烦联系一下我,感谢,工作地点:南京优先,其次可以是杭州、江苏全地区、上海、合肥

联系方式邮件:moujunmore@qq.com ,或者通过QQ群联系我:778637668

Skip to content

网络前置知识

在学习防火墙之前,我们需要具备一定的网络基础知识,一般新入门的系统管理员可能不够了解,所以为了后面的内容更好的理解,在此处重新讲解一下数据包在网络中是怎么传输的,有此知识储备的请跳过本章节

完整的网络知识,强烈推荐B站UP主 湖科大教书匠视频,我本人也是通过他的视频进行基础知识的学习

1. OSI 七层模型 和 TCP/IP 四层模型

OSI七层模型是理论模型,一般用于理论研究,他的分层有些冗余,实际应用,选择 TCP/IP 的四层 模型 。 而且 OSI 自身也有缺陷,大多数人都认为 OSI 模型的层次数量与内容可能是最佳的选择,其实 并非如此, 其中会话层和表示层几乎是空的 ,而数据链路层和网络层包含内容太多,有很多的子层插入每个子层都有不同的功能。

而我们本次目的主要就是学习 TCP/IP 中的网络层

七层模型中各个层的功能:

分层名称功能
应用层为应用程序提供服务
表示层设备固有数据格式和网络格式的转化
会话层通信管理,负责建立和断开会话
传输层管理端对端的数据传输连接
网络层地址管理和路由选择
数据链路层链路管理和识别数据帧
物理层物理设备传输比特流

从图中我们可以看出,在事实标准的TCP/IP 四层模型中,由于会话层和表示层几乎是空的 ,应用层对应了一个合并的OSI的5-7层,,其他的层级基本是保持不变

提示

在实际的问题排错中,我们按照TCP/IP模型进行排错即可

2. 数据包在网络中的传输过程

要说明的是,首先我们需要有一个基本的概念,就是你需要知道电脑上有 mac地址、IP地址、子网掩码、网关、路由 这几个概念,本章不涉及更深的内容,仅说明一个数据包如何通过这几个东西进行传播

2.1 从系统内看数据包是如何产生的

注意,我们后面接触的所有知识,都是基于 TCP/IP 模型 的,OSI模型只作为理论标准, TCP/IP 模型 是事实标准,两者区别还是比较大的

1. 应用层发送一个消息,比如: 你好 这两个字,应用本身会对这个数据做一些处理,比如加密格式化等处理完成后根据要发送的协议进行打包,转交下一层进行处理

2. 传输层提供两个协议: TCPUDP 协议,接受消息后,根据用户指定的不同的协议族来进行不同的传输,并在首部将这些信息进行打包添加

3. 网络层在首部添加IP信息

4. 链路层首部添加包含mac地址信息,尾部包围住

5. 物理层发送0101 的字节码



2.2 数据在网络中是如何传输的

看完数据在系统内部是如何产生的以后,我们再来看看数据包再网络中是如何传输的

对着上图我们进行如下说明

如果无mac地址缓存,发送arp报获取mac地址填充并发送这个过程不在里面重复赘述了

数据传输过程

  1. 数据在填充mac目的地址时,会对本地ip以及掩码计算所在的网段,对目的IP进行判断,是否跟本地IP一个地址段
  2. 是一个地址段 目的mac直接写目标地址的mac
  3. 不在一个地址段,填充mac地址是会填写网关的mac地址
  4. 网关收到数据进行IP地址判断,根据路由表判断从哪个网卡发出以及下跳的mac地址,并将数据包的源mac地址改成网关自己的mac地址
  5. 经历多个网关原理一致
  6. 到达目的地址所在的路由器,判断出接口在一个段,所以mac地址直接写目的mac,源mac地址依然修改成发出的网卡的
  7. 数据回包流程相反

由此,我们可以已经具备了网络中的 mac、ip、掩码、网关、路由的概念以及基本作用,还有更多的功能此处暂时不再详细赘述

3. tcp连接

Sequence Number(seq)32bit,表示tcp包的序列号,根据seq来确认是否有数据包丢失。

Acknowledgment Number(ack)32bit,表示tcp包的确认号。表示已经收到对方多少数据。

对于seq来说,可以理解为,我已经发出了多少数据;

对于ack来说,可以理解为,我已经接收了多少数据。

这是在此次发包的时候,对当前状态的总结不包括本次发送的包,因为此次发送的动作并没有完成

发出带有SYNFIN标志的报文,seq需要+1;只带有ACK标志的报文,seq不需要+1。

Flags值说明:

  • FIN: "finished"简写。表示发送者以及发送完数据。通常用在发送者发送完数据的最后一个包中。
  • SYN: "Synchronisation"简写。表示三次握手建立连接的第一步,在建立连接时发送者发送的第一个包中设置flag值为SYN。
  • RST: "reset"简写。重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者发送包发送到一个不是期望的目的主机时,接收端发送reset 重置连接标志的包。
  • PSH: "push"简写。通知接收端处理接收的报文,而不是将报文缓存到buffer中。
  • ACK: "Acknowledgment"简写。表示包已经被成功接收。
  • URG: "urgent"简写。通知接收端处理在处理其他包前优先处理接收到的紧急报文(urgent packets)。详见RFC6093。
  • ECE: "ECN-Echo"简写。ECN表示Explicit Congestion Notification。表示TCP peer有ECN能力。详见RFC3168。【新tcp新增】
  • CWR: "Congestion Window Reduced"简写。发送者在接收到一个带有ECE flag包时,将会使用CWR flag。 详见RFC3168。【新tcp新增】
  • NS: "nonce sum"简写。该标签用来保护不受发送者发送的突发的恶意隐藏报文的侵害。详见 RFC 3540。【新tcp新增】

3.1 三次握手

3.2 四次挥手

3.3 抓包分析

如果觉得本文有帮助,可以请作者喝杯咖啡~

上次更新: