tcpip数据帧格式问题请教!

bit_blue_wind 2009-05-07 07:33:16
我想使用DSP加CP2200实现TCPIP协议,但是按照协议利用网络监控工具分析发现客户端发出的SYN数据报不能理解,书上说以太网帧格式为:以太网首部+ip首部+tcp首部+数据,SYN数据报的长度就是14+20+20=54字节,又因以太网数据长度最小为46字节,所以我认为总长度为60字节,但是监控软件显示为74。而ip首部的总长度就为60字节,这样加上以太网首部14字节刚好70字节,请问高手tcp首部后多出来的是什么数据?还有就是怎样计算IP报的总长度?
...全文
232 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
binarydaemon 2009-05-08
  • 打赏
  • 举报
回复
楼主描述不够清晰,有些是错误的描述。

TCP第一次握手(SYN)的数据包中,一般情况下TCP首部带有选项(MSS、 Window Scale、SACK-Permit、Timestamp、NOP等)。
不同的操作系统选项个数可能不同。
比如有些系统只带MSS、Window Scale、NOP选项。
有些系统带MSS、Window Scale、、SACK-Permit、NOP选项。
也有系统带MSS、 Window Scale、SACK-Permit、Timestamp、NOP选项。
所以,TCP第一次握手时的字节数就或多或少了,无法定论。

以太网首部14字节+IP首部(无选项)20字节+TCP首部(无选项)20字节=54字节。
你所描述的是74字节,这里我假设带的TCP选项为:MSS(4字节)、 Window Scale(3字节)、Timestamp(10字节)、NOP(3字节)。
建议楼主把二进制码流贴出来,然后才能正确分解。

关于计算IP报文总长度的问题,IP首部有一个总长度的域,直接从中得知。











yanghehong 2009-05-08
  • 打赏
  • 举报
回复
RFC 793里头有TCP 包的图示:

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


你说的20字节应该没算上后面的Options这些。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

你少算了options. options 可以有8个字节,12个字节这些。不是32位对齐的话补padding。




- 千里孤行

4,358

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧