【TCP/IP协议 卷一:协议】第三章 IP:网际协议
3.1 引言
unreliable不可靠的意思是它并不能保证IP数据报能成功的到达目的地。IP只提供尽力而为的传输服务。
conectionless无连接的意思是IP并不维护任何关于后续数据报的状态信息。整个数据报的处理是相互独立的。即每个数据报都是独立地进行路由选择,可能选择不同的路线。
3.2 IP首部
- 4个字节的32bit值以下面的次序传输:(1)0-7 bit (2)8-15 bit (3)16-23 bit (4)24-31 bit,这种传输次序称为big endian字节序,因此他又称为网络字节序。
- 目前的协议版本号是4,因此IP有时也称作IPv4。
- 服务类型TOS字段:3 bit优先权子字段(已被忽略),4 bit的TOS子字段,1 bit未用位但必须置为0。如果所有的4 bit(TOS字段)都置0,则意味着是一般服务。
- Telnet 和 Rlogin 这两个交互应用要求最小的传输时延,因此人们主要用来传输少量的交互数据。 FTP文件要求最大的吞吐量。SNMP(网络管理)和路由选择协议要求最高可靠性。NNTP(用户网络新闻)是唯一要求最小费用的应用。
- 总长度字段是指整个IP数据报的长度,以字节byte为单位,是IP首部中必要的部分。利用首部长度字段和总长度字段可以知道IP数据报中数据内容的起始位置和长度。
- 标示字段唯一地标识主机发送的每一份数据报。
- TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数,它指定了数据报的生存时间。TTL的初始值由源主机设置(一般为32 或者 64),一旦经过一个处理它的路由器,值-1,。当字段值为0时,数据报就被丢弃。TTL体现了IP协议的unreliable。
- 协议字段,被用于对数据报进行分用。可以识别出是哪个协议向IP传送数据。
- 首部检验和字段是根据IP首部计算的检验和码。具体检验方法参见教材P26-27。
- 每一份IP数据报都包含源IP地址和目的IP地址,它们都是32 bit的值。
3.3 IP路由选择
特殊情况:(1)目的主机与源主机直接相连(PointToPoint链路) (2)都在同一个共享网络上(以太网或令牌环网) IP直接到达目的主机。
教材P4 介绍了主机和路由器的区别,多接口主机一般不称作路由器,但是也可以具有路由器的功能:单纯的转发数据报。
IP可以从(1)TCP,UDP,ICMP,IGMP接收数据报(即在本地生成的数据报) (2)从一个网络接口接收数据报(待转发的数据报) 进行发送。
IP路由选择是逐跳逐跳(hop-by-hop)的进行,IP内存中有一个路由表,当接收到一份数据报之后,对该表进行搜索:
- (1)搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号均匹配),找到后由标志字段的值决定发往下一跳路由器或者网络接口。
- (2)步骤1 missed,搜索路由表,寻找能与目的网络号所匹配的表目,找到后由标志字段的值决定发往下一跳路由器或者网络接口。
- (3)步骤1 2 missed,搜索路由表,寻找标为“默认”的表目,找到后发往表目指定的下一跳路由器。
- (4)以上均失败,向生成数据报的application发送一个“不可达”的错误。
当接收一份来自某个网络接口的数据报时(待转发的数据报),IP先检查是否是本机的IP地址之一或者IP广播地址,是的话数据报被送到IP首部协议字段所指定的协议模块进行处理。如果不是,if(1)IP层被设置为路由器的功能,进行转发数据报的工作 else(2)数据报被丢弃。
3.4 子网寻址
- 现在所有的主机都支持子网编址,把原来地址的主机号分为一个子网号和一个主机号。
- 从InterNIC获得某类IP网络号以后,就由当地的管理员进行分配,一般采用自然的划分方式,对于B类地址来说,把留给主机号的16 bit中的8 bit分配给子网地址,剩下的8 bit作为主机号。
- 子网对于外部路由器来说隐藏了内部网络结构的细节。但是子网对于子网内部的路由器是不透明的。
- 与30个C类地址相比,用1个包含30个子网的B类地址的好处是:缩小了Internet路由表的规模。即子网划分缩短了路由表的规模。
3.5 子网掩码
- 主机在引导过程中通过子网掩码确定有多少比特分配给子网号,有多少比特用于主机号。
- 子网掩码经常用十六进制表示,特别是当界限不是一个字节(8 bit)时,因为子网掩码是一个比特掩码。
给定IP地址和子网掩码之后,主机能够确定IP数据报的目的是:- (1)本子网上的主机
- (2)本网络中其他子网的主机
- (3)其他网络中的主机。
- 知道IP地址之后,可以根据它的高位得知它是A类或者B类或者C类地址。也就是子网号和网络号的分界线。
- 知道子网掩码之后,可以知道子网号和主机号之间的分界线。
- 子网掩码是一个32 bit的值,其中值为1的bit留给网络号和子网号,值为0的bit留给主机号。
做个这样的比方:
有很多人住在很多不同的小区里面,小区类比于子网,人类比于主机,比如说我们要找到幸福小区的陈某某同学,那么我们找的顺序是:先找到幸福小区,再找到陈某某同学。
小区有大有小,那么这通过小区的户口来决定,小区的户口类比于子网掩码。
举典型的例子:
IP 中前 24 位代表子网号,后 8 位代表主机号。
所以子网掩码就是 24 个 1(代表前 24 位是子网部分),加 8 个 0(后 8 位是主机部分)。
如果沿用 IP 的标识方式,就是 255.255.255.0 。
每一个 255 对应 8 个二进制 1,最后一个 0 对应 8 个二进制 0。
该子网可以容纳最多 256 台主机,也就是主机号从 0 到 255。
2016/7/24
【TCP/IP协议 卷一:协议】第三章 IP:网际协议的更多相关文章
- TCP/IP详解 卷一(第三章 IP:网际协议)
IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP及IGMP数据都以IP数据报格式传输. IP提供不可靠.无连接的数据报传送服务. 1.不可靠:就是它不能保证IP数据报能成功地到 ...
- IP通信基础课堂笔记----第三章(自认为的重点)
网络层协议IP IP数据包格式:固定部分 { 标识(16):计数器,源站每发送一个分组,标识+1:源IP地址的标识是全网唯一的. (包含TCP/UDP首部) | 标志(3):当最低 ...
- TCP/IP协议第一卷第三章 IP首部分析
IP介绍 IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP.IGMP数据都以IP数据报格式传输. IP提供不可靠.无连接的数据报传送服务. 不可靠(unreliable)它不能 ...
- 《TCP/IP详解 卷一》读书笔记-----第三章 IP
1.Network byte order:数据在网络中的传输是按照大端模式来的,即如果需要传递一个四个字节的int变量,先传递最高的字节,然后依次类推.因此无论主机存储数据用的是大端模式还是小端模式, ...
- [深入理解Android卷一全文-第三章]深入理解init
因为<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. ...
- 第三章 IP地址规划设计技术(很重要)
知识重点: 选择题考点 IP基础(网络地址.子网掩码) 网络地址转换 NAT 的原理 CIDR (计算方法) IPv6 地址表示 综合题 IP地址的分类与计算 VLSM 地址规划 3.1 基础知识 3 ...
- 【TCP/IP详解 卷一:协议】第十七章 TCP:传输控制协议
本章作为TCP的入门章节,简单的概述了一些TCP的知识,和TCP数据报的首部格式. TCP 最重要的特性:reliable. 17.1 引言 本章介绍的是 TCP为应用层提供的服务. 17.2 TCP ...
- 【TCP/IP详解 卷一:协议】第十二章 广播和多播
建议参考:广播和多播 IGMP 12.1 引言 IP地址知识点回顾: IP地址分为三种:(1)单播地址 (2)广播地址 (3)多播地址 另外一种是,IP地址一般划分成五类:A-E类. 单播 考虑 类似 ...
- 【TCP/IP详解 卷一:协议】第9章 IP选路
推荐链接:网络地址与主机地址 9.1 引言 路由选择程序(daemon),通常这是一个用户进程.在大多数的Unix系统中,大多数的路由选择程序都是路由程序和网关程序. 路由表经常被IP访问,但是它被路 ...
随机推荐
- Python3学习之路~2.1 列表、元组操作
列表 列表是我们以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作. 定义列表(list) names=['Amy','Bob','Cindy','David'] 通过下标访问列 ...
- [LeetCode] 724. Find Pivot Index_Easy tag: Dynamic Programming
Given an array of integers nums, write a method that returns the "pivot" index of this arr ...
- print(array)时array中间是省略号没有输出全部的解决方法
import numpy as np np.set_printoptions(threshold=np.inf) 大量元素情况 可以采用set_printoptions(threshold='nan' ...
- C++Builder6.0 新建和打开项目软件死机
大清早上班打开C++Builder6.0软件,打开项目却卡死,甚是奇怪,然后尝试新建项目也同样卡死.尝试打开一个CPP文件,可以打开,再尝试打开项目.bpr文件,便打开了.至于原因为什么,那就不得而知 ...
- 集合框架—常用的map集合
1.Collections.synchronizedMap() 实现上在调用map所有方法时,都对整个map进行同步,而ConcurrentHashMap的实现却更加精细,它对map中的所有桶加了锁. ...
- AutoLayout 的一些坑
1. 给一个 UIView 加约束,希望它显示在 UITableView 的底部,但是它不显示,它会出现在 UITableView 的顶部. 错误代码: [self.tableView addSubv ...
- 持续集成之四:Jenkins+sonarqube
参考其他文章,编译 构建 检查工具 参考:https://blog.csdn.net/lswnew/article/details/79193529 http://www.uml.org.cn/cod ...
- quartz开源作业调度框架的配置
quartz开源作业调度框架的job服务实现,Quartz是一个完全由java编写的开源作业调度框架,使用时候需要创建一个实现org.quartz.Job接口的java类,Job接口包含唯一的方法: ...
- python进程、多进程
进程: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当 ...
- iOS &Android 项目 Jenkins持续集成
背景:由于之前的jenkins机器软件环境较老(mac系统 和 Xcode版本等太低).设备性能也是比较差,编译相关脚本也不大适合目前业务,所以,跟infra部门重新申请了一台固定ip .高配的mac ...