1. 数据链路层

  处于TCP/IP中物理层, 数据链路层的协议定义了通过通信媒介互连的设备之间的传输规范. 在计算机中数据是由0 1表示的,实际通信时通信媒介处理的时电压的高低、光的闪灭及电波的强弱等信号。把这些信号与0 1进行转换的就是物理层,数据链路层处理的数据也不是单纯的0 1序列,该层该他们集合为一个叫做帧的块,然后进行传输。

2. MAC地址

  一般情况MAC地址全球唯一(虚拟网卡例外),MAC地址用于识别数据链路中互连的结点。长度为48位,6个字节,一般用16进制数字加上冒号的形式来表示。
  MAC地址描述的时路途中每一个区间的起点与重点,而IP地址描述的时路途总体的起点与终点。

数据转发过程
  网络中进行数据传输时,数据从数据链路层出发,会经过路由器转发到外部网络,从路由器发出时源mac地址和目的mac地址会发生改变,并且每经过一个区间mac地址都会发生改变,而上层协议封装的IP地址是不会变化的。

3. 以太网

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

3.1 以太网帧格式

  • 目的MAC地址: 保存相邻设备的mac地址,表示下一次数据到哪去
  • 源MAC地址: 保存消息发出设备的MAC地址
  • 类型: 数据链路层的上层协议是什么,决定交付给上层的什么协议
  • 有效载荷: 46字节-1500字节(MTU),如果上层的数据少于46字节,会进行补0操作,补齐46字节。
  • FCS: 校验数据在传输过程中是否失真。

3.2 转发过程总结

  1.网络层进行选路,数据链路层负责相邻设备的转发。数据链路层根据网络层选择相邻的路由项进行转发。一定需要知道要转发的这个路由所对应的相邻设备的MAC地址,要么是子网内机器的mac地址,要么是连接路由器wan对应的mac地址。
  2.在网络数据转发的过程中,目的IP地址一般不会发生改变(除非NAT),转发设备会针对网络数据进行分用,在网络层获取到目的IP地址,通过目的IP地址和自己的路由表进行匹配,从而选择路由。再封装以太网协议至数据包,这次封装的是下一区间的源MAC地址与目的MAC地址。在不同的网络区间中都会进行分用和封装,直到到达目标主机。
  3.数据链路层组织的以太网协议当中的目的mac地址一定是相邻设备的mac地址。并且是一个区间一个区间转发的,所以源mac地址和目的mac地址在每个转发区间一定是不同的。

注意: 在组织以太网协议时,需要知道相邻设备的MAC地址,当前设备如何知道响铃设备的MAC地址? ARP协议

3.3 交换机

作用: 划分碰撞域,减少碰撞域,转发数据包.
碰撞域: 一个局域网内就是一个碰撞域,网络中同一时刻只能由一条数据发送,当有一条消息发出时就会进行冲突检测,如果出现有多条消息发送就是冲突碰撞,那么就会触发冲突避免,等待消息发送完后再发送其他数据。

4. ARP协议

4.1 作用

  通信时必须要知道对方的mac地址,获取相邻设备的mac地址。
  将IP地址转换为mac地址,会将携带IP地址的数据广播至局域网中,所有主机收到信息后,会确认IP地址是否与自身符合,不符合则直接丢弃,符合的主机将给发送发进行ARP应答。

  主机A为了获得主机B的MAC地址,起初要通过广播发送-一个ARP请求包。这个包中包含了想要了解其MAC地址的主机IP地址。也就是说,ARP请求包中已经包含了主机B的IP地址172. 20. 1.2。由于广播的包可以被同-个链路上所有的主机或路由器接收,因此ARP的请求包也就会被这同–个链路上所有的主机和路由器进行解析。如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个节点就将自已的MAC地址塞人ARP响应包返回给主机A。
  总之,从一个IP地址发送ARP请求包以了解其MAC地址’,目标地址将自己的MAC地址填入其中的ARP响应包返回到IP地址。由此,可以通过ARP从IP地址获得MAC地址,实现链路内的IP通信。

4.2 协议格式

4.3 ARP缓存表

作用

  • 保存IP地址与MAC地址的映射
  • arp缓存表中的记录是有老化时间的,老化时间为20min,一旦失效,会重发arp请求,获取IP地址对应的mac地址。

问题?
1.为什么需要arp缓存表?

  当网络数据从网络层到达数据链路层时,需要填充以太网协议的目的mac地址,则可以通过arp缓存表中的记录项,查找对应的mac地址。如果查找到了,则拿到mac地址,填充以太网协议之后,进行发送。如果没有找到,则使用arp协议,获取目标IP的mac地址。
  如果每发送个IP数据报都要进行一次ARP请求以此确定MAC地址,那将会造成不必要的网络流量,因此,通常的做法是把获取到的MAC地址缓存"一段时间。即把第–次通过ARP获取到的MAC地址作为IP对MAC的映射关系记忆"到一个ARP缓存表中,下一次再向这个IP地址发送数据报时不需再重新发送ARP请求,而是直接使用这个缓存表当中的MAC地址进行数据报的发送。每执行一次ARP,其对应的缓存内容都会被清除。不过在清除之前都可以不需要执行ARP就可以获取想要的MAC地址。这样,在一定程度上也防止了ARP包在网络上被大量广播的可能性。
  一般来说,发送过- -次IP数据报的主机,继续发送多次IP数据报的可能性会比较高。因此,这种缓存能够有效地减少ARP包的发送。反之,接收ARP请求的那个主机又可以从这个ARP请求包获取发送端主机的IP地址及其MAC地址。这时它也可以将这些MAC地址的信息缓存起来,从而根据MAC地址发送ARP响应包给发送端主机。类似地,接收到IP数据报的主机又往往会继续返回IP数据报给发送端主机,以作为响应。因此,在接收主机端缓存MAC地址也是一种提高效率的方法。

2.arp为什么需要老化时间?

  在网络中,IP地址是不固定的,有可能设备切换网络之后,会造成IP地址的变更,那么mac地址就无效了。所以经过一定老化时间后清楚缓存表,重新获取,重新建立映射关系。

IP地址与MAC地址一定要同时需要吗?

  如果发送端与接收端在同一网络中,那么只需要一个就够了,因为对数据在此网络中进行广播就能找到接收端。
  如果发送端与接收端不在同一网络呢,即使知道对方mac地址,那么他们之间发送数据也要经过路由过程才能找到对端。所以发送端必须先将数据发送至路由器,才能继续向外发送,只要经过路由器就一定要知道IP地址负责无法分用,找到目的IP。
  此外,假定MAC地址就用广播地址,那么路由器D也将会收到该广播消息。于是路由器D又将该消息转发给路由器C,导致数据包被重复发送两次"。
  在以太网上发送IP包时,“下次要经由哪个路由器发送数据报”这一信息非常重要。而这里的“下一个路由器”就是相应的MAC地址。
  所以,IP 地址和MAC地址两者缺一不可。 于是就有将这两个地址相关联的ARP协议。
  最后,如果不使用IP地址,而是通过MAC地址连接世界上所有网络中所有的主机和节点的情况。仅仅-一个MAC地址,人们是无法知道这台机器所处的位置的。而且如果全世界的设备都使用MAC地址相连,那么网桥在习得之前就得向全世界发送包。可想而知那将会造成多大的网络流量。而且由于没有任何集约机制,网桥就不得不维护一张巨大的表格来维护所学到的所有MAC地址。一旦这些信息超过网桥所能承受的极限,那将会导致网桥无法正常工作,也就无法实现通信了’。

[Linux] Linux网络之数据链路层详解相关推荐

  1. openstack架构详解图_英特尔顶级技术专家合力缔造精品:Linux开源网络全栈详解...

    日常水开篇 自1991年诞生起,Linux已经走过了接近三十年.Linux早已没有了问世时的稚气,正在各个领域展示自己成熟的魅力. 以Linux为基础,也衍生出了各种开源生态,例如网络和存储.而生态离 ...

  2. 【Linux】24_网络管理数据链路层详解

    目录 数据链路层简介 组建局域网 VLAN详解 TRUNK详解 数据链路层简介 功能:链路创建,维护,管理帧封装,传输,同步差错校验 地址:MAC地址(媒体访问控制地址),结构为12位16进制数字.示 ...

  3. 【Linux】网络基础--应用层详解

    网络基础--应用层 ⏰应用层

  4. linux网络服务详解,Linux网络服务器配置基础详解 (3)

    Linux网络服务器配置基础详解 (3) Linux网络服务器配置基础详解 (3) 第三步:编辑"inetd.conf"文件(vi /etc/inetd.conf),禁止所有不需要 ...

  5. 【Linux服务器开发系列】详解多线程网络编程丨百分百干货分享丨学到就是赚到

    90分钟搞懂多线程网络编程模型 1. 网络编程关注的问题 2. 网络编程的几种模型reactor,one loop per thread及其变种 3. skynet,redis,nginx,memca ...

  6. linux send与recv函数详解

    linux send与recv函数详解 1 #include <sys/socket.h> 2 ssize_t recv(int sockfd, void *buff, size_t nb ...

  7. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html IT168 技术文档]在开始步入Lin ...

  8. ceph存储原理_赠书 | Linux 开源存储全栈详解——从Ceph到容器存储

    // 留言点赞赠书我有书,你有故事么?留言说出你的存储故事留言点赞前两名,免费送此书截止日期12.27号12.30号公布名单 // 内容简介 本书致力于帮助读者形成有关Linux开源存储世界的细致的拓 ...

  9. linux服务器操作系统日志都有哪些,Linux操作系统服务器日志管理详解

    Linux操作系统服务器日志管理详解 Linux操作系统服务器日志管理详解 日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下 ...

最新文章

  1. 高手的习惯:pythonic风格代码
  2. java 教室借用管理系统_教师办事指南 | 借用教室
  3. 程序员数学基础【六、枚举 区块链,虚拟币种、币包约束,内环版本】(Java版本)
  4. HttpWebResponse 的问题
  5. 通过生成器写一个日志调用方法
  6. 牛客题霸 [ 最长公共前缀] C++题解/答案
  7. Spring-Cloud-Netflix-Eureka 服务注册治理
  8. 【并行计算-CUDA开发】关于共享内存(shared memory)和存储体(bank)的事实和疑惑...
  9. java小游戏飞机大战,java飞机大战小游戏
  10. BeanUtils,PropertyUtils
  11. Idea编写简单Java网络爬虫程序(maven)
  12. Linux-chmod
  13. Word里仅修改字母和数字的字体,不改变标点符号字体
  14. php 数字转换英文,PHP将英文数字转换为阿拉伯数字
  15. 搭建室内四轴无人机(一)
  16. 北京:一个大学生每年要花多少钱
  17. ​​氨基羧基化二氧化硅包覆核壳结构上转换纳米粒(808激发,蓝光,980激发,绿光)
  18. 五子棋1.0(Java单机版)
  19. Android开发自定义View实现数字与图片无缝切换的2048
  20. 如何使用计算机自带的刻录软件,windows自带刻录软件,联想自带的刻录软件

热门文章

  1. c语言读取栅格文件代码,【C语言编程学习笔记】利用462字节代码实现雅虎logo ACSII 动画!...
  2. 大数据信息资料采集:中国知网文献资料网站数据信息资料爬取
  3. Python - 爬取豆瓣短评评论
  4. HCIA-RoutingSwitching华为认证路由交换工程师学习笔记 (1) - 数据通信基本原理及IP地址的规划和设计
  5. 2021-08-03-CC2640-OAD升级-NB卡初始化
  6. 我开发了一个下载器 带宽拉满
  7. Excel股票大盘分析工具
  8. 协整检验该如何分析?
  9. 强软弱虚---强引用、软引用、弱引用、虚引用
  10. 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)