IP包头的协议类型居然="00" ???
这两天调试一个使用TCP通讯的代码, 发现一个奇怪的问题:
软件实现的功能是:连接远程的服务器,连接成功后,发送一个请求给服务器.服务器响应该请求,回送一个应答给本机.
本机上的TCP/IP协议栈是自己写的.
建立连接正常,服务器响应连接请求;
但是...
本机向服务器发送请求数据包后,服务器应答过来的ACK包异常.检查发现IP包头的协议字段内容居然="00"(正常的应该是"06",代表这是个TCP包).因此导致:我的协议栈把该应答包丢弃.
过了一段时间,服务程序把该Socket断开. 服务器发送一个关闭连接的请求给我. 这个IP包的包头的协议字段居然又正常了(="06").
后来,我只好把驱动中,关于协议字段的判断功能屏蔽掉.即使接收到的协议字段类型="00", 我也当做是TCP包. 这样一来,整个Socket通讯就正常了.
为什么Socket通讯过程中,协议字段会出现异常, 我以前从来没有发现过类似的的现象. 谁能给我解释一下.