因为工作需要使用raw socket来转发指定数据流的数据,但是在使用的过程中,发现TCP链接存在数据乱的问题,后面使用tcpdump和数据比对详细分析了下,故而博文记录,备忘。
raw socket收取TCP特定业务端口的数据,然后转发给其他多个客户端,最后在测试的时候,发现raw socket收到的数据和对应业务端口应用层程序收到的数据不一致。
经过tcpdump和数据比对,发现是TCP的重发机制以及包乱序导致的问题。TCP重发机制会导致raw socket收到多余的数据,包乱序会导致数据位置错乱,故而要想实现这种数据转发,要么解决TCP重发以及包乱序问题,要么使用应用层数据转发。