Linux网络编程----网络接口层(数据链路层+物理层)

Posted 蚍蜉撼树谈何易

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux网络编程----网络接口层(数据链路层+物理层)相关的知识,希望对你有一定的参考价值。

目录

以太网协议–局域网中工作

局域网的争用问题

碰撞域:因为以太网同一时刻只允许一个人进行网络通信,所以整个局域网可视为一个碰撞域。
详细看这个

解决局域网的争用问题–交换机


工作原理:
交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过将 MAC地址和端口对应,形成一张MAC表。 在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。 因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域
作用:
1)划分碰撞域,减少碰撞概率
比如AF主机想要通信的话,此时右边四台主机BCDE这个碰撞域中产生了碰撞,是不会影响到A,F的通信的。
2)转发数据帧

以太网帧格式

目标/源MAC地址:从哪里来/到哪里去

类型:标识网络层使用的是什么协议

数据:有效载荷,受MTU的限制

CRC校验:一种校验算法,检验数据链路层的数据帧是否出现错误

跨网络传输

认识MAC地址

MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)

对比理解IP与MAC地址

MAC地址只可以在局域网中使用,而跨网络的话必须使用IP地址,因为跨网络必须经过路由器,经过路由器必须解包与封包,一旦采用解包与封包,则MAC地址是一直改变的。

ARP协议

ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网
络层之间的协议

ARP协议格式


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

ARP协议作用

ARP协议的作用
1.ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.
2.在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;(ARP存在的意义)
3.数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
4.因此在通讯前必须获得目的主机的硬件地址;
是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址,通俗来讲就是获取相邻设备的MAC地址
如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。不过ARP只适用于IPv4,不能用于IPv6

ARP请求与ARP应答

ARP请求


向上交付的过程

ARP 应答


对应上图局域网

查看ARP 和MAC地址对应的映射关系

DNS(域名解析)

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

ICMP–工作在网络层的协议


在ip中,有个八位字段,表明上层是什么协议,除了tcp/ip外,也有可能是ICMP

ping命令有端口号吗?

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

传输过程

以上是关于Linux网络编程----网络接口层(数据链路层+物理层)的主要内容,如果未能解决你的问题,请参考以下文章

11linux网络管理介绍

Linux GoGoGo

linux高性能编程学习笔记

计算机网络:数据链路层的基本概念

Linux 网络基础--网络层+数据链路层

Linux网络基础--网络层与数据链路层