TCP包里,关于IP头和TCP头的校验和字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP包里,关于IP头和TCP头的校验和字段相关的知识,希望对你有一定的参考价值。

在TCP包里,有IP头和TCP头,为什么两个头里均有校验和字段?他们有什么不同?是算法不同吗?把这两个校验和合并成一个校验和可以吗?这样会有什么影响?为什么?

在TCP/IP的分层模型中,不同层的校验和功能不同,这点和每层对应的功能类似。比如:IP层是用来标示并区别当前网络的所有网元(比如路由器,电脑,服务器等),TCP用来表示对应某个网元上的上层应用。

那么校验和就有必要分开考虑,对于一些应用协议和程序来讲(比如FTP,HTTP等)依照IP的校验和是无法判定当前数据传送的对错的。因为一方面IP层的校验和会在转发过程中发生变化,不同的网元在处理IP包时的出错重传,以及到达目的网元时的上传处理丢弃IP报文头,等等操作,都会造成IP报文头的校验和不具任何参考意义。

希望我提供的理解能够帮到你。
参考技术A 另外,还要补充一点的是

TCP是面向连接的协议,要保证可靠交付,但TCP不相信底层的协议,所以它要使用自己的校验

IP协议是无连接的协议,只保证尽力交付,计算校验和是为了防止路由信息错误

TCP/IP-ICMP协议

8.1 作用

ip协议没有提供直接的方法发现那些发往目的地失败的ip数据包。因此采用internet控制报文协议提供ip协议层配置和ip数据报存执相关的诊断和控制信息。一般认为是ip层的一部分。但是使用ip层进行传输,因此是一个介于网络层和传输层之间的协议。

8.1 报文格式

icmp使用网络层传出,协议字段为1,表示报文类型为icmpv4.

  1. 8位 类型

  2. 8位 代码

  3. 16位 校验和

  4. 依赖于类型和代码的内容

    可变

校验和涵盖一个为头部,是一个端到端的,每一跳都不会改变。

8.2 查询报文

目前仅仅是ping在用了。

格式为

技术分享图片

数据中包含了本地时间的一份拷贝,因此可以估算RTT

8.3 差错报文

类型代码描述 
0 查询报文 回显应答 回显ping,返回数据  
8 查询报文 回显请求 ping  
3 目的地不可达 0 网络不可达  
  1 主机不可达 出现在直接交付时,对端主机没找到,比如arp失败
  2 协议不可达  
  3 端口不可达 找到了主机,但是对应端口没有被监听
  4 需要分片,但是设置了部分偏 MTU包含在生成的差错报文中
  5 源路由失败,中间跳不可达  
5 重定向 0 网络或子网重定向数据报 路由器收到了一个数据包对应的下一跳并不是自身的包。发送给主机重定向报文,包含下一跳ip地址,并且将报文正确投递
  1 主机重定向  
  2 服务类型和网络重定向  
  3 服务类型和主机重定向  
9 0 正常路由通告  
11 0 ttl超时  
  1 分片重组超时  
12 0 指针只是差错,字节偏移量指针指示的第一个问题字段  
  2 错误的总长度字段  

 

8.4 生成条件

一下情况不产生icmp差错报文

  1. icmp差错差错报文

  2. 目的地为广播或是组播地址的数据报

  3. 链路层广播的数据报

  4. 不是第一片的分片

  5. 源地址不是单个主机地址。也就是说不是0地址,环回地址,广播组播地址

主要是为了限制生成广播风暴。

8.5 相关攻击

icmp相关的攻击主要分为3类,泛洪、炸弹、信息泄露。

  1. 泛洪

    产生大量流量,对一台或多太计算机攻击

  2. 炸弹

    发送经过特殊构造的报文,导致ip或是icmp处理崩溃或是终止

 

以上是关于TCP包里,关于IP头和TCP头的校验和字段的主要内容,如果未能解决你的问题,请参考以下文章

关于 TCP 校验和计算的问题

校验和计算方法

什么是校验和?

ip校验与计算

ip协议首部校验及tcp校验计算

IP首部校验合