• 详解MAC帧、ARP、DNS、ICMP协议


    局域网通信原理

    比如新建了一个内网,如果一台机器A找机器B,封FRAME时(OSI的第二层用的数据格式),要封装对方的MAC,开始时A不知道B的MAC,只知道IP,它就发一个ARP包,源IP是自己的,目的IP是B的,源MAC是自己的,目的MAC是广播的。然后这个请求包在内网内被广播,当其他机器接到这个包时,用目的IP和自己的IP比较,不是的话就丢弃。B接到时,发现IP与自己的一样,就答应这个包的请求,把自己的MAC送给A。如果B是其他子网的机器,那么路由器会判断出B是其他子网,然后路由器把自己的MAC返回给A,A以后再给B发包时,目的MAC封装的是路由器的。

    局域网中任意时刻只能有一个主机发送消息,如果有多个消息被同时发送,会导致局域网的数据发生碰撞,发送无效,所以就有了以太网、令牌环网标准

    令牌环网:局域网中持有令牌的人才可以放松消息

    以太网:检测到发生碰撞,数据链路层协议就触发策略,暂时先不发送数据,等待一段时间,然后继续检测,这种策略称为:碰撞检测和碰撞避免算法

    认识以太网

    • “以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
    • 例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;
    • 以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;

    局域网通信的协议通常使用以太网协议

    局域网不能太大,因为碰撞基数太大,发送碰撞的概率就增加了,那如果局域网就是很大该怎么办?我们可以使用交换机,

    交换机:可以识别局部性碰撞,对碰撞数据不进行转发,划分碰撞域

    以太网帧格式

    在这里插入图片描述

    目的地址和源地址是指网卡的硬件地址,也叫MAC地址,长度是48位,是在网卡出厂时固定的;
    帧协议类型字段有三种值,分别对应IP、ARP、RARP;
    帧末尾是CRC校验码

    1.如何分离

    由于以太网帧的首部与末尾的字段都是定长的,可以直接拿到以太网帧中的数据。

    2.如何分用

    根据报头中 类型 字段,将有效载荷交付给上层对应的协议。

    在局域网当中,在任何时刻,只能有一个主机发送消息,如果多个消息被同时发送,会导致局域网中的数据发生碰撞,我们把一个局域网称为一个碰撞域

    3.因为有碰撞域,一台主机发送数据的时候,是长了好还是短了好?

    仔细看上图,规定为46-1500字节(MTU),如果小于46字节时,他会进行填充

    MTU

    MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.

    以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
    最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
    如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
    不同的数据链路层标准的MTU是不同的;

    1.分片是只会在发送端分片吗?

    并不是,在途中的路由器也可能会分片,不同的数据链路层标准的MTU是不同的

    分片既然是不好的行为,那么我们该如何尽力避免分片呢?不知道大家还记不记得TCP的滑动窗口,滑动窗口为什么不一下把一大串数据全部发出去,而是分成很多段在发送出去,原因就在这里,一个数据包的最大长度称为MSS

    MTU对于TCP/UDP协议的影响

    UDP协议:

    一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报.
    这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在网络层被分片, 整个数据被丢失的概率就大大增加了.

    TCP协议:

    TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的最大消息长度, 称为MSS(MaxSegment Size);
    TCP在建立连接的过程中, 通信双方会进行MSS协商.
    最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU).
    双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值.
    然后双方得知对方的MSS值之后, 选择较小的作为最终MSS.
    MSS的值就是在TCP首部的40字节变长选项中(kind=2)

    ARP协议

    虽然我们在这里介绍ARP协议, 但是需要强调, ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议;

    ARP协议的作用

    ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.

    • 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址
    • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
    • 因此在通讯前必须获得目的主机的硬件地址;

    ARP数据报格式

    在这里插入图片描述

    • 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
    • 帧类型是0806(ARP协议下)
    • 硬件类型指链路层网络类型,1为以太网;
    • 协议类型指要转换的地址类型,0x0800为IP地址;
    • 硬件地址长度对于以太网地址为6字节;
    • 协议地址长度对于和IP地址为4字节;
    • op字段为1表示ARP请求,op字段为2表示ARP应答。

    下面这张图,展现了为什么说ARP协议是工作在网络层和数据链路层之间的协议

    在这里插入图片描述

    如果帧类型是IP类型则会直接向上分用,但如果是ARP请求,则不会继续向上了

    ARP欺诈

    在这里插入图片描述

    这样的话很容易被中间人窃取,但是有了CA证书等,中间人拿到了以后也无法解密

    DNS

    DNS:域名解析系统

    DNS是一整套从域名映射到IP的系统,TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆.于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系

    DNS使用的是UDP协议

    递归查询和迭代查询

    这个视频讲解的很好https://www.bilibili.com/video/BV1JZ4y1f7tU/?spm_id_from=333.337.search-card.all.click&vd_source=21f3027af56b85726fe87ebf679e81d1

    ICMP协议

    ICMP协议是一个 网络层协议
    一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因

    ICMP功能

    ICMP正是提供这种功能的协议; ICMP主要功能包括:

    确认IP包是否成功到达目标地址.
    通知在发送过程中IP包被丢弃的原因.
    ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
    ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6;

    在这里插入图片描述

    ICMP报文格式

    在这里插入图片描述

    ICMP大概分为两类报文:

    一类是通知出错原因
    一类是用于诊断查询

    1.有些面试官可能会问: telnet是23端口, ssh是22端口, 那么ping是什么端口?

    ping命令基于ICMP, 是在网络层. 而端口号, 是传输层的内容. 在ICMP中根本就不关注端口号这样的信息.

  • 相关阅读:
    二叉树的重要概念
    记LGSVL Map Annotation(1) LGSVL本地编译记录、安装
    深度学习遇到报错Bug解决方法(不定时更新)
    PAM从入门到精通(六)
    论文解读(ValidUtil)《Rethinking the Setting of Semi-supervised Learning on Graphs》
    Nacos注册中心
    前端利用原生canvas生成图片
    设计模式面试八股文
    N位质数c++
    【torch】torch.nn.functional 中的unfold和fold直观理解
  • 原文地址:https://blog.csdn.net/qq_20963687/article/details/132613398