《计算机网络——自顶向下方法》精炼——4.4.3-4.4.5

学习是终身的职业。在学习的道路上,谁想停下来就要落伍。

文章目录

  • UPnP
  • 因特网控制报文协议(ICMP)
  • IPv6
    • IPv6数据报格式
    • IPv4到IPv6的变革

UPnP

通用即插即用(UPnP)提供了一种让外部网络的主机与NAT内主机交换数据的方式。如果主机和NAT都是UPnP兼容的,那么主机上的应用程序可以向NAT请求一个从(专用IP地址,专用端口号)到(公共IP地址,公共端口号)的映射。如果映射成功生成,外部的主机可以发起到(公共IP地址,公共端口号)的TCP连接。此外,UPnP告诉应用程序(公共IP地址,公共端口号),以便应用程序向外部网络通告它。

因特网控制报文协议(ICMP)

ICMP是因特网网络层的3个主要组件之一。ICMP报文有一个类型字段和一个编码字段,这两个字段用于确定ICMP报文的类型,并包含引起该报文首次生成(即差错或有特殊需求)的IP数据报的首部和前8字节,用于让发送方确定出现差错或有特殊请求的IP数据报。
ICMP报文作为一个IP数据报的数据字段被发送,这个IP数据报指明上层协议为ICMP(就像指明是TCP或UDP报文一样),收到该数据报的主机将ICMP报文的内容分解出来给上层协议ICMP。因此,从体系结构来说ICMP协议位于IP协议之上。
下表展示了ICMP的报文类型:
《计算机网络——自顶向下方法》精炼——4.4.3-4.4.5_第1张图片
可以看到,当报文类型相同时,编码字段才起到作用,否则编码字段一致为0。有两种需要特殊解释的ICMP报文:

  • 类型字段为8,编码字段为0的回显请求,ping程序用的就是这种ICMP报文,接收方收到这个报文后,回送一个类型字段为0,编码字段为0的回显回答。
  • 类型字段为4,编码字段为0的源抑制报文,这个报文用于强制发送方主机降低发送速率以进行拥塞控制。

第1章中介绍的Traceroute程序可以用于跟踪运行该程序的主机到任意另一台主机发送数据时经过的路径,这个程序用ICMP报文实现,它向另一台主机发送多个承载ICMP报文的数据报,第一份数据报的TTL为1,第二份的TTL为2,以此类推。TTL是寿命字段,每经过一个路由器,该字段值减一当报文到达一个路由器,路由器发现该报文的TTL字段为0时,则丢弃该报文并向源主机发送一个ICMP告警报文,报文中包括了该路由器的名字和IP地址。因此随着所有告警报文都到达源主机,主机能得知路径上所有路由器的名字和IP地址。最终如果有一个ICMP报文到达了目的主机,由于这个报文要发送给一个不可达的端口号,于是目的主机回送给源主机一个端口不可达的ICMP报文,当这个特别的报文到达源主机时,源主机知道已经到达目的主机,不需要发送其他的ICMP报文。在实践中,该程序每次发送3个相同TTL字段的ICMP报文。

IPv6

为了应对IPv4的可用地址块被分配殆尽的情况,IPv6随之产生。

IPv6数据报格式

《计算机网络——自顶向下方法》精炼——4.4.3-4.4.5_第2张图片
相较于IPv4,IPv6的变化有:

  • 地址长度由32比特扩大到128比特,引入任播地址,这种新型地址可以使数据报交付给一组主机中的任意一个。
  • 首部长度固定为40字节。舍弃了各个选项字段,进行新的选项编码方式。
  • 流标签与优先级。流标签为“属于特殊流”的分组打上标签,特殊流即需要特殊服务的连接,比如需要实时服务的连接会被看做一个特殊流。优先级由首部中一个8比特的流量类型字段提供,它为来自同一个流的分组分出优先级。

IPv6中定义的字段有:

  • 版本字段。
  • 流量类型字段:提供优先级信息。
  • 流标签。
  • 有效载荷长度字段:给出数据字段的长度。
  • 下一个首部:标识这个数据报的上层协议。
  • 跳限制:TTL字段。
  • 源地址和目的地址。
  • 数据字段。

秉承着“快速处理IP分组”的初衷,IPv6相比IPv4减少了三个字段:

  • 分片相关字段。IPv6不允许分片,只能在端系统上对数据报进行分片处理,在链路中如果某个路由器发现下一个链路不足以发送这么大的数据报,它直接丢弃该数据报并返回差错报文。不进行分片操作有利于加快传输速度。
  • 首部检验和:计算检验和是一个非必要且耗时的操作,因此将其删去是可以理解的。
  • 选项:删去选项字段使IP数据报首部变为定长,有效加快了处理。作为补偿,他可能出现在“下一个首部”字段中。如果“下一个首部”指出的是上层协议,那么类似于协议字段;如果指出的是扩展首部,那么就指向扩展首部字段(存储于数据字段中,类似于选项)。

IPv4到IPv6的变革

一个难题是在不影响IPv4流通的情况下引入IPv6使能结点,因为IPv4应用广泛,且两代数据报解读方式不同。有两种方式解决这个问题:

  • 双栈方法。使用这个方法的结点同时有IPv6和IPv4实现,在与只能解析IPv4数据报的结点来说,就使用IPv4协议其他情况下使用IPv6协议。
  • 建隧道。如果两个IPv6结点之间用IPv4结点连接,那么发送方IPv6结点发送一个IPv4报文,然后将整个IPv6报文作为数据字段放入其中。接收方IPv6结点收到报文后将其中的IPv6报文取出进行修改和传输。

请添加图片描述
我是霜_哀,在算法之路上努力前行的一位萌新,感谢你的阅读!如果觉得好的话,可以关注一下,我会在将来带来更多更全面的知识讲解!

你可能感兴趣的:(计算机网络,网络,tcp/ip)