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地址,分为 ...
随机推荐
- spring源码解读之 JdbcTemplate源码
原文:https://blog.csdn.net/songjinbin/article/details/19857567 在Spring中,JdbcTemplate是经常被使用的类来帮助用户程序操作数 ...
- java web session共享
一 搭建环境 操作系统:windows 7 64位 http server:nginx 1.9.7 缓存系统:memcached Servlet容器:apache-tomcat-7.0.65 二 搭建 ...
- CXF异常:No operation was found with the name
https://blog.csdn.net/qq_18675693/article/details/52134805 不同包下面,别忘了namespace最后要加“/”
- mac 创建多个全局Path
cd ~ 进入根目录 (没有这个文件 先touch .bash_profile) open -e .bash_profile 打开编辑然后保存 JAVA_HOME=/Library/Java/Java ...
- AD库转换为KiCAD库的方法
AD库转换为KiCAD库的方法 参照博主另外一篇文档: AD转换为KiCAD的方法,点击此处
- ubuntu批量转换所有子文件夹下图片文件格式
第一步按照 sudo apt-get install imagemagick 对于一个文件,可以: convert ubuntuhandbook.png ubuntuhandbook.jpg 对于多个 ...
- winform程序登陆后关闭登录窗体
用winform做程序的时候,我们一般都是在Program先启动登录窗体,然后登录成功后才创建主窗体,结果这就导致了登录窗体无法关闭 所以如果我们不在Program的程序入口先创建登录窗体的话就能完美 ...
- 转载 如何理解API,API 是如何工作的
本文转载于https://blog.csdn.net/cumtdeyurenjie/article/details/80211896 感谢作者 仁杰兄 大家可能最近经常听到 API 这个概念,那什么是 ...
- c# 转16进制
1.byte[] 转换16进制字符串 1.1 BitConverter方式 var str = DateTime.Now.ToString(); var encode = Encoding.UTF8; ...
- Delphi 鼠标控制函数GetCursorPos、SetCursorPos
GetCursorPos函数 获取鼠标的位置 var P: TPoint; begin GetCursorPos(P); //获取鼠标位置 end; SetCursorPos函数 设置鼠标的位置 v ...