如何计算IP报头的checksum
如果你研究过TCP/IP协议,那么你肯定知道IP报头中的checksum字段,或许你还曾经为如何计算这个字段的值所困扰,本文我们将讨论checksum的概念,并详细介绍IP报头中的checksum是如何计算的,本文适合初学者阅读。
如果你研究过TCP/IP协议,那么你肯定知道IP报头中的checksum字段,或许你还曾经为如何计算这个字段的值所困扰,本文我们将讨论checksum的概念,并详细介绍IP报头中的checksum是如何计算的,本文适合初学者阅读。
UDP报头只有4个字段,分别是:源端口号、目的端口号、报文长度和报头checksum,其中的报头checksum这个字段在IPv4中并不是强制的,但在IPv6中是强制的,本文介绍UDP报头中checksum的计算方法,并给出相应的源程序,实际上,网络通信中常用的IP报头、TCP报头和UDP报头中都有checksum,其计算方法基本一样,所以把这些检查和一般统称为Internet Checksum;本文对网络编程的初学者难度不大。
众所周知,在传输层有两个常用的协议 TCP 和 UDP,本文介绍在 Linux 命令行下,如何使用 nc 命令发送或接收 UDP 数据包,这些命令的用法对调试 UDP 通信程序将有所帮助,本文适合初学者阅读。
大多数的网络编程都是在应用层接收数据和发送数据的,程序员无需关注报文的各种报头,网络协议栈会解决这些问题,本文介绍在数据链路层的网络编程方法,介绍如何在数据链路层直接接收从物理层发过来的原始数据包,要得到数据,必须自己解开数据链路层、网络层和传输层的报头,文章给出了一个完整的范例程序,希望本文能帮助读者对网络通信有更深刻的理解;阅读本文需要具备基本的使用socket进行网络编程的能力,熟悉OSI的网络模型,本文对初学者有一定的难度。
使用通常获取ipv4的IP地址的方法是无法获取ipv6地址的,本文介绍了使用C语言获取ipv6地址的三种方法:从proc文件从系统获取ipv6地址、使用getifaddrs()函数获取ipv6地址和使用netlink获取ipv6地址,每种方法均给出了完整的源程序,本文所有实例在 ubuntu 20.04 下测试通过,gcc 版本 9.4.0;阅读本文需要有一定的网络编程基础知识和IPv6的知识。