IP协议(Internet协议)包头/IP分组/IP转发_一个博客id_新浪博客


IP头部:
IP协议(Internet协议)包头/IP分组/IP转发

版本号(Version):一般的值为IPv4,IPv6

IP包头长度(Header Length):这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。IP包头最小长度为20字节。

服务类型(Type of Service):最小延时、最大吞吐量、最高可靠性、最小费用等

IP包总长(Total Length):包括头部和数据,所以IP包最大长度65535字节。由于MTU的限制,最大不超过1500,如果超过就会被分片。

标识符(Identifier):唯一的标识主机发送的一个数据报。但是被分片的数据报每个分片的标识符是一样的

片偏移(Fragment Offset):表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包,除了最后一个分片,其余分片的数据部分长度都要是8的整数倍。

生存时间(TTL):当IP包进行传送时,发送端先会对该字段赋予某个特定的值。
当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。
如果TTL减少为0,则该IP包会被丢弃,并向源端发送一个ICMP差错报文。这个字段可以防止由于路由环路而导致IP包在网络中不停被转发。

协议(Protocol):长度8比特。标识了上层所使用的协议。如TCP UDP 等协议
以下是比较常用的协议号:
 1    ICMP
 2    IGMP
 6    TCP
17   UDP


头部校验 (Header Checksum):用来做IP头部的正确性检测,但不包含数据部分

起源和目标地址(Source and Destination Addresses):标识了这个IP包的起源和目标地址

至此,IP包头基本的20字节已介绍完毕,此后部分属于可选项,不是必须的部分。
如:
  路由记录(Record route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。等


程序:ping    底层由ICMP实现

IP转发:
一般来说,如果IP数据报中的目的IP在同一个局域网或者是点对点的网络,直接交付就好,不需要经过路由器。
否则需要经过路由转发该分组。


路由表/转发表:
1.目的地
2.下一跳:是一台路由器或者主机,数据报将转发到这里。
3.接口:确定数据报发送到下一跳的网络接口

直接转发和间接转发:

    1、路由器从接收到的数据报中抽取目的IP地址D,并计算地址D的网络前缀N,如果在同一个网络中,直接交付

    2、接着,路由器检查路由表,如果表中含有D的一个特定路由,则把数据报发送到表中指定的下一跳,然后退出。否则,转步骤3

    3、路由器检查N是否与路由器的任何一个直接相连的网络地址匹配,如果是的话,则通过该网络把数据报交付给目的站D。否则,转步骤4

    4、路由器检查路由表,看表中是否包含一个针对网络N的路由,如果有的话,则数据报发送到表中致命的下一跳。否则,转步骤5

    5、路由器检查路由表,看表中是否包含一个默认的路由,如果有的话,则把数据报发送到表中指明的默认路由器。否则,转步骤6

    6、路由器将发出一个转发错误

IP协议(Internet协议)包头/IP分组/IP转发

这里要注意,没经过一个路由器TTL要减1,如果为0,那么就将该报文丢弃。





IP分片:

IP分片是网络上传输IP报文的一种技术手段。IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组。
不同的链路类型规定有不同最大长度的链路层数据帧,称为链路层MTU(最大传输单元)。常见以太网的MTU为1500,若IP协议在传输数据包时,IP报文长度大于转发接口的MTU,则将数据报文分为若干分片进行传输,分片报文到达接收方时,由接收方完成重组。
对于不同的传输层协议,在IP层上,需不需要进行分片是不同的:
1:对于TCP来说,它是尽量避免分片的。因为当在IP层进行了分片后,如果其中的某片数据丢失,则需对整个数据报进行重传。因为IP层本身没有超时重传机制,当来自TCP报文段的某一片丢失后,TCP在超时后重发整个TCP报文段,该报文段对应于一份IP数据报,没有办法只重传数据报中的一个数据报片。而且如果对数据报分片的是中间路由器,而不是起始端系统,那么起始端系统就无法知道数据报是如何被分片的,因此基于这种原因,TCP是经常要避免分片的。
那么TCP层是如何避免IP层的分片呢?

首先,TCP在建立连接时会进行3次握手,而在这3次握手中,客户端和服务端通常会协商一个值,那就是MSS(最长报文大小),用来表示本段所能接收的最大长度的报文段。MSS=MTU-TCP首部大小-IP首部大小,MTU值通过查询链路层得知。

当两端确认好MSS后进行通信,TCP层往IP层传输数据时,如果TCP层缓冲区的大小大于MSS,那么TCP层都会将其中的数据分组进行传输,这样就避免了在IP层进行分片。


:2:对于UDP而言,由于UDP是不需要保证可靠性的,没有超时和重传机制,这使得UDP很容易导致IP分片。
那么数据报被分片后是怎样的呢,又是以何种算法进行分片呢?首先我们回忆IP首部:

对于每份IP数据报来说,其16位标识字段都包含一个唯一值。在数据报被分片时,这个值同时被复制到每个片中。

在IP首部中,我们看到有一个占了3位的标志字段,其中第1位作为保留字段;第2位分段用来表示一个数据报是否允许在IP层被分片;而第3位更多分片字段,则是当数据报被分片时,让接收端知道在什么时候完成所有的分片组装,除了最后一片外,其他每个组成数据报的片都要把该比特置1。

而如果将其中的分段标志比特位置1,表示不允许IP层对数据报进行分片。例如当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)的标志比特,路由器会丢弃数据报并发送一个ICMP差错报文(“需要进行分片但设置了不分片比特”)。

IP首部中13位的偏移量字段表示IP分片在整个数据流中的位置,第一个数据报分片的偏移量置为0,而后续的分片偏移量则是根据网络的MTU大小设置,且必须为8的整数倍。

需要注意的是,任何传输层的首部只出现在第一片数据中,后续报文均不带传输层信息

链接:IP分片


重组超时:一个数据报的任何一个分片首先到达时,IP层就得启动一个计时器,否则,不能到达的分片可能会最终导致接收方的缓存用尽。




IP数据报中的一个标志:DF和MF

DF:拒绝进行分片,don't fragment  

MF:多分片,more fragment,该标志除了最后一个分片没有吗,其他分片都有


IP分片的一些细节:

IP协议(Internet协议)包头/IP分组/IP转发



拿ICMP来说明问题:

IP协议(Internet协议)包头/IP分组/IP转发














  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值