TCP/IP-UDP

TCP/IP-UDP

作者:Danbo 2015-8-22

U D P是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个U D P数据报,并组装成一份待发送的I P数据报(应用层交给我多少数据我就打多大的包交给IP层)。这与面向数据流的协议不同,如T C P,应用程序产生的全体数据与真正发送的单个I P数据报可能没有什么联系。因此正常情况下UDP是会分片的而TCP不分片。

U D P不提供可靠性:它把应用程序传给I P层的数据发送出去,但是并不保证它们能到达目的地。由于缺乏可靠性,我们似乎觉得要避免使用U D P而使用一种可靠协议如T C P。

应用程序必须关心I P数据报的长度。如果它超过网络的M T U,那么就要对I P数据报进行分片。如果需要,源端到目的端之间的每个网络都要进行分片,并不只是发送端主机连接第一个网络才这样。

UDP首部

UDP校验和

 

U D P和T C P在首部中都有覆盖它们首部和数据的检验和。U D P的检验和是可选的,而T C P的检验和是必需的。
U D P数据报的长度可以为奇数字节,但是检验和算法是把若干个16 bit字相加。解决方法是必要时在最后增加填充字节0,这只是为了检验和的计算(也就是说,可能增加的填充字节不被传送)。

U D P数据报和T C P段都包含一个1 2字节长的伪首部,它是为了检验而设置的。伪首部包含I P首部一些字段。其目的是让U D P两次检查数据是否已经正确到达目的地作用:1.第二次检查该数据报是不是发给本机。2.依据伪首部的协议字段检查是不是发给UDP的)。

BGP穿越PIX防火墙建立邻居的时候要关闭TCP序列号扰乱功能,否则建立不了邻居。并且BGP会把HMAC计算后的值存在TCP的Option选项中,而防火墙默认是过滤掉这个选项字段(IP和TCP)的,因此我们还需要关掉防火墙过滤Option选项的功能。

IP分片

物理网络层一般要限制每次发送数据帧的最大长度。任何时候I P层接收到一份要发送的I P数据报时,它要判断向本地哪个接口发送数据(选路),并查该接口获得其M T U(出接口)。I P把M T U与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。把一份I P数据报分片以后,只有到达目的地才进行重新组装。重新组装由目的端的I P层来完成,其目的是使分片和重新组装过程对运输层( T C P和U D P)是透明的。

IP头部中起到分片作用的字段:

当I P数据报被分片后,每一片都成为一个分组,具有自己的I P首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时有可能会失序,但是在I P首部中有足够的信息让接收端能正确组装这些数据报片。即使只丢失一片数据也要重传整个数据报。因为分片对于TCP来说是透明的,TCP只能对整个数据报来进行确认。注意:只有第一个分片有四层头部(即一些端口号信息)。在IP分片时,除最后一片外,其他每一片中的数据部分必须是8字节的整数倍

当DF位置位时,并且数据包超过出口MTU时就会产生ICMP不可达差错(需要分片),其格式如下:

如果路由器没有提供这种新的I C M P差错报文格式,那么下一站的M T U就设为0。

猜你喜欢

转载自blog.csdn.net/luo809976897/article/details/54020817