TCP/IP读书笔记(4) IPv4和IPv6 路由选择

网络层是位于链路层之上,TCP/IP模型中网络层的核心协议是IP协议(Internet protocol)。

目前主流的IP协议是IPv4(Internet protocol version 4),但是IPv6(Internet protocol version 6)会是趋势。

IP协议提供不可靠,无连接的数据传输服务,它只负责接受数据包,转发数据库,不维护两端的连接状态。IP层唯一的校验是,IPv4规定通过在路由节点计算校验和来确保IP数据报头是正确的,但是IPv6的时候已经没有了。因为这些本就不该是IP层应该考虑的事情。

IP协议定义了网络层数据包的格式,和如何转发数据包。

IP数据包的格式

IPv6是对IPv4的一个最小扩展,只修改了IP头部,IPv4和IPv6头部数据包的格式,参考TCP/IP卷一第二版第182页。

无论是IPv4还是IPv6,数据包包括两部分:IP头部、IP数据,头部都提供了

  • 版本号 IPv4这个值是4,IPv6是6
  • 包长度 这个数据包的长度
  • 源IP的地址 发送端的IP地址,在IPv4中占4字节,IPv6中占16字节,局域网内传输时通常不会改变,但是如果使用了nat的话,会被修改。
  • 目的IP的地址 完全同上
  • 上层协议号 标识上层协议,列如TCP,UDP,VRRP等。在v4和v6中都只有8位字节,也就是最多256种上层协议。
  • 数据包生存时间 为了防止一个数据包被永远转发下去,需要需要设置:这个数据包被路由器发送“生存时间“次数后如果还是没到达目的地就将它抛弃,每个路由器转发数据包之后都会将生存时间-1,直到它变成0就不再转发。
  • 服务类型 主要是运营商做qos使用,IPv4允许选择置3位优先级级别(现已被忽略),4位TOS(服务类型),包括4种类型:最小时延,最大吞吐率,最高可靠性。IPv6提供8位的Traffic Class(通信级别),类似的作用。

IPv6和IPv4头部的一些主要区别在于:

  • IPv6头部中没有校验和,路由器不需要对每个达到的数据包计算校验和,判断头部是否正确,提高速度。
  • IPv4可以设置分片标识,这里牵扯到上一篇笔记中提到的MTU的概念,如果一个数据包长内容长1400字节又允许分片,而当前路由器的MTU是500,那就会将它分成500,500,400的三部分发出去,如果不允许分片,这个数据包会被丢弃,并产生一个错误。
  • IPv6头部中没有分片标识,它只允许数据发送方决定对数据包进行分片,中间路由器不可以分片,如果发送方的分片不合适,中间路由器会丢弃数据。
  • IPv6支持的服务类型更多,详细可以看思科的这篇文章实现服务质量策略与DSCP

为什么IPv4中传输层,网络层,链路层都有校验和,IPv6网络层不设置校验和?

链路层的校验只能保证数据从一个路由器到另一个路由器中间没有出错(绝大多数情况下能保证)。

数据包到了路由器之后,路由器会把这个数据包拆开,根据下一跳的地址,设置新的链路层头部的目的地址,crc校验值,IP首部的的ttl值,甚至可能还会对数据包进行分片,这样修改的更多了,如果在路由器处理的过程中这个数据出错,那么链路层的校验是发现不了错误的。

所以要保证数据包从发送端到目的地址都没有出错,还需要传输层有自己的校验。
至于网络层的校验,现在看来确实是没必要的,IPv6网络层为了提高速度,已经不再校验。
IPv6中间路由器也不会对数据包进行分片

路由选择

路由转发,ip层通过路由器,将数据从源目的地址发送到目的地址的功能,没啥好说的,大学都很清楚了。
路由转发不仅仅是路由器的功能,服务器也有路由转发,在linux机器上执行route -n可以看到类似下图的结果

当ip层发送一个数据包时:

  • 它会根据目的ip地址,在路由表中搜寻完全匹配的项
  • 如果搜寻不到,搜寻网络地址(cidr中的地址)匹配的项
  • 如果搜寻不到,搜寻默认地址
  • 将数据包从搜寻到的项中的接口对应的设备发出

需要注意的是,使用静态路由时,路由表在以下几种情况可能会被修改:

  • 路由器发现这个数据包不应该被发送给它(路由器r2将数据发给r1,r1发现它需要将数据发给r2)时,产生ICMP重定向错误,告诉发送方直接把数据发给r2
  • 主机或者网卡启动时发送三份路由请求报文,如果收到,就停止发送,根据报文内容更新路由表。可能之前网络是通的,启动了一个网卡之后,默认路由被更改,部分网络不再联通
  • 链路断开时,部分路由项被移除

另外,服务器默认不转发不是由它产生的数据包,可以将网卡配置成混杂模式,当做路由器使用,转发不属于它产生的数据包。

TCP/IP读书笔记(4) IPv4和IPv6 路由选择的更多相关文章

  1. 图解TCP/IP读书笔记(二)

    图解TCP/IP读书笔记(二) 第二章.TCP/IP基础知识 一.TCP/IP出现的背景及其历史 年份 事件 20世纪60年代后半叶 应DoD(美国国防部)要求,美国开始进行通信技术相关的研发 196 ...

  2. 图解TCP/IP读书笔记(一)

    图解TCP/IP读书笔记(一) 第一章 网络基础知识 本学期的信安概论课程中有大量的网络知识,其中TCP/IP占了相当大的比重,让我对上学期没有好好学习计算机网络这门课程深感后悔.在老师的推荐下开始阅 ...

  3. # 图解TCP/IP读书笔记(五)

    第五章.IP协议相关技术 IP旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP是无法实现通信的,因此还有需要作为为IP的辅助的各种协议支持. 协议 作用 特点 DNS(Domain Name ...

  4. 图解TCP/IP读书笔记(四)

    第四章.IP协议 IP(Internet Protocol,网际协议),作为整个TCP/IP中至关重要的协议,主要负责将数据包发送给最终的目标计算机.因此,IP能够让世界上任何两台计算机之间进行通信. ...

  5. 图解TCP/IP读书笔记(三)

    第三章.数据链路 数据链路层是计算机网络最基本的内容. 数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范. 一.数据链路相关技术 1.MAC地址 关于MAC地址的几个要点: ①MAC地址长度 ...

  6. tcp/ip学习笔记-TCP

    tcp/ip学习笔记-TCP 彭会锋 报文发送采用的是tcp_output函数,

  7. TCP/IP学习笔记(3)-IP、ARP、RARP协议

    这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数据 ...

  8. TCP/IP学习笔记(3)----IP,ARP,RARP协议

    把这三个协议放到一起学习是因为这三个协议处于同一层(网络层协议),ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP ...

  9. 《图解TCP/IP》笔记

    OSI参考模型 协议分层 为什么需要分层? 简化网络协议. 每一层只需要衔接上下层的服务. 利于模块化开发. 解耦. 分层的问题 过分模块化.提高数据处理的开销. OSI参考模型 作用及意义 将复杂的 ...

随机推荐

  1. Matlab产生TestBeach所需要的波形数据

    在用vivado仿真的时候,很多情况下需要自己产生波形来代替AD采样波形.以前的做法都是用DDS内部产生所需要的波形来模仿外部输入,后来发现这种做法不仅麻烦,而且不易修改,对仿真很不友好.于是改用ma ...

  2. 常用Nagios配置命令

    cd /usr/local/nagios/etc vim nagios.cfg /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios ...

  3. 【转】sed 学习笔记

    一  .  sed 简介 1  .  功能 sed 是一种流编辑器,所谓流编辑器是指能够对来自文件或者管道的输入流进行基本的文本转换的工具,比方说查找替换删除等. 2  .  最简单的运作机制 sed ...

  4. Hyperledger Fabric Endorsement policies——背书策略

    背书策略 背书策略用于指导peer如何确定交易是否得到了的认可.当一个peer接收到一个事务时,它会调用与事务的Chaincode相关联的VSCC(验证系统链代码),作为事务验证流程的一部分,以确定交 ...

  5. spring实例化bean三种方式

    我看了这篇博文<https://www.cnblogs.com/zhanglei93/p/6221546.html>,以及自己实践总结了关于spring实例化bean对象的3种方式. 一. ...

  6. ABP官方文档翻译 4.4 授权

    授权 介绍 关于IPermissionChecker 定义权限 检查权限 使用AbpAuthorize特性 AbpAuthorize特性注意点 抑制授权 使用IPermissionChecker 在R ...

  7. Spring源码情操陶冶-ComponentScanBeanDefinitionParser文件扫描解析器

    承接前文Spring源码情操陶冶-自定义节点的解析,本文讲述spring通过context:component-scan节点干了什么事 ComponentScanBeanDefinitionParse ...

  8. Android端生成META-INF信息文件的Gradle插件 RapidMetaInfPlugin

    来源博客:Wang Jie's Blog 本文链接:<http://blog.wangjiegulu.com/2018/02/05/Android端生成META-INF信息文件的Gradle插件 ...

  9. quartz的一些记录

    定时任务总会遇到任务重叠执行的情况,比如一个任务1分钟执行一次,而任务的执行时间超过了1分钟,这样就会有两个相同任务并发执行了.有时候我们是允许这种情况的发生的,比如任务执行的代码是幂等的,而有时候我 ...

  10. HDU [P3605] Escape

    二分图多重匹配 改进版的匈牙利,加入了一个cnt数组作为找到增广路的标志 本题有一个重要的优化见注释 #include <iostream> #include <cstdio> ...