『壹』 linux udp 如何发数据包 我要发送一个5M左右的数据,如何实现分片发送 或者分包发送
这个- - 肯定得自定义私有报文头,然后组装了。
感觉楼主好像还是新手,很难简单讲清楚啊回。
我们说答说比如某个下载软件的udp私有协议,里面还设计了udp层的3次握手,丢包请求等等。
如果你不考虑丢包,不考虑身份验证,假设全部能收到,那么肯定也得设计一个顺序字段。
报文头(标志、序号)
把数据分割更1024字节的小段,每个小段都带着报文头出去,
接收端收到后,根据报文头的序号,剔除掉报文头,把后面每个小段的内容重新组合成5m的时间数据。
不知道你听明白了没有- - 如果有编程基础,实际编程中,不用讲自己就明白了,如果没有基础,的确挺难说明白的
『贰』 Linux内核网络协议栈之IP层转发框架
网络层处理框架(三层)
网络层处理框架在Linux内核中分为三层,分别是PRE_ROUTING、IP_FORWARD和POST_ROUTING。
在PRE_ROUTING阶段,IP层的入口函数ip_rcv()扮演关键角色,负责接收报文并进行初步处理。
接收到报文后,会调用ip_rcv_finish()函数进一步处理,包括报文路由查询、状态检查等。
在本地输入阶段,核心处理函数包括ip_local_deliver(),负责报文的本地交付。IP层处理还涉及到分片重组,由ip_defrag()函数执行。
在IP_FORWARD阶段,ip_forward()函数负责报文转发的决策与处理。特别提到的xfrm4_route_forward函数用于匹配IPsec策略。
完成转发后,ip_forward_finish()函数进行后续处理,确保报文能够正确到达下一跳。
本地输出阶段包含ip_queue_xmit()等关键函数,实现报文的排队与发送。dst_output()与ip_output()分别负责输出决策与最终输出。
对于超过最大传输单元(MTU)的报文,Linux内核通过ip_fragment()进行分片处理。分片报文仅由接收端负责重组,中间设备无法重组,原因是重组过程并非必需,且中间设备可能无法收到完整分片。
最后,POST_ROUTING阶段的ip_finish_output和ip_finish_output2函数处理IP层的最终输出,特别涉及到ARP协议的执行。