IPv4 IPv6
IP提供了一种best-effort,connection-less数据delivery服务。
- best-efforty意味着它不保证IP数据段会成功到达目的地。当error发生时,IP通常选择丢弃data.可靠性必须由上层(通常是TCP)提供。
- connectionless意味着IP不维护任何关于相关数据段和网络单元(一般是路由器)的connection state information。如果source 发送两个连续的datagram(first A ,then B)到相同目的地,它们可以独立选择传输路径,也可以是不同的路径。B可以比A先到达。在传输过程中,它们可能被复制、被修改内容。所以需要TCP处理这些潜在问题。
一、IPV4 Header


- version(版本):IPV4是4,IPV6是6;
- IHL(Internet Header Length)。IHL是占4“位”,它的每一“位”代表4个字节。所以它总共占据 32bits。IHL的 正常值是0101 = 5,一共是 5*4 = 20字节;最大值 1111 = 15,15*4 = 60 bytes;
- DS(Differentiated Services Field,DS Field,区分服务字段) + ECN (Explicit Congestion Notification,显式拥塞通知)= ToS(Type of Service,服务类型字段)。这些字段被用于数据转发时的特殊处理
- Total Length(总长度字段),包括IPv4头部在内的IPV4数据报的总长度(bytes).max size = 65535bytes. 因为一些携带IPV4的低层协议不能精确表示自己的封装的数据大小,所以要在 Header中给出。
- Identification(标识字段),帮助标识从IPV4 主机发出的数据包。为了不与其他数据包分片混淆,发送主机每发送一个数据报时,会将一个内部计数器加1,然后将这个计数值拷贝到Identification.
- Flags包括(0、DF(don't fragment)位、MF(more fragment))和后面的13位Fragment Offset都用于分片和重组、
- Time-to-Live(生存期字段,TTL),用来设置一个数据报经过的路由器上限数量,一般设置为(64,128,255等),数据报被路由器转发1次,该值减1.当该值变为0时,数据报被丢弃。发送方is notified with a ICMP 消息。为了防止路由循环导致的数据报在网络中循环。
- Protocol(协议字段),包含一个数字用于说明数据报有效载荷(payload portion)的数据类型。 通常值是17(for UDP)和6(for TCP).提供多路分解(可以携带多种类型的传输层协议)
- Header Checksum(头部校验和字段)仅仅计算IPV4头部,它意味着 IP协议不检查IPv4 datagram 的有效载荷(e.g.,TCP or UDP data) 的正确性。所以封装在IP中的协议(传输层)在自己头部中有一个含有其头部和数据的校验和。
- Source IP Address(源IP地址),32位,通常标识一台计算机的一个借口。
- Destination IP Address(目的IP地址),32位
二、IPV6 Header


- version(版本):IPV4是4,IPV6是6;
- DS(Differentiated Services Field,DS Field,区分服务字段) + ECN (Explicit Congestion Notification,显式拥塞通知)= Traffic Class byte(通信类型字段)。这些字段被用于数据转发时的特殊处理
- Flow Label(流标签字段),由应用进程或内核为某个给定的套接口选取,应用于通过该套接口发送的任何IPv6数据报。所谓流(flow)指的是从某个特定源头到某个特定目的地的一个分组序列,而且该源头期望中间的路由器对这些分组进行特殊处理。
- Payload length(净荷长度)是去掉IPv6 Header(40bytes)头部之后所有内容的总长度。它与IPv4总长度的区别在于IPv4把头部也计算在内。
- Next Header(头部字段),这个字段就是IPV4的协议字段,它指出了the type of header follow IPV6 header.
- Hop Limit(跳限字段)类似于IPv4的TTL,用来设置一个数据报经过的路由器上限数量,一般设置为(64,128,255等),数据报被路由器转发1次,该值减1.当该值变为0时,数据报被丢弃
- Source IP Address(源IP地址),128位,通常标识一台计算机的一个借口。
- Destination IP Address(目的IP地址),128位
二、IPv4到IPV6的变化
- IPv6没有header length,固定为40bytes的IPv6 header length。
- 如果两个IPv6的 header 是64对齐的,那么它们的地址也是64位对齐的,如此可以加快在64位体系结构上的处理。
- IPv6没有fragmentation fields(分片字段),因为IPv6有一个独立的分片头用于这种情况,因为分片是异常情况,异常情况不应该减慢正常处理
- IPv6没有用于其自身的校验和字段。这是因为所有的上层协议(TCP、UDP等)的数据单元都有自己的校验和字段。
- IPv6没有广播
- IPv6路由器不对所转发的分组执行分片。
- IPv6要求支持认证和安全选项。
- IPv6要求支持路径MTU发现功能。
https://www.cnblogs.com/craftor/p/3811739.html

IPv4 IPv6的更多相关文章
- IPv4&IPv6双重协议栈
IPV4 TCP客户与IPV6服务器之间的通信: 1 启动IPV6服务器,创建套接监听口,绑定通配地址 2 IPV4调用gethostbyname找到该服务器对应的A记录 3 调用connect,向服 ...
- LwIP Application Developers Manual10---LwIP IPv4/IPv6 stacks
1.前言 lwIP正在加入IPv6,一个实验性的版本可以通过git下载,该版本实现了一个IPv4/IPv6的双协议栈.通过在lwipopts.h定义LWIP_IPV6可以使能IPv6 2.已实现的IP ...
- IP协议/地址(IPv4&IPv6)概要
IP协议/地址(IPv4&IPv6)概要 IP协议 什么是IP协议 IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议. [1] 协议的特征 无连 ...
- 网络编程中常见地址结构与转换(IPv4/IPv6)
1. sockaddr/sockaddr_in/in_addr (IPv4).sockaddr6_in/in6_addr/addrinfo (IPv6) struct sockaddr { unsig ...
- nginx同时监听本机ipv4/ipv6端口
修改nginx.conf配置文件 server { listen ; listen [::]:; } 0.0.0.0 表示本机所有ipv4地址,需要监听特定地址替换即可 [::] 表示本机所有ip ...
- IP-v4&IP-v6
IPv6与IPv4区别: 1:IPv6的地址空间更大.IPv4中规定IP地址长度为32,即有2^32-1个地址: 而IPv6中IP地址的长度为128,即有2^128-1个地址. 2.IPv6的路由表更 ...
- IPV4/IPV6双协议栈配置案例
拓扑: XRV1配置: =================================================================== hostname XRV1! ipv6 ...
- IPv4&&IPv6地址结构分析
IPv4套接字地址结构: 套接字都需要有一个指向套接字地址结构的指针作为参数.每个协议簇都定义它自己的套接字地址结构.这些结构的名字均已sockaddr_开头,并以对应每个协议族的唯一后缀结尾. wi ...
- mysql IPv4 IPv6
w如何通过一个mysql方法,而不是借助脚本判断?INET6_ATON(expr) https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-func ...
- ipv4 ipv6简介
互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),缩写为IP地址(IP Address),在Internet上,一种给主机编址的方式.常见的IP地址,分为 ...
随机推荐
- webpack--前端自动化工具
一.下载与安装 //全局安装webpack (不推荐) npm i webpack -g npm i webpack-cli -g //局部安装(推荐) npm i webpack -D npm i ...
- maven环境变量配置及测试
首先要确认,你是否已经安装了jdk,并且已经成功配置了环境变量. 和java配置类似,计算机右键属性->高级系统设置->环境变量. 添加如下变量: 变量名:maven_home 变量值:C ...
- json转换为map
// json转换为map public static Map parserToMap(String s) { Map map = new HashMap(); JSONObject json = J ...
- Java 基础 - System.arraycopy() 浅拷贝 深拷贝
ref: https://blog.csdn.net/balsamspear/article/details/85069207 https://blog.csdn.net/balsamspear/ar ...
- 修改Centos中的ll命令(以 K 为单位显示文件大小)
修改CentOS ll命令:以K 为单位显示文件大小 1.编辑 .bashrc 文件:vim /root/.bashrc 2.找到 alias ll 行修改为(如果没有直接添加该行):alias ll ...
- c#开发应避免的几个小滥用
一 String和StringBuilder 少量的字符串操作不宜采用StringBuilder. 由于string是不可变得对象,对于string的叠加,每次操作 ...
- 【TCP】SYN攻击
TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确 ...
- Yii2 数据库Active Record(ORM)
ACTIVE RECORD(ORM) 参考:http://www.yiiframework.com/doc-2.0/guide-db-active-record.html namespace app\ ...
- Shiro学习(20)无状态Web应用集成
在一些环境中,可能需要把Web应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上相应的用户名进行登录.如一些REST风格的API,如果不使用OAuth2协议, ...
- Github上发布托管和下载
打包托管 远程下载安装 git clone https://github/2008nmj/mnist_python 使用git工具和命令行 Git使用场景 (可以不用上传到托管平台) 写论文 分工合作 ...