《TCP/IP详解 卷1:协议》读书笔记 第三章 IP :网际协议

第三章 IP :网际协议


IP协议提供不可靠,无连接的数据报传送服务。
不可靠:不保证IP数据报成功到达目的地。
无连接:IP不维护后续数据报的状态信息(不一定按序发送和接收)。

IP首部

 

IP首部一般为20个字节,除非包含选项字段。

版本:IPv4或IPv6

首部长度首部的长度,以4 byte为单位,包含选项字段。该字段共4 bit,因此IP首部最长为60 Byte,且必须为4 Byte的倍数

服务类型

总长度:整个IP数据报的长度,以byte为单位。该字段共16 bit,所以IP数据报最长为2^16 byte

标识:唯一标识主机发送的每一份数据报

TTL:Time-To-Live,数据报可以经过的最多路由数,一旦经过一个处理它的路由器,它的值减1,当为0时,数据报就被丢弃,并发送ICMP报文通知   源主机。

协议:识别是哪个协议向IP协议传送数据,包括TCP,UDP,ICMP,IGMP……

首部检验和:根据IP首部计算的检验和码(将该字段置0,对首部中每16bit进行二进制反码求和,结果存在该字段;接收方收到后对首部中没16bit进行二进制反码求和,若结果全为全1,则正确)(注意是对IP首部进行检验,而不是IP首部+IP数据,而UDP的检验和是针对UDP首部+UDP数据)(但是为什么要反码?)

IP地址:32bit,记录格式一般为点分十进制(e.g. 192.168.1.1)

为什么要用反码求和而不是原码求和来检验首部和?

1)首先,我们要明确反码求和和原码求和的区别,反码求和溢出时,即最高位有进位,则将该进位加到最低位上;而原码求和则是丢弃该进位。

2)其次,明确Big Endian字节序和Little Endian字节序:

TCP/IP网络传输时,先传0-7bit,其次8-15bit,然后16-23bit,最后24-31bit(从小到大),这叫网络字节序,也叫Big Endian字节序。

Big Endian字节序:最高字节在地址最低位,最低字节在地址最高位

Little Endian字节序:反之

比如将 0x1234 存入 0x0000 开始的内存

Memery     Big Endian    Little Endian

0x0000     0x12            0x34

0x0001     0x34            0x12

3)那么,使用反码求和就可以不依赖系统是Big Endian字节序还是Little Endian字节序,而原码求和会受到字节序的影响。

4)最后,举个例子就明白了。

原码:

  10000000 00000000

+10000010 00000000

=00000010 00000000

原码,使用另一种字节序:

  00000000 10000000

+00000000 10000010

=00000001 00000010

反码:

  01111111 11111111

+01111101 11111111

=11111101 11111111

反码,使用另一种字节序:

  11111111 01111111

+11111111 01111101

=11111111 11111101

可以看到,反码求和,改变了字节序,结果相同,只是字节顺序相应地也交换了;而原码的结果就不同了。

 

IP路由选择

IP从TCP,UDP,ICMP和IGMP接收数据报(即本地生成的数据)并进行发送,或者从一个网络接口接收数据进行转发或接收。

1)当数据来自TCP,UDP,ICMP和IGMP(从上传递下来的):

传递给链路层

2)当数据报来自网络接口(从下传递上来的):

(1)IP首先判断IP地址是否为本地地址或者广播地址,如果是就送到首部协议段所指定的协议模块进行处理(继续向上传递)

(2)如果不满足这些地址,且IP层设置为了路由功能,那么就对数据报进行转发,否则数据报被丢弃

 

那么,什么叫IP的路由功能呢?有了路由功能怎么对数据报进行转发呢?

当收到一个IP数据报的时候,IP并不知道该数据报达到最终目的的完整路径,所有的IP路由选择只为数据报提供下一站路由器的IP地址,IP的路由选择功能为:

1)搜索路由表,寻找目的IP地址(网络号+主机号),找到则发给该行记录的下一个路由器

2)若1)失败,则继续搜索路由表,寻找目的IP地址的所在网络号,找到则发给该行记录的下一个路由器

3)若2)失败,则继续搜索路由表,寻找叫做“默认”的那行记录,找到则发给该行记录的下一个路由器

4)若3)失败,则该数据报就不能被传送

 

子网掩码

IP地址=网络号+子网号+主机号

子网掩码即与IP地址对应的网络号和子网号为1,主机号为0的32个bit

子网的划分缩减了路由表的规模:

为了到达IP地址为140.252.*.*的主机,路由表现在只需记录到达子网络140.252的下一跳,而不需要记录该子网下的所有主机的下一跳。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值