IP“首部检验和”的用途和用法

谁学逆向工程 2013-02-05 11:59:30
下面一写文字来自《TCP/IP详解》卷一的26和27页,实在没看明白IP“首部检验和”的用途和用法:

首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。ICPMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据数据检验和码。
为了计算一份数据报的IP检验和,首先把检验和字段置为0.然后对首部中的每个16bit进行二进制反码求和(整个首部看成是一串16bit的字组成),结果存在检验和字段中。当收到一份IP数据报后,同样对首部中每个16bit进行二进制反码求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该全为1。如果记过不是全1(即检验和错误),那么IP就丢弃收到的数据包。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。
ICMP、IGMP、UDP和TCP都采用相同的检验和算法,尽管TCP和UDP除了本身的首部和数据外,在IP首部中还包含不同的字段。在RFC1071中有关于如何计算Internet检验和的实现技术。由于路由器经常只修改TTL字段(减1),因此当路由器转发一份报文时可以增加他的检验和,而不需要对IP整个首部进行重新计算。RFC1141为此给出了一个很有效的方法。

问:
1、那个TCP UDP ICMP IGMP 怎么又覆盖了,覆盖谁了?覆盖IP了?不能啊!!
2、上面那里又是反码又是求和的想干啥,到底谁求反码谁求和,怎么样才是正确的。
3、下面那个因此,那是在因什么此。那个TTL减1我到是明白,但是增加检验和是做什么,上面又是反码又是求和的,这里怎么给增加了? 检验和到底是啥啊?
...全文
1221 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcorange 2013-02-06
  • 打赏
  • 举报
回复
校检和 ip ip报文仅检查ip报文头自己 tcp udp 需要一个 伪头 + tcp / udp 头 + 数据载荷 icmp icmp头 + 数据载荷
q84998875 2013-02-05
  • 打赏
  • 举报
回复
1.IP的首部检验和字段只拿首部出来计算就可以了,ICPMP、IGMP、UDP和TCP则需要首部和数据一起计算 2.把首部分为多块,每一块16bit,对每一块进行反码,最后再把所有反码加在一起 3.原码的减就相当于反码的加,由于检验和是字段反码相加得来的,TTL减1,为了保证检验和还能够正确的表示这个包在传输过程中没有出错,所以检验和就要相对应的增加
ShengFei01 2013-02-05
  • 打赏
  • 举报
回复
1. IP校验和只校验IP首部,不包含数据。TCP UDP ICMP IGMP才校验数据部分。 2. 先反码,再求和。 3. IP首部任何字段有变化,都要重新计算校验和。通常路由器只会改变TTL,所以只计算TTL改变后的校验和即可。 你看一下《WinSock网络编程经络》那本书,讲的比较清楚,还有校验和的例子: http://download.csdn.net/detail/geoff08zhang/4571358

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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