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:网际协议的更多相关文章

  1. TCP/IP详解 卷一(第三章 IP:网际协议)

    IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP及IGMP数据都以IP数据报格式传输. IP提供不可靠.无连接的数据报传送服务. 1.不可靠:就是它不能保证IP数据报能成功地到 ...

  2. IP通信基础课堂笔记----第三章(自认为的重点)

    网络层协议IP IP数据包格式:固定部分        {  标识(16):计数器,源站每发送一个分组,标识+1:源IP地址的标识是全网唯一的. (包含TCP/UDP首部)  |  标志(3):当最低 ...

  3. TCP/IP协议第一卷第三章 IP首部分析

    IP介绍 IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP.IGMP数据都以IP数据报格式传输. IP提供不可靠.无连接的数据报传送服务. 不可靠(unreliable)它不能 ...

  4. 《TCP/IP详解 卷一》读书笔记-----第三章 IP

    1.Network byte order:数据在网络中的传输是按照大端模式来的,即如果需要传递一个四个字节的int变量,先传递最高的字节,然后依次类推.因此无论主机存储数据用的是大端模式还是小端模式, ...

  5. [深入理解Android卷一全文-第三章]深入理解init

    因为<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. ...

  6. 第三章 IP地址规划设计技术(很重要)

    知识重点: 选择题考点 IP基础(网络地址.子网掩码) 网络地址转换 NAT 的原理 CIDR (计算方法) IPv6 地址表示 综合题 IP地址的分类与计算 VLSM 地址规划 3.1 基础知识 3 ...

  7. 【TCP/IP详解 卷一:协议】第十七章 TCP:传输控制协议

    本章作为TCP的入门章节,简单的概述了一些TCP的知识,和TCP数据报的首部格式. TCP 最重要的特性:reliable. 17.1 引言 本章介绍的是 TCP为应用层提供的服务. 17.2 TCP ...

  8. 【TCP/IP详解 卷一:协议】第十二章 广播和多播

    建议参考:广播和多播 IGMP 12.1 引言 IP地址知识点回顾: IP地址分为三种:(1)单播地址 (2)广播地址 (3)多播地址 另外一种是,IP地址一般划分成五类:A-E类. 单播 考虑 类似 ...

  9. 【TCP/IP详解 卷一:协议】第9章 IP选路

    推荐链接:网络地址与主机地址 9.1 引言 路由选择程序(daemon),通常这是一个用户进程.在大多数的Unix系统中,大多数的路由选择程序都是路由程序和网关程序. 路由表经常被IP访问,但是它被路 ...

随机推荐

  1. Goroutines vs Threads

    http://tleyden.github.io/blog/2014/10/30/goroutines-vs-threads/ Here are some of the advantages of G ...

  2. [py]字符串/列表

    去除str首尾空格(切片) ## str长度 循环,判断 ### [:i] [i:] 记录位置点 ## 方法1 def trim2(s): s2 = "" start = 0 en ...

  3. 查看Django和flask版本

    查看Django版本 检查是否安装成功,可以在dos下查看Django版本. 1.输入python 2.输入import django 3.输入django.get_version() 1 2 3 4 ...

  4. Chrome Input框老是有输入记录的终极解决方案

    尤其是日期框,输入记录都挡住日期弹框了. 浏览器地址栏输入: chrome://settings/autofill,按钮关掉就可以了.

  5. [LeetCode] 101. Symmetric Tree_ Easy tag: BFS

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  6. Qt addStretch()详解

    addStretch函数,是在布局的时候用到. 函数原型: void QBoxLayout::addStretch ( int stretch = 0 ) 作用:平均分配Layout 比如: QVBo ...

  7. 多项式函数插值:多项式形式函数求值的Horner嵌套算法

    设代数式序列 $q_1(t), q_2(t), ..., q_{n-1}(t)$ ,由它们生成的多项式形式的表达式(不一定是多项式): $$p(t)=x_1+x_2q_1(t)+...x_nq_1(t ...

  8. LCD驱动

    LCD的驱动情况比较多. 对于一般的LCD,驱动方式有MCU,MPU,SPI等.其中MCU方式不需要输入clk,vsync,hsync等信号.完全可以通过异步来驱动,但是这样难以将屏 幕做到很大.MP ...

  9. CAScrollLayer

    CAScrollLayer 对于一个未转换的图层,它的bounds和它的frame是一样的,frame属性是由bounds属性自动计算而出的,所以更改任意一个值都会更新其他值. 但是如果你只想显示一个 ...

  10. linux常用命令:ifconfig 命令

    许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...