读《TCP/IP详解》 第3章:IP:网际协议

本文详细介绍了IP协议的核心概念,包括其不可靠、无连接的特点,IP数据报格式与字段解释,如版本号、首部长度、服务类型等。此外还探讨了IP选路过程及常用网络命令的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP/IP详解是一本经典的书,以前粗略的看过一点,但是以前没有写博客的习惯,所以没做什么笔记,看过之后不久,也就忘记了。现在重新阅读该书,记记笔记,方便自己以后查阅。

第三章讲的是IP协议,IP协议是TCP/IP协议族中最核心的东西。所有TCP、UDP、ICMP、IGMP数据都以IP数据报格式传输,IP协议的特点是不可靠、无连接。

  1. 不可靠:指IP协议不保证数据报能成功到达目的地。可靠性必须由上层来提供
  2. 无连接:指IP协议不维护任何关于后续数据报的状态信息,每个数据报的处理是独立的。IP数据报可不按顺序接收。

IP报首部
从图上可以知道,除去长度可变的可选字段之外,IP报头总花是20个字节。

  • 大端序(big endian):数据的高位字节存放在地址的低端,低位字节存放在地址的高端,由于在网络上传输都要求以大端序传输,所以大端序又称网络字节序
  • 小端序(little endian):数据的低位字节存放在地址的低端,高位字节存放在地址的高端,在网络中传输时,必须将其转换成网络字节序

IP报头格式说明如下:
1. 版本号为4,因为当前使用广泛的主要还是IPv4
2. 首部长度指是是首部占32位的数目,包括任何选项。不包含任何选项的IP数据报首部长度值是5
3. 服务类型(TOS)包含3 bit的优先权子字段,4 bit的TOS子字段和1 bit未用位但必须置0,4 bit的TOS分别代表:最小时延,最大吞吐量、最高可靠性和最小费用。4 bit互斥,只能在同一时间设置其中一位。
4. 总长度指的是整个IP数据报的长度,以字节为单位。利用首部长度和总长度就可以知道IP数据报中数据内容的起始位置和长度。
5. 标识字段唯一的标识主机发送的每一份数据报,通常每发送一份报文它的值就会加1.
6. TTL,生存时间,设置了数据报可以经过的最多跳数。IP数据报每经过一跳,它的值就减1,当该字段为0时,数据报就会被丢弃,并向源主机发送ICMP。Traceroute程序就是通过一步一步增加TTL,解析返回的ICMP来追踪路由的。
7. 首部检验和是根据IP首部计算的检验和码,不对首部后面的数据进行计算,当目的主机接收到IP数据报的时候,会重新计算一次检验和,如果和当前IP数据报中的检验和一致,则说明数据传输无误。否则丢弃该数据报。
8. 源地址和目的地址字段分别记录了源主机的IP地址和目的主机的IP地址。
9. 选项字段,是一个可变字段,这些选项在实际使用中很少被使用,目前这些选项定义如下:

  • 安全和处理限制
  • 记录路径
  • 时间戳
  • 宽松的源站选路
  • 严格的源站选路

IP首部的定义可用C语言中的struct来表示:
IP报头

IP选路主要是根据路由表中的纪录来进行的,在*nix或Windows中,可以使用netstat -r命令来查看路由表:
netstat -r 显示
路由表中的每一项都包含以下这些信息:

  • 目的IP地址:既可以是一个完整的主机地址,也可以是一个网络地址,如上图中的Destination字段
  • 下一跳IP地址或者有直接连接的网络IP地址:下一跳是指一个在直接相连网络上的路由器,通过它可以转发数据报。下一跳并不是最终目的,但通过它可以转发到最终目的地。
  • 标志:其中一个标志指明目的IP地址是网络地址还是主机地址,另一个标志指明下一跳是否为真正的下一跳,还是一个直连接口。如上图的Flags字段

IP选路是逐跳进行的,从上图中可以看到,IP并不知道到达任何目的地的完整路径,除了那些与主机直接相连的目的,所有IP跳由只为数据传输提供下一跳IP地址

IP选路主要完成以下功能:

  • 搜索路由表,寻找能与目的IP完全匹配的条目,如果找到,则把报文发送给该表目指定的IP地址或接口。
  • 搜索路由表,寻找能与目的网络号相匹配的条目,如果找到,则把报文发送给该条目指定的下一站路由或网络接口。
  • 搜索路由表,寻找标为”默认(default)”的条目,如果找到,把报文发送给该表目指定的下一站路由。

子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。(子网掩码-摘自百度百科

ifconfig命令:用于对网络接口进行配置和查询,运行示意图如下所示:
ifconfig

netstat命令:该命令也提供系统上的接口信息。-i选项将打印出接口信息,-n选项则打印出IP地址,而不是主机名字。如下示意:
netstat -an
在OS X上,依次打印出每个接口的名字,MTU值,输入分组数,输入错误,输出分组数,输出错误,冲突及当前的输出队列长度等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值