TCP/IP读书笔记(4) IPv4和IPv6 路由选择
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 路由选择的更多相关文章
- 图解TCP/IP读书笔记(二)
图解TCP/IP读书笔记(二) 第二章.TCP/IP基础知识 一.TCP/IP出现的背景及其历史 年份 事件 20世纪60年代后半叶 应DoD(美国国防部)要求,美国开始进行通信技术相关的研发 196 ...
- 图解TCP/IP读书笔记(一)
图解TCP/IP读书笔记(一) 第一章 网络基础知识 本学期的信安概论课程中有大量的网络知识,其中TCP/IP占了相当大的比重,让我对上学期没有好好学习计算机网络这门课程深感后悔.在老师的推荐下开始阅 ...
- # 图解TCP/IP读书笔记(五)
第五章.IP协议相关技术 IP旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP是无法实现通信的,因此还有需要作为为IP的辅助的各种协议支持. 协议 作用 特点 DNS(Domain Name ...
- 图解TCP/IP读书笔记(四)
第四章.IP协议 IP(Internet Protocol,网际协议),作为整个TCP/IP中至关重要的协议,主要负责将数据包发送给最终的目标计算机.因此,IP能够让世界上任何两台计算机之间进行通信. ...
- 图解TCP/IP读书笔记(三)
第三章.数据链路 数据链路层是计算机网络最基本的内容. 数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范. 一.数据链路相关技术 1.MAC地址 关于MAC地址的几个要点: ①MAC地址长度 ...
- tcp/ip学习笔记-TCP
tcp/ip学习笔记-TCP 彭会锋 报文发送采用的是tcp_output函数,
- TCP/IP学习笔记(3)-IP、ARP、RARP协议
这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数据 ...
- TCP/IP学习笔记(3)----IP,ARP,RARP协议
把这三个协议放到一起学习是因为这三个协议处于同一层(网络层协议),ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP ...
- 《图解TCP/IP》笔记
OSI参考模型 协议分层 为什么需要分层? 简化网络协议. 每一层只需要衔接上下层的服务. 利于模块化开发. 解耦. 分层的问题 过分模块化.提高数据处理的开销. OSI参考模型 作用及意义 将复杂的 ...
随机推荐
- web开发概述
1 Web概述 Web,在英语中表示网页的额意思,它用于表示Internet主机上供外界访问的资源. 2 Web的分类 按照服务器上的资源分类: 静态资源:指的是web页面中供人们浏览的数据是始终不变 ...
- traffic server文件目录
功能: Trafficserver的主要功能是缓存,当然你也可以用它来做纯粹的反向代理(像通常用nginx那样).通常切入一个庞大的系统的最好方式是看如何使用,使用traffic server的主要入 ...
- JAVA设计模式之---工厂模式
1.引言 工厂模式可以分为类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 这种模式从上 ...
- 前段篇:HTML
<!DOCTYPE html> 文件开头统一的标准! HTML包含了两部分: head与body 固定的格式. 一.head部分: head部分分为两部分:meta标签与非meta标签: ...
- ABP官方文档翻译 5.4 SwaggerUI集成
SwaggerUI集成 介绍 ASP.NET Core 安装Nuget包 配置 测试 ASP.NET 5.x 安装Nuget包 配置 测试 介绍 在它的网站上:“...使用Swagger可用的API, ...
- ubuntu 新手入门第一天
在虚拟机上安装好linux之后,当前版本 ubuntu-16.04.3-desktop-amd64.iso 1. 设置root用户名和密码 sudo passwd 然后输入两次密码 2. 设置软件源 ...
- MIT-线性代数笔记(7-11)
第 07 讲 求解 Ax=0 :主变量,特解 矩阵的秩Rank(A):矩阵主元的个数. 找出“主变量”pivotvariables,主列,即主元所在的列,其他列,称为自由列.(自由列表示可以自由或任意 ...
- Python编程软件的安装与使用——Windows、Linux和Mac
Python版本:3.6.2 操作系统:Windows 作者:SmallWZQ 最近,有读者透露:Python软件如何安装?为什么自己安装的软件会有各种"奇怪"的问题?据此,本 ...
- 似懂非懂的Comparable与Comparator
jdk1.8.0_41 一知半解写代码, 集合排序用个啥. 抄起键盘胡乱打, 似懂非懂最可怕. Comparable与Comparator都是用于集合的排序,对于大多数人来说Comparator可能略 ...
- qt实现一个简单的计算器
1.计算器的界面如下图所示 dalog.cpp #include "dialog.h" #include "ui_dialog.h" #include<Q ...