跳到主要内容

链路层协议

前言

一、在不断的学习中愈发的感觉学习各种框架是不够的,只会使用框架而不懂背后封装的东西,就像一个流水线工人那样,手握扳手只需拧螺丝就好了,完全没有任何思考。因为不懂原理,自然也对所谓的优化 一窍不通,因此对这些基础向的东西的学习就很有必要了,它们才是构成整个计算机网络体系的基石。

二、之前一直都是用到才急忙翻阅各种资料来补充这些知识,一方面这些知识不一定都是正确的,另一方面网上零散的知识一般很难构成一个完整的知识体系,总是存在只知其一不知其二的情况,因此对于这种偏向底层的知识翻阅书籍完整的走过一套流程会更好

image.png

链路层的作用

链路层主要做三件事 1、为 IP 模块发送和接收 IP 数据报 2、为 ARP 模块发送 ARP 请求和接收 ARP 应答 3、为 RARP 模块发送 RARP 请求和接收 RARP 应答

链路层在各层协议中要直接打交道的就是 IP、ARP 和 RARP 3个协议

可以通过 netstat 命令来查看

netstat 命令用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况

-a 显示所有连接和侦听端口。
-b 显示在创建每个连接或侦听端口时涉及的
可执行文件。在某些情况下,已知可执行文件托管
多个独立的组件,此时会
显示创建连接或侦听端口时
涉及的组件序列。在此情况下,可执行文件的
名称位于底部 [] 中,它调用的组件位于顶部,
直至达到 TCP/IP。注意,此选项
可能很耗时,并且可能因为你没有足够的
权限而失败。
-e 显示以太网统计信息。此选项可以与 -s 选项
结合使用。
-f 显示外部地址的完全限定
域名(FQDN)。
-n 以数字形式显示地址和端口号。
-o 显示拥有的与每个连接关联的进程 ID。
-p proto 显示 proto 指定的协议的连接;proto
可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s
选项一起用来显示每个协议的统计信息,proto 可以是下列任何一个:
IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
-q 显示所有连接、侦听端口和绑定的
非侦听 TCP 端口。绑定的非侦听端口
不一定与活动连接相关联。
-r 显示路由表。
-s 显示每个协议的统计信息。默认情况下,
显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;
-p 选项可用于指定默认的子网。
-t 显示当前连接卸载状态。
-x 显示 NetworkDirect 连接、侦听器和共享
终结点。
-y 显示所有连接的 TCP 连接模板。
无法与其他选项结合使用。
interval 重新显示选定的统计信息,各个显示间暂停的
间隔秒数。按 CTRL+C 停止重新显示
统计信息。如果省略,则 netstat 将打印当前的
配置信息一次。

MTU

什么是 MTU

链路层数据帧的最大长度就是 MTU(注意 MTU 是指帧的负荷部分,不包括帧的头部、尾部及控制用字段),如果 IP 层有一个数据报要传送,而且这个 IP PDU(packet)的长度要比链路层的 MTU 要大,那么 IP 层就需要进行分片,即使得每一片都小于 MTU,这样才能通过链路层来封装传输

# 可以使用下面这个命令查看 MTU,但是只能在 Linux 上用
netstat -i

路径MTU

如果两台主机通信要通过多个网络,那么每个网络的链路层就可能有不同的 MTU。这时重要的并不是两台主机各自所在网络的 MTU,而是连接两台主机中的所有网络中最小 MTU,称为路径 MTU,即两台主机的通信路径上最小的 MTU。这个数值直接影响着在整个通信过程中数据包是否需要分片

注意:路径 MTU 也不一定就是常数,它取决于通信时选择的路由,由于路由的选择不一定是对称的,所以路径 MTU 在通信的两个方向上也不一定是一致的

环回接口

环回接口(loopback interface)是一种特殊的逻辑网络接口,绝大数的网络设备都支持这种形式的逻辑接口,以允许运行在同一台主机上的客户程序和服务器程序通过 TCP/IP 通信。 A 类网络号 127 就是为环回接口预留的,大多数系统把 IP 地址 127.0.0.1 分配给这个接口,并且命名为 localhost

无论什么程序,一旦使用环回地址发送数据,环回驱动程序会立即把数据返回给协议栈中的 IP 输入程序而不进行任何网络传输

回环口

参考资料

参考资料 TCP/IP 协议分析教程与实验 参考资料 计算机网络教程-第四版 华为官网提供的-协议地图-可以点进去看每个协议的报文结构