IP与UDP协议解析

1.IP协议

IP协议是TCP/IP协议族中的核心协议。TCP、UDP、ICMP和IGMP数据都通过IP数据传输。IP协议提供了一种尽力而为、无连接的数据包交付服务。“无连接”意味着IP协议是不维护网络单元中数据报相关的任何链接状态信息,每个数据报独立于其他数据报处理,这就意味着IP数据报可不按顺序交付

主要说一下IPv4

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OKuBerer-1572850855124)(./resources/image/02/02-2.jpg)]

固定头部分为20B,可选长度最长为40B,所以头部长度在20~60B

通过wireshark抓包工具,我随机选了一个较短的UDP报文(16进制),进行分析。
(为了方便分析,我加入了‘[’、‘]’、‘|’符号,加以区分)

[1c 4d 70 3a 52 c3|d8 ce  3a 8c d6 51|08 00][45|68|
 00 7e|00 00|40 00|33|11| f2 28|70 50 f8 87|c0 a8
 2b 5e]22 7d 1d 69 00 6a  09 82 a1 12 3a 05 5d b9
 76 14 00 10 40 07 02 00  00 02 02 28 13 00 14 76
 b9 5d 20 00 00 00 00 00  00 42 49 17 a2 5b 6a 5e
 c3 d8 92 9c d1 5c fb 92  9d ff e2 35 0e c8 eb 19
 d6 57 2c 6b b7 67 f2 82  e1 8c ae a6 ae 63 73 eb
 6d ab a6 b8 a7 69 eb 2f  4d 6a 0b 86 59 c0 a1 dc
 53 99 90 19 0f c7 0c 11  2d e1 f1 20

简要介绍一下,前14个字节为以太网帧的首部,前6个字节为远程MAC地址(1c:4d:70:3a:52:c3),紧接着6个字节为源MAC(d8:ce:3a:8c:d6:51),0800表示IPv4协议

  1. 版本号:4bytes。IPv4为4,IPv6为6,例子:0x4H(0100b)

  2. 首部长度(IHL): 4bytes,记录头部长度,以32位(4B)计为一个,例如:0x5H(0101b)
    5 ∗ 4 = 20 B 5 \ast 4=20B 54=20B
    该IP的头部有20个字节,也是一般情况下的IP头部字节数。
    注意:IHL解释了最大的头部数为60个字节,且填充位的存在目的,使能够头部位数满足是32位的倍数

  3. 区分服务(DS和ECN):8bytes。DS为区分服务字段(6bytes),ECN为显示拥塞通知(2bytes)。DS代表了不同的QoS(服务质量)策略,ECN代表类在拥塞时做出的不同策略。例如:0110 10(Differentiated Services Codepoint:Assured Forwarding 31)和00
    ECN对报文在路由器中转发策略的影响:
    1、当拥塞发生时,针对ECN=00的报文,走原有普通非ECN流程,即,进行RED丢包。
    2、当拥塞发生时,针对ECN=01或ECN=10的报文,都需要修改为ECN=11,并继续转发流程。
    3、当拥塞发生时,针对ECN=11的报文,需要继续转发。

    CTCEName
    00Not ECT
    01ECT(1)
    10ECT(0)
    11CE

    如果你想知道:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lKwD8GFJ-1572850855127)(./resources/image/02/02-4.PNG)]

  4. 总长度:16bytes。IPv4数据报的总长度(以字节为单位,包括头部和数据)。例如:0x007eH.
    注意:总长度限制了数据报的最大长度为,65535个字节。

  5. 标识:16bytes。例如:0x0000H.
    发送主机通常在每次发送数据报时将一个内部计算器加1,并将此值赋给标识字段。IP是无连接服务,该字段不是为了表明顺序,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中,等到重组的时候,相同标识符的值的数据报就会被重新组装成一个数据报

  6. 标志:3bytes。用于分片。例如:010b.
    低位(最右)叫做MF(More fragments):取零表示这是最后一个分片了,取1表示后面还有若干个数据。
    中间位叫DF(Don’t fragments):表示不进行分片。
    最高位(最左):保留位,还未使用。

  7. 片偏移:13bytes。例如:0 0000 0000 0000b
    在数据报分片后,该片在分组中的相对位置,片偏移以8B为基本单位。说明,分片的长度必须都是8B的整数倍。

  8. 生存周期(TTL):8bytes。例如:0x33H。数据报在网络中的寿命,为数据报经过路由器的数据量,每经过一个路由器,该值就减一,到零则视为不可达,被抛弃。

  9. 协议:8bytes。例如:0x11H(17,为UDP协议).指明上层协议,即数据部分携带的是哪种协议的数据。常见17(UDP)和6(TCP)

  10. 首部检验和:16bytes。例如:0xf228。用于校验数据报的首部,注意是没有数据部分的,IP数据报是不检测数据部分的正确性的。
    检验和算法:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IAwGYTHf-1572850855128)(./resources/image/02/02-3.png)]

  11. 源IPv4地址:32bytes。例如:0x7050f887H(112.80.248.135)

  12. 目标IPv4地址:32bytes。例如:0xc0a82b5e(192.168.43.94)
    注意:先源地址后目标地址


IPv6的首部与IPv4不同,这里只放一张图,不进一步研究

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bL2i02qw-1572850855129)(./resources/image/02/02-5.png)]

2.UDP协议

UDP(User Datagram Protocol)是一种保留消息边界简单面向数据报(无连接)的传输层协议。提供差错检测,是尽最大努力的交付。
将ip和udp放在一起说,是因为UDP在IP协议上改动比较小,只增加了最基本的服务:复用、分用和差错检测。注意:IP协议是没有提供差错检验的,IP协议的检验和只对IP协议的头部进行了检验。
DNS使用的是UDP协议。

看一下UDP的首部:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jJXYo48x-1572850855130)(./resources/image/02/02-6.jpg)]

上面已经讲解了IP协议首部的部分,现在把UDP部分单独拿出来看

       22 7d|1d 69|00 6a| 09 82|a1 12 3a 05 5d b9
 76 14 00 10 40 07 02 00  00 02 02 28 13 00 14 76
 b9 5d 20 00 00 00 00 00  00 42 49 17 a2 5b 6a 5e
 c3 d8 92 9c d1 5c fb 92  9d ff e2 35 0e c8 eb 19
 d6 57 2c 6b b7 67 f2 82  e1 8c ae a6 ae 63 73 eb
 6d ab a6 b8 a7 69 eb 2f  4d 6a 0b 86 59 c0 a1 dc
 53 99 90 19 0f c7 0c 11  2d e1 f1 20
  1. 源端口号:16bytes。例如:0x227dH(8829)。端口号是抽象的,不与主机上的任何物理实体相关,用于标识识一个应用进程。源端口号是可选的,如果数据报的发送方不要求接收方回复,它允许被置为0。
    注意:UDP和TCP是可以同时监听同一个端口号的。
  2. 目标端口号:16bytes。例如:0x1d69H(7529)。用于帮助分离从IP层进入的数据(分用)。
  3. 长度:16bytes。例如:0x006aH(106)。为UDP头部和UDP数据的总长度。以字节为单位。
  4. 校验和:16bytes。例如:0x0982H。该检验和覆盖了:UDP头部、UDP数据和一个伪头部。
    校验和要具体说一下,它计算是加入了一个伪头部,伪头部不是数据传送时真实存在的只是用于计算。同时校验和的计算方法与IP校验和的计算方法是类似的,当整个需要计算的数据字节数是奇数是需要将其配成偶数(为了使数据是2B(16bytes)的整数倍),于是有一个补充的虚字节,该字节也仅用于计算,不是真实传输的数据
    如果发送时计算出的检验和为0x0000H,会写为0xFFFFH

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hPRQWsTk-1572850855132)(./resources/image/02/02-7.jpg)]

3.分片

数据链路层有一个MTU(Maximum Transmission Unit)的概念,最大传输单元,它限制了数据帧能够携带IP数据报的最大长度。

在windows(windows10)的查看网卡MTU的命令:

netsh interface ipv4 show subinterfaces

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-afGvdCCc-1572850855135)(./resources/image/02/02-8.jpg)]

ip分片涉及到标志位(3bytes)和片偏移(13bytes)
MF指示该数据报后面是否还有更多的分组。
片偏移:给出该分片负载字节中的第一个字节在原始IPv4数据中的偏移量,以8B为单位进行计算。注意:由于偏移量是以8个字节为计算单位,所以每个IP分组的负载字节数都必须满足能够整除8的规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值