IP报文详解
IP协议
IP协议,Internet Protocol ,互联网协议,IP协议位于网络层,主要目的是使得网络间能互联通信
IP是TCP/IP协议族中得核心协议,所有TCP、UDP、ICMP和IGMP数据都是通过IP数据报传输。
IP报文
IP数据报的首部部分长度为20-60个字节
版本号:指IP协议所使用的版本。4个位。版本号为0100,4,即IPv4,版本号为6,即IPv6
IP首部长度:表示IP包头长度,该字段用4位表示。最常见的报头长度是0101即20位,当IP报头长度不是4字节整数倍时,就需要对填充域填充
DS位:现在一般用于支持QoS中差分服务模型,实现网络流量优化
总长度:指IPv4数据报的总长度。数据报的最大长度为:2*16-1=65535字节,当IP数据报超过最大传输单元MTU后,会被分片处理
标识符:网络中转发的IP报文的长度可以不同,但如果报文长度超过了数据链路所支持的最大长度,则报文就需要分割成若干个小的片段才能在链路上传输。将报文分割成多个片段的过程叫做分片
主机将数据报分片后,在发送前,会给每一个分片数据报一个ID值,放在16位的标识符字段中。
标志位:标志字段在IP报头中占3位,
第1位作为保留,置0;
第2位,分段,有两个不同的取值:该位置0,表示可以分段;该位置1,表示不能分段;
第3位,更多分段,同样有两个取值:该位置0,表示这是数据流中的最后一个分段,该位置1,表示数据流未完,后续还有
当目的主机接收到一个IP数据报时,会首先查看该数据报的标识符,并且检查标志位的第3位是置0或置1,以确定是否还有更多的分段。如果还有后续报文,接收主机则将接收到的报文放在缓存直到接收完所有具有相同标识符的数据报,然后再进行重组。
偏移量:各个IP分片数据报在发送到目的主机时可能是无序的,所以就需要“偏移量”字段来指明“该分片在原数据报中的位置顺序”
生存时间:该字段用于设置一个“数据报可经过的路由器数量”的上限。
报文在网段间转发时,如果网络数设备上的路由规划不合理,就可能出现环路,导致报文在网络中无线循环,无法到达目的端。环路发生后,所有发往这个目的地的报文都会被循环转发,网络将发生拥塞。
发送方在初始发送时设定某个值(建议为64,、128或255),每台路由器再转发时都将其减一,当字段达到0时,该数据报被丢弃,并使用一个ICMP消息通知发送方。
协议:8位1个字节,包含一个数字,该数字对应一个“有效载荷部分的数据类型”。比如0x06代表TCP。
首部校验和:2个字节,该字段“仅计算”IPv4首部。也就是说只“校验”首部。并不检查数据报的“数据部分”。
首先将“首部校验和”设置为0。然后对首部(整个首部是一个16位字的“序列”)计算16位二进制反码和。该值被存储在首部校验和字段中。当接收方接收到数据报后,也对其首部进行校验计算,如果结果与“首部校验和”的值不同,就丢弃收到的数据报。
源IP、目的IP:各占4个字节
可选字段:IP支持很多可选选项。
原文地址:https://www.cnblogs.com/juankai/p/11468166.html
- 【学术】如何在神经网络中选择正确的激活函数
- PhalGo-Echo路由
- PhalGo-介绍
- 数据库分库分表中间件 Sharding-JDBC 源码分析 —— 分布式主键
- [喵咪Golang(2)]安装和Helloworld
- LSTM的简单介绍,附情感分析应用
- 使用实体嵌入的结构化数据进行深度学习
- Otter-入门篇3(Node搭建)
- PhalGo-Respones
- 数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 改写
- Otter-入门篇2(Manager安装配置)
- Java的字符串常量相关的一个问题
- [喵咪Liunx(3)]端口转发工具rinetd
- 基于PhalApi的Smarty拓展
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Centos7安装配置NFS服务和挂载教程(推荐)
- 轻松搞定VIM高亮NGINX配置文件的方法
- CentOS7 下安装telnet服务的实现方法
- Linux内核启动参数详解
- CentOS6.3添加nginx系统服务的实例详解
- Linux中在防火墙中开启80端口方法示例
- Apache 获取真实ip的配置的实现方法
- Linux下文件的切分与合并的简单方法介绍
- ubuntu 系统上为php加上redis 扩展的实现方法
- deepin linux 手动升级内核的方法
- UGL之单色位图
- Linux网络启动问题:Device does not seem to be present解决办法
- UGL之透明位图
- 关于ISR
- python 井字棋-文字版(下)