tcp/ip详解(8-13)

来源:互联网 发布:新浪网络猫耳宝贝 编辑:程序博客网 时间:2024/06/06 23:17
traceroute程序使用ICMP报文和IP首部中的TTL字段。


当路由器收到一份IP数据报,如果其TTL字段是0或1,则路由器不转发该数据报(通常情况下,系统不应该接收TTL字段为0的数据报)。相反,路由器将该数据报丢弃,并给信源机发一份ICMP“超时”信息。traceroute程序的关键在于包含这份ICMP信息的IP报文中信源地址是该路由器的IP地址。


traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口。因此,当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP报文。这样,traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。


traceroute程序对于每个TTL值,发送3份数据报。每接收到一份ICMP报文,就计算并打印往返时间。如果5秒钟内未收到响应,则打印一个星号。





IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。这区别于选路策略,它只是一组决定把哪些路由放入路由表的规则。IP执行选路机制,而路由守护进程则一般提供选路策略。


netstat -r的输出中,flags的含义: U:该路由可以使用。G:该路由是到一个网关。H:该路由是到一个主机。D:该路由是由重定向报文创建的。M:该路由已被重定向报文修改。


当路由器收到一份IP数据报但又不能转发时,就要发送一份ICMP“主机不可达”差错报文。


当IP数据报应该被发送到另一个路由器时,收到数据报的路由器就要发送ICMP重定向差错报文给IP数据报的发送端。



重定向报文是为主机而不是为路由器使用的。




自治系统内部的选路协议称为IGP,常用的有RIP,OSPF。
自治系统之间的选路协议称为EGP,常用的有BGP。




由于IP层已经把IP数据报分配给TCP或UDP(根据IP首部中协议字段值),因此TCP端口号由TCP来查看,而UDP端口号由UDP来查看。TCP端口号与UDP端口号是相互独立的。


IP首部的检验和只覆盖IP首部部分。
TCP和UDP首部的检验和覆盖它们首部部分以及数据部分。


任何时候IP层接收到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据,并查询该接口获得其MTU。IP把MTU与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。
把一份IP数据报分片以后,只有到达目的地才进行重新组装。


IP首部的“标识”,“标志位”,“片偏移”字段用于IP分片。
分片后每个IP数据报片的标识相同。
“标志位”有“更多分片”、“不分片”位。接收端根据“更多分片”这个标识位来决定何时完成所有的分片组装。
片偏移字段指的是该片偏移原始数据报开始处的位置。


当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据报片。


对于IP数据报分片来说,即使只丢失一片数据也要重传整个数据报。
有没有办法只重传数据报中的一个数据报片?事实上,如果对数据报分片的是中间路由器,而不是起始端系统,那么起始端系统就无法知道数据报是如何被分片的。就这个原因,经常要避免分片。


使用UDP很容易导致IP分片。TCP本身会试图避免分片。


任何运输层首部只出现在第1片数据中。


重申几个术语:
IP数据报是指IP层端到端的传输单元(在分片之前和重新组装之后),分组是指在IP层和链路层之间传送的数据单元。一个分组可以是一个完整的IP数据报,也可以是IP数据报的一个分片。


发生ICMP不可达差错的另一种情况是,当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)的标志比特。如果某个程序需要判断到达目的端的路途中最小MTU是多少----称作路径MTU发现机制,那么这个差错就可以被该程序使用。


现在许多但不是所有的广域网都可以处理大于512字节的分组。利用路径MTU发现机制,应用程序就可以充分利用更大的MTU来发送报文。


在第一个数据报片出现时,IP层必须启动一个定时器。这里“第一个”表示给定数据报的第一个到达数据报片,而不是第一个数据报片(数据报片偏移为0)。正常的定时器为30或60秒。如果定时器超时而该数据报的所有数据报片未能全部到达,那么将这些数据报片丢弃。如果不这么做,那些永远不会到达的数据报片迟早会引起接收端缓存满。
0 0
原创粉丝点击