• Linux网络基础-5


    在上一篇博客中我们对网络层的典型协议--IP进行了介绍,那么本篇博客作为网络方面的最后一片博客,我们对网络中最后内容--链路层协议进行讲解。

    目录

    1.链路层协议

    1.1MAC地址

    1.1.1类型

    1.1.2作用

    1.2以太网协议

    1.2.1协议格式

    1.2.2ARP协议

    1.2.3获取指定硬件地址

    1.2.4MTU

    1.链路层协议

    链路层是负责相邻设备之间的数据传输,在网络层中的IP地址描述的是数据从一台主机到另一台主机,是数据收发的起点和终点。但是在数据传输过程中并不是由起点直接传达到终点,这中间过程中需要经历层层转发才可以,链路层便是为这一部分内容服务的。

    1.1MAC地址

    MAC地址是网卡的物理硬件地址,是网卡出山时所设定的固定地址。它是为上述转发过程中所经过的中间设备进行标识,通过MAC地址,我们可以很好的清楚数据传输过程所经过的中间转发设备。

    1.1.1类型

    MAC地址的数据类型是:uint8_t mac[6],是一个无符号的48位数字。

    1.1.2作用

    MAC地址的作用也正是设计它的初衷,即作为相邻设备之间的标识。

    1.2以太网协议

    1.2.1协议格式

    其中,6字节对端&6字节源端MAC地址:用于描述通信相邻的两个硬件设备;2字节协议类型:所封装的报文data所使用的协议类型;4字节位校验和:进行差错校验。

    1.2.2ARP协议

    ARP协议是介于链路层和网络层之间的协议,既包含了MAC地址也包含了IP地址。

    笔者引用《TCP-IP详解》一书中的结构说明,在上图中进行展示。

    其中,2字节硬件类型:描述链路层网络协议--以太网;2字节协议类型:要进行地址转换的地址类型;1字节硬件地址长度:存储硬件地址长度;1字节协议地址长度:存储转换使用的协议地址长度; 2字节op:1--标识ARP请求,2--标识ARP应答。

    6字节源端MAC地址,4字节源端IP地址,6字节对端MAC地址,4字节对端IP地址。

    1.2.3获取指定硬件地址

    1. 当前主机封装一个ARP请求,在请求中填充源端MAC地址和IP地址,并将以太网帧中头中的目标MAC地址填充为:0XFFFFFFFFFFFF -- 广播地址;
    2. 将ARP请求广播给所有相邻设备;
    3. 收到ARP请求的主机,对数据帧进行解析,如果目标IP地址匹配则填充自己的MAC地址和IP地址进行相应,如果不匹配则直接丢弃;
    4. 当前主机收到相应之后,便知道了指定设备的MAC地址;
    5. 当前主机将MAC-IP映射关系缓存起来,并保存一段时间(非永久)。

    了解完如何过去指定硬件地址的操作内容之后,我们可以来简单讲解一种网络攻击--ARP欺骗攻击,也叫做局域网攻击。

    它的攻击方式便是:恶意主机伪造IP地址不断的给网关设备发送ARP响应,告知网关自己是子网中的某个主机;与此同时,该恶意主机还会给子网中的其他主机不断发送ARP响应,告知其他主机自己是网关设备。

    于是这两种角色的设备会被不断得到的ARP响应覆盖掉自己原有的ARP映射表,普通主机认为恶意主机是网关设备,将数据发送给恶意主机;网关设备认为恶意主机是指定设备,将响应发送给恶意主机。这样,该恶意主机便达成了网络攻击的目的--窃取数据。

    1.2.4MTU

    以太网中的链路层对数据帧长度存在一个限制,其最大值的默认值是1500字节,链路层将这个特性称作MTU,即最大传输单元。

    顺便罗列出几种常见的最大传输单元(MTU):

    接下来我们来看一看MTU的存在对传输层协议的影响:

    对于TCP协议,我们在三次握手建立连接阶段便会协商MSS(根据MTU计算得到的传输最大数据),然后在后续的数据传输过程中,每次从缓冲区中取出合适大小的数据进行头部封装后传输。TCP在传输层会自动将数据进行分段,因此不会在网络层出现数据分片。

    对于UDP协议,并不存在协商MSS(无连接),只要传输的数据大小最大小于64k-8就可以传输,但是有可能会因为网络层传输中,因为数据大小大于MTU而导致数据分片。但是,数据分片之后的重组是有可能失败的(分片越多,越容易失败),重组失败便会导致数据重传,传输效率低下。因此,我们在使用UDP进行数据传输过程中,可以在应用层的程序中设计MSS,即在传输时便将数据分割完成,尽量减少数据在网络层的分片。

  • 相关阅读:
    2※、处理流(包装流派)、缓冲流【字节缓冲流、字符缓冲流】-->【字节缓冲流、字符缓冲流】 、字符集、转换流以及打印流
    AXI三种接口及DMA DDR XDMA介绍(应用于vivado中的ip调用)
    Leetcode每日一题:打家劫舍系列Ⅰ、Ⅱ、Ⅲ、Ⅳ(2023.9.16~2023.9.19 C++)
    Linux驱动开发(二)---驱动与设备的分离设计
    Java 两个线程实现生产者和消费者的问题
    前端工程化面试题及答案【集合】
    插入排序(直接插入排序)算法
    Redis分布式锁——秒杀超卖
    协同创新、奔赴未来——“华为云杯”2023人工智能创新应用大赛华丽谢幕
    pdf处理工具 Enfocus PitStop Pro 2022 中文 for mac
  • 原文地址:https://blog.csdn.net/m0_56821563/article/details/130855388