《TCP/IP详解 卷一》读书笔记-----UDP&IP 分片

1、进程每产生一个UDP数据报就由一个IP数据报进行发送,而在TCP中,一个IP数据报并不与每个TCP报文段一一对应

2、UDP的端口号和TCP的端口号是相互独立的,对那些众所周知的端口号TCP和UDP往往是相同的,仅仅只是为了方便而已,并不是必须的

3、UDP checksum:对于检验和字段,TCP是必须的,而UDP是可选的,至于计算方法和IP检验和的计算方法相同,并且它校验的是整个UDP数据报而非仅仅只是一个头部。因此整个UDP数据报的长度必须是偶数个字节的,因为校验和字段的长度是16位。对于奇数字节长度的UDP要在末尾补上一个空白字节(该字节并不参与传输)。同时,在校验过程中,除了校验UDP自身的数据以外,还要加上一个如下图所示的伪头部,其目的是为了确定数据到达了正确的目的地。如果经检验字段检验,数据出错了,那么目的主机会直接丢弃该数据报并且不会返回错误信息

4、IP fragmentation:当网络层准备发送IP数据报时,它首选决定从那个网卡进行发送,然后询问该网卡的MTU(最大传输单元,可以理解为最大的IP数据报的大小)。然后根据MTU决定是否进行分片,当然分片操作既可以在发送终端进行也可以在所经过的路由器上进行,这也就是说已经被分片的IP数据报在经过中间路由器之后仍然可能被再次分片。并且这些分片只在到达目的主机后,根据分片头部的内容进行重组。在重组过程中,一旦其中一个分片丢失,那么整个IP数据报都将被重传。

5、IP数据报头部中用于标识分片的字段有:identification字段用于标识唯一的一个IP数据报,而且该字段会被拷贝进每一个分片中,此字段相同的分片才能被重组;flags字段中的“more fragments”位用于表示该分片是否是最后一个分片;“offset”字段用于表示该分片内容相对于原始数据报的偏移量,例如第一个分片,该字段的内容就为零,然后依次类推;分片中的“total length”字段也再表示原始IP数据报的总长度,而是表示当前分片的长度。最后,flags字段中有一个“don't fragment”位,该位置1说明该数据报不支持分片,如果要进行分片操作,该数据报会被丢弃,然后返回一个error ICMP

6、有时一个数据报中的分片丢失导致整个IP数据报被丢弃时,接收方并不会产生一个error ICMP。原因在于1)可能相应的协议实现本来就不产生此类的错误,2)丢失的是整个IP数据报中的第一个分片,因为其中包含了相应传输层的头部,如果没有这个信息,返回错误也是没有意义的。这个时候就只能依赖上层的超时重传机制了。

7、通常主机被要求至少能接收大小为576个字节的IP数据报,因此很多UDP类型的应用都会将它们的数据限制到512个字节以下,从而尽量避免不被分片。

8、ICMP Source Quench Error:当系统接收UDP数据报的速度大大超过处理速度时,就会发出这种类型的error ICMP。不过现在的看法是,没有必要发送这种类型的error ICMP,它既消耗网络带宽,又对控制拥塞无益,因为错误信息到达源主机时,发送数据的进程往往已经结束了。

9、大多数的UDP 服务器都是iterative server,即只有单一的服务器进程来处理所有的请求。通常请求都会按照先进先出的顺序被放在UDP的请求队列中,然后由服务器进程依次进行处理。如果队列已满,那么新来的请求默认就会被丢弃。这种处理方式和多线程的并行服务器是完全不同的。

posted on 2015-10-19 10:47  姚灯灯!  阅读(862)  评论(0编辑  收藏  举报

导航