
开发环境: Linux,C语言
我使用套接字(PF_PACKET以太网中mtu默认长度,SOCK_RAW,htons(ETH_P_IP))链接层套接字编写了两个程序,

一种是自己构造类似于UDP的发送程序(构造以太网头,IP头,自己的UDP头).
一种是接受程序并接受来自上述程序的数据.

分别在两台Linux机器上运行.
粗略研究“ UNIX网络编程”和“ TCPIP协议第一卷”后,有几个问题

1. 假设发送的数据没有以太网CRC校验和或校验和错误,内核会自动将我在接收程序中接收到的数据添加4字节的以太网CRC校验和. 内核会判断接收程序中的错误并抛出离开(即使我在链接层)?
2. 在问题旁边,我可以在发送程序中使用一些设置来防止内核向我添加以太网CRC校验和吗?也就是说,发送了没有以太网校验和的数据包.

3. 在发送程序中,我使用sendto()函数. 当我增加发送数据的长度时,它不能超过1500(以太网最大MTU)以太网中mtu默认长度,否则报告错误. “ TCPIP协议卷一”表示以太网的最大MTU为1500,并且MTU由硬件确定. 我能以某种方式增加发送数据的长度而无需分包吗?
4. 继续上一个问题. 假设在接收过程中有一个MTU超过1500的以太网数据包,接收程序可以接收该数据包吗?内核会直接丢弃错误的判断吗? (即使我在链接层)
是否希望在此方面做出很大的答复或提供更详细的信息?
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-222147-1.html
人家根本不在乎你反不反
还是黄岩岛边12海里