TCP/IP第三层协议IP

toc

IP地址

IP地址使用的是点分十进制的方法,地址被.分割成了4个部分,每个部分8bit,整个IP地址32位。

CIDR(无类型域间路由 Classless Inter-Domain Routing)

使用 / 将IP地址一分为二,前面部分为网络号,后面部分为主机号
当拥有相同的网络地址,且主机号部分全为二进制1时,,该地址就成了该网段的广播地址
当网络号全为二进制1,且主机号为0时,则是该网段的子网掩码

IP协议

IP是TCP/IP协议中最为核心的协议,TCP(Transmission Control Protocol 传输控制协议)、UDP(User Datagram Protocol 用户数据报协议)、ICMP(Internet Control Message Protocol 互联网控制报文协议)、IGMP(Internet Group Management Protocol 互联网组管理协议)数据都以IP数据报格式传输
IP提供不可靠的、无连接数据报传送服务:

  • 不可靠是指IP协议不能保证IP数据报一定能成功到达目的地,但当报文在传输中出现错误不能到底目的地址时,会产生一个ICMP报文向源主机传达出错报告控制信息。如果想要可靠性,需要上层协议来提供。
  • 无连接IP协议不会维护任何关于后续数据报的状态信息。且每个数据报是相互独立的。因为每个数据报可以独立的进行路由选择的原因,IP数据报不一定会被按照发送的顺序接收

协议格式

ip
IP首部固定是20字节,选项部分最长不超过40字节,每个部分依次是:

  • 4位版本:4为IPV4.
  • 4位首部长度:首部长度指的是首部占32bit字的数目,包括任何选项。它是一个4比特字段,当4个比特全为1时,即1111(十进制为15)时,首部长度可达最长的60个字节。
  • 服务类型(TOS):服务类型字段包括一个3bit的优先权字段(现在已经被忽略),4bit的TOS子字段和1bit未用位必须置0。4bit的TOS分别代表:最小时延,最大吞吐量,最高可靠性和最小费用。4bit中只能置其中1比特。如果所有4bit均为0,那么就意味着是一般服务。
  • 总长度:总长度字段是指整个IP数据报(包含首部与数据)的长度,以字节为单位。利用首部长度和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16bit,所以IP数据报最长可达65535字节。当数据报被分片时,该字段的值也随着变化。
  • 16位标识位:标识字段唯一地标识主机发送的每一份IP数据报。通常每发送一份报文它的值就会加1。当IP数据报被分片时,依靠此字段识别每一份属于哪个数据报,用户组装IP数据报。
  • 3位标志位:仅有后两位有用, 标志字段中间的一位是 DF (Don't Fragment) 只有当 DF = 0 时才允许分片,最后一位是MF (More Fragment),MF为1表示后面“还有分片”,MF为 0表示这是最后一个分片。
  • 13位片偏移:用来指定被分片在原IP数据报相对用户数据起点的位置,片偏移以8个字节为偏移单位。除了最后一个分片,每个分片(除IP首部之外的用户数据部分)的长度一定是8字节(64位)的整数倍
  • 生存时间:T T L(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。T T L的初始值由源主机设置(通常为 3 2或6 4),一旦经过一个处理它的路由器,它的值就减去 1。当该字段的值为 0时,数据报就被丢弃,并发送 I C M P报文通知源主机。
  • 8位协议位:用于指明上层协议
ICMP1
TCP6
UDP17
GRE47
ESP50
AH51
  • 首部检验和:首部检验和字段是根据 I P首部计算的检验和码。它不对首部后面的数据进行计算。 I C M P、
    I G M P、U D P和T C P在它们各自的首部中均含有同时覆盖首部和数据检验和码。
  • 源IP地址
  • 目标IP地址
  • 数据

IP分片

IP数据报在传输时,当它的大小大于了MTU时,会被分片,分片的过程可能发生在原始的发送端主机上,也可能发生在中间路由器上。而且当遇到有着更小MTU的中间路由器时,已经被分片的数据报还可能会被再次分片。
被分片的数据报只有到了接收端时,才能被接收端的IP层进行组装处理,并且这一组装的过程对上层的TCP或UDP来说时透明的,也就是说,TCP与UDP根本不知道IP数据报存在分片与组装的过程。

重组的依据

16位标识CUDFMF13位片偏移
  • 标识:发送端发送的每一个IP数据报都拥有一个唯一的16位标识,当发生分片时,这个唯一的标识被复制到该数据报的每个分片中,此标识符可以在组装数据时确定收到的分片属于哪个IP数据报。
  • 标志:在3位标志位中,CU位没有被使用。DF位为1时将不会对数据报分片,当数据报大于MTU大小时,将产生一个"需要进行分片但设置了部分片"的ICMP报文传回给发送端。MF位表示分片是否到了最后一片,除最后一片分片外,所有分片的MF位都被置为了1,最后一个分片被置为了0,在组装时可以通过这个字段知道分片是否是最后一个分片。
  • 片偏移:13位的片偏移表明该分片相对于原始数据报起始处的位置,通过这个可以知道分片在原数据报中的位置,以在组装时能正确的组装。

分片与重组

当IP数据报被分片后,每一片分片都成为一个分组(分组的概念:在IP层和链路层间传送的数据单元,一个分组可以是完整的IP数据报,也可以是IP数据报的一个分片),每片都有自己的首部,可以独立选择路由,所以当分组到达目标主机后可能会失序。依靠每个分组中的IP首部可以组装IP数据报。

如图,每个组片都有自己的IP首部,由于MTU最小长度的限制,最后一片不满46的分组还会存在PAD(填充)。图中的第二片存在46 - 20 - 1 = 25字节
虽然IP在每个分组都有IP首部,但是由于上层协议(TCP/UDP)的目标端口与源端口都在首部开始的4字节内,因此当出现分片时,端口号仅仅出现在第一个分组中。(图中就说明了这种情况)

注意事项

  • 虽然IP层的分片是透明的,但是由于IP协议不提供可靠的服务,当出现分片丢包时,IP不会重传分片,接收端也就没法组装成一个完整的IP数据报。必须要重装整个原数据报才可以。
  • 当上层有重传机制的TCP协议协议通过IP数据报文通信,并且发生分片且分片丢失时,由于分片对传输层的透明性,也只能重传整个TCP的数据包。

在数据传输的过程中,每个IP数据报中的源IP地址与目标IP地址会保持不变(除非有NAT存在),而MAC在每一跳中都会改变,源MAC为出口物理地址,目标MAC为路由下一跳的物理地址。

相关知识

典型的三层设备是路由器





posted @ 2020-11-17 15:33  無雙  阅读(830)  评论(0编辑  收藏  举报