TCP/IP协议族学习(三):IP协议、ICMP协议

一、IP协议

IP是TCP/IP协议族中最为核心的协议,所有的TCP,UDP,ICMP以及IGMP数据都以IP数据报格式传输。
IP提供不可靠、无连接的数据报传送服务:
  • 不可靠(unreliable)是指它不能保证IP数据报能成功到达目的地,如发生错误,IP就丢失该数据报,然后发送ICMP消息报给信源端,任何要求的可靠性必须由上层(如TCP)来提供
  • 无连接(connectionless)是指IP并不维护任何关于后续数据报的状态信息,每个数据报的处理是相互独立的,也就是说,IP数据报可以不按发送顺序接受

IP数据报格式

     IP数据报格式:最长为60字节,其中固定IP首部长20字节,选项字段为40字节。
     网络传输时以big endian字节序传输,即首先是高位0-7bit,最后是24-31bit。

  • 协议版本号:IPv4:4, IPv6:6
  • 首部长度:首部占32bit字的数目,包括选项,最大值为15,即首部最长为60字节,包括IP首部长20字节以及最大40直接的选项字段。
  • 服务类型(TOS):已被替换为两个字段:6位区分服务码点和2位显示拥塞通知,可使用IP_TOS套接字选项设置该字段。
  • 总长度字段是指包括IP数据报首部的整个IP数据报的长度,以字节为单位。
  • 标识字段:唯一标识主机发送的每一份数据报,通常每发送一份报文它的值就会加1,用于数据报分片和重组。
    • 该字段必须就源IPv4地址,目的IPv4地址和协议这三个字段至少在数据报的网络存活期唯一标识每个IP数据报,如果分组不会被分片(设置了DF),那么不需要此字段。
  • 3位标志和13位片便宜:3为标志:0,DF(don't fragment,不要分片),MF(more fragments,还有分片),也用于分片和重组。DF位还用于路径MTU发现。
  • TTL(time-to-live)生存时间字段:设置了数据报可以经过的最多路由器数,它指定了数据报的生产时间。TTL初始值由源主机设置(通常为32或64),没经过一个处理它的路由器就减1,减为0时该数据报被丢弃,并发送ICMP报文通知源主机。
  • 8位协议字段:用来识别是那个协议向IP传送数据。
  • 16位首部校验和:根据IP首部计算的校验和码,它不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP在它们各自的首部均含有同时覆盖首部和数据的校验和码。
  • 32位源IP地址和32位目的IP地址。
  • 选项:可变长的可选信息,很少用,以32bit为长度单位。

IP路由选择

IP层即可以配置成路由器的功能,也可以配置成主机的功能。区别在于主机从不把数据报从一个网络接口转发到另一个网络接口,而路由器则要转发数据报。
IP一般从本机上层协议:TCP,UDP,ICMP和IGMP接收数据报进行发送,或者从一个网络接口接收数据报进行转发。IP层依据内存中的路由表进行数据转发,当收到一份数据报进行发送时,都要对该路由表进行搜索。
路由表包含的信息:
  • 目的IP地址:既可以是主机地址,也可以是网络地址(主机号为0),由下面的标志字段来指定。
  • 下一站路由器的IP地址:下一站路由器是指一个直接相连网络上的路由器,通过它可以转发数据报。下一站路由器不是最终目的,但是它可以把传送给它的数据报转发到最终目的。
  • 标志:指明目的IP地址是网络地址还是主机地址;下一站路由器是否为真正的下一站路由器,还是一个直接相连的网络接口。
  • 为数据报的传输指定一个网络接口。
IP路由选择主要完成以下功能:
  • 特定主机匹配:搜索路由表,寻找能与目的IP地址完全匹配的标目(网络号和主机号都要匹配),如果找到,则把报文发送给该标目指定的下一站路由器或直接相连的网络接口(取决于标志字段的值)。
  • 网络号匹配:搜索路由表,寻找能与目的网络号相匹配的标目,如果找到,则把报文发送给该表目指定的下一站路由器或直接相连的网络接口(取决于标志字段的值)。目的网络上的所有主机都可以通过该表目来处置。
  • 默认路由:搜索路由表,寻找标为默认的标目,如果找到,则把报文发送给该表目指定的下一站路由器。
  • 如果以上都未成功,则该数据报就不能发送,如数据报来自本机,则会向应用程序返回一个“主机/网络不可达”错误。
对于主机来说,如果目的主机与源主机字节相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接送到目的主机上,否则,主机把数据报发往一默认的路由器上,由路由器转发该数据报。
     在进行路由决策时,主机和路由器都使用路由表,路由表中有三种类型的路由:特定主机型,特定网络型和默认路由型。选择路由时,主机路由优先于网络路由,最后在没有其他可选路由存在时才选择默认路由。

二、ICMP协议

ICMP通常被认为是IP层的一个组成部分,它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议(TCP或UDP)使用,一些ICMP报文把差错报文返回给应用程序。
ICMP虽然被认为是属于IP层,但ICMP报文和TCP,UDP一样是通过IP数据报进行传输的。


ICMP报文格式



  • ICMP报文类型由报文中的类型和代码字段共同决定。
  • 检验和字段覆盖整个ICMP报文。
ICMP报文分查询报文和差错报文,因为对ICMP差错报文有时要做特殊处理。
当发送一份ICMP差错报文时,报文始终包含IP的首部(含有协议字段)和产生ICMP差错报文的IP数据报的前8个字节(TCP或UDP报文首部,含有端口号可判断用户进程),这样,接收ICMP差错报文的模块就可以把它与某个特定的协议和用户进程联系起来。

下面情况不会导致产生ICMP差错报文(防止允许ICMP差错报文对广播分组响应所带来的广播风暴):
  • ICMP差错报文。(但是,ICMP查询报文可能会产生ICMP差错报文)
  • 目的地址是广播地址或多播地址的IP数据报。
  • 作为链路层广播的数据报。
  • 不是IP分片的第一片。
  • 源地址不是单个主机的数据报。即源地址不能为零地址,环回地址,广播地址或多播地址。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值