头部背景图片
Alisa |
Alisa |

一些有关网络的微小的知识

有一天py出了一期任务,旨在让我们了解一下网络相关的知识

鉴于我的网络一张白纸,了解的比较艰难,然后真真的只了解了一点微小的知识,于是网络依旧是一张白纸

代码丢在了github上,不建议观看充满bug的代码

记录一下自己学到的微小的知识,顺便复习。如果不正确…那大概就是我太菜了,欢迎指正

网络模型

  • OSI七层网络模型

OSI网络模型

应用层:针对特定应用的协议,比如电子邮件,远程登录,文件传输(如FTP)

表示层:将固有数据格式转换为网络标准格式。使数据能够被应用层/会话层处理。因为不同设备对比特流的解释可能不同,该层处理让他们保持一致。

会话层:会话层决定发送数据的方式(具体还没有看到qaq),决定建立连接和断开连接的时机

传输层: 进行实际的建立连接和断开连接的操作,保证数据传输的可靠性

网络层: 将数据从A主机发送到B主机(没怎么看懂

数据链路层and物理层:向目标物理地址发送信号

  • TCP/IP协议分层

TCP/IP协议分层模型

  • 传输层:
    主要是TCP和UDP两种协议,TCP的三次握手四次分手并没有学习,UDP也没有学习qaq

  • 应用层: 将OSI模型中的应用层,表示层,会话层合并…然后有一堆协议

自顶向下传输的时候,每一层都会加上自己的报头,自底向上每层都会解析一下报头

  • Q&A(from 汪学长

Q: 为什么要分这么多层阿

A: 为了每层协议更好写

Q: 为什么不用OSI而用TCP/IP多一点阿

A: OSI分的太多了,太麻烦了

ARP

  • ARP

ARP即地址解析协议,通过解析网络层来寻找数据链路层地址的协议。以我目前的理解是通过IP地址解析MAC地址。

当两台主机A和B通信的时候,假如你是A,你只能拥有自己的IP地址和MAC地址,以及对方的IP地址,如果希望知道对方的MAC地址就要用到ARP。

  • ARP包结构

ARP包结构

  • 以太网目标地址:广播地址ff:ff:ff:ff:ff:ff
  • 以太网源地址:本机的MAC地址
  • 帧类型:以太类型,ARP为0x0806

  • 硬件类型:如以太网(0x0001)、分组无线网。

  • 协议类型:如IP网际协议(0x0800)、IPv6(0x86DD)。
  • 硬件地址长度:每种硬件地址的字节长度,一般为6(以太网)。
  • 协议地址长度:每种协议地址的字节长度,一般为4(IPv4)。
  • op:1为ARP请求,2为ARP回显,3为RARP请求,4为RARP应答。

发送ARP包时,目标主机MAC地址不填,目标主机收到之后会填好发送回来

另外,假设有两台主机A,B。A向B发送了一个ARP包,B会暂时记录A的MAC地址,同时发送应答包,此时A也会记录B的MAC地址,以此来减少查询次数提高效率,但是也有问题qaq…比如会有中间人攻击

DNS

DNS,域名系统。

域名和IP是多对多的关系

(太懒了不想丢上包结构了)

Lab1 存活主机嗅探

实现思路: 向广播地址发包,然后接收发回来的包并解析

由于要实现多线程,采用的非阻塞,然后…如果没有及时给我回应,就GG啦

Lab02 ARP毒化

实现思路: 中间人攻击,利用了会暂时储存的MAC地址

向攻击目标主机(B)发送一个应答包,B就会解析并将MAC地址存下来。所以此时你(主机C)就可以冒充网关向B发包,将本机IP改成网关IP,本机MAC地址使用自己的MAC地址发给主机B。

向网关发送应答包,构造方法类似。

此时C就可以收到网关和B的通信了。

然后C可以实现手动转发(并没有写)或者对收到的数据做一些奇奇怪怪的事情:>

Lab03 DNS解析

DNS解析的过程简单来说就是先查有没有缓存,没存就从根开始递归查询

DNS解析通过UDP,端口号是53

丢给DNS服务器一个查询包,然后接受包解析就好了…

(太懒惰不想写了…先到此为之)

…网络是个大坑…大概还会更新吧