登录
首页 >  文章 >  linux

Linux网络编程:解析MTU、校验和、网段与路由

时间:2025-04-23 11:36:27 194浏览 收藏

在Linux网络编程中,理解MTU、校验和、网段与路由表至关重要。MTU(最大传输单元)通常为1500字节,超过此限制的数据需在网络层分包处理,否则会被丢弃。CRC校验和通过多项式除法确保数据完整性,而IP和TCP的16位校验和进一步验证数据准确性。全球网段通过家庭路由器进入运营商局域网,最终到达公网。由于IPv4地址不足,局域网和NAT技术应运而生,IPv6和动态分配也是解决方案。子网掩码通过与IP地址按位与运算区分网络号和主机号。路由器的WAN和LAN有不同的IP,路由表中的destination、gateway、genmask和flags决定数据包的转发路径。

  1. MTU

MTU是指以太网的最大传输单元,通常为1500字节。这表示从网络层传输的数据最大只能是1500字节。

如果数据超过这个限制,网络层必须自行分包,因为数据链路层不会帮助分包。超过1500字节的数据将被数据链路层直接丢弃。

在某些IP报头中,如果第二位标志位被置1,表示不允许分片。此时如果数据超过1500字节,将直接被丢弃,并向发送方返回“数据包过大”的错误信息。

  1. CRC校验和3位标志

CRC校验和3位标志使用多项式除法算法,填入的值是经过一系列除法后的余数。

这种方法提供了一定的数据完整性保障。

在数据向更高层传输时,网络层也会进行检查,例如IP和TCP的16位校验和。这些都是对数据准确性的一系列检查。

IP的16位首部校验和用于检查IP报头是否发生错误,而数据中的TCP进一步进行检查。


  1. 全球网段与家庭路由

全球网段经过家庭路由器后,并不直接进入广域网,而是到达运营商设置的更高层局域网。经过多层网络后,最终到达公网。

【Linux网络编程】数据链路层和网络层的几个问题:MTU,校验和,全球网段,路由表

标准的IPv4地址总数约为43亿,而世界人口约为80亿。虽然不是每个人都拥有手机或电脑,但一个人可能拥有多台设备,且还有许多商业用途,这显然是不够的。因此,局域网应运而生。运营商构建了大型局域网,在不同的局域网中,IP地址可以重复使用,这有助于缓解IP地址不足的问题(NAT技术)。

每次数据包跳转时,NAT会帮助我们转换IP地址,这是从局域网到公网的转换手段。

上图显示,中国分配的IP地址只有3亿,显然不够用。上述方法是缓解IP不足的一种方案。另外,IPv6和动态分配也是解决方案。


  1. 子网掩码

IP地址由网络号和主机号组成。

在实际应用中,通过IP地址与子网掩码进行按位与运算(&),可以得到网络号。

例如,IP地址为140.252.20.68,子网掩码为255.255.255.0(表示前三个字节为网络号),记为/24。

计算后,网络号为140.252.20。

主机号全为1时,表示广播地址。


  1. 路由

对于一个路由器,会有WAN(广域网IP)和LAN(局域网IP),它们是两个不同的IP。WAN可能不是公网IP,而是更高层局域网的IP。

【Linux网络编程】数据链路层和网络层的几个问题:MTU,校验和,全球网段,路由表

其中,destination表示目的地址,gateway表示下一跳,genmask表示子网掩码。

在flags中,如果有G,表示目标IP与该路由器直接连接,不需要进行路由转发;没有G,表示需要经过路由转发。

iface表示发送接口,即数据包从哪个接口发出。

好了,本文到此结束,带大家了解了《Linux网络编程:解析MTU、校验和、网段与路由》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多文章知识!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>