这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 提一个关于TCP/IP校验和的问题.

共8条 1/1 1 跳转至

提一个关于TCP/IP校验和的问题.

菜鸟
2003-11-21 17:41:34     打赏
关于TCP首部16位的校验和, 在《tcp/ip详解 卷1》的page173页中有这样一个解释: "检验和覆盖了整个的TCP报文段: TCP首部和TCP数据." 但我发现, 实际上还包括了IP首部, 因为我把IP首部中的IP地址改了, 在接收方用sniffer抓包会提示TCP校验和错误! 看来如果把IP改掉(这在防火墙中经常用到), 就得重新计算TCP首部中的校验和, 这不是很麻烦且降低效率吗? 而且对TCP包的封装也不是很好啊 ----因为数据在TCP(传输层)那一层就已经把校验和算出并填入, 然而到了IP层又要重新计算一次再填入! 不知道我的理解是否正确???



关键词: 一个     关于     校验     问题    

菜鸟
2003-11-21 18:13:00     打赏
2楼
不应该吧?我认为你只需要重新计算ip部分的校验和就行了。 windNet NAT就是这样做的。

菜鸟
2003-11-21 18:30:00     打赏
3楼
回gem2000兄: 我也想不通, 按理的确应该是你那种说法, 但 我们在windows下验证的结果就是这样: 修改了IP地址,并且重新计算了IP的检验和, 同时必须要重新计算TCP中的校验和, 否则用sniffer抓包出来就会发现TCP检验和错. 奇怪!

菜鸟
2003-11-21 18:44:00     打赏
4楼
恰恰有关系,这就是TCP伪头(pseudoheader)的作用。TCP校验和覆盖了TCP头,TCP数据和TCP伪头。TCP伪头包括IP源地址,IP目的地址,协议号(TCP=6)和TCP段长度。 [align=right][color=#000066][此贴子已经被作者于2003-11-21 10:46:41编辑过][/color][/align]

菜鸟
2003-11-21 18:48:00     打赏
5楼
ryansheng兄: 为什么TCP/IP协议要这样作呢? IP和TCP两都互不干涉不是很好吗???

菜鸟
2003-11-21 19:05:00     打赏
6楼
确实很影响层次结构。不过TCP/IP本身就是以实用为先的东西,不象OSI模型那么死板。我猜这么做是为了增强TCP的验错能力,防止由于IP层在转发过程中出错而把错误的数据递送到上层。因为TCP必须提供可靠的传输,而IP是允许出错的。关于影响性能的问题,据说在IPv6里已经不计算IP checksum了,把所有的校验都丢给了TCP,因为确实没必要算两次。

菜鸟
2003-11-21 19:28:00     打赏
7楼
哦, 原来如此. 明白啦! 我就是要作NAT这样的东东. 看来必须这样作了. 非常感谢ryansheng兄, peinpeng兄和gem2000兄的热心回复!

菜鸟
2003-11-21 21:46:00     打赏
8楼
多谢jessesung兄的指点! 我对tcp/ip不精,现在正准备在vxworks下作NAT,以为多指教。谢谢。

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]