UDP
本文最后更新于3 天前,其中的信息可能已经过时,如有错误请发送邮件到184874483@qq.com

先把最容易混的一点捋顺:端口号到底是不是 80、8080

这里要先纠正一句教材表述的理解。传输层提供的是运行在不同主机上的应用进程之间的逻辑通信,不是“同主机的进程之间”。同一台主机内部进程通信,那是操作系统本地 IPC 的范畴;传输层讨论的是网络上的端到端。

端口号也不等于“就是 80、8080”。更准确地说,端口号是传输层用来标识应用进程的一个 16 位编号,范围是 0 到 65535。80、8080 只是常见例子,尤其 80 常与 HTTP 联系,8080 常作为 Web 服务的替代端口。但做题时不能把“端口号”理解成“80、8080 这类常见数字”,因为:

  1. 服务器端常用熟知端口号,例如 53、69、80、161 等。
  2. 客户端发起通信时,源端口通常是临时端口,往往是一个较大的随机值。
  3. 判断“客户发给服务器”还是“服务器发给客户”,关键往往就是看哪个字段是熟知端口

所以,端口号本质上是“进程标识号”,80、8080 只是它的两个具体取值,不是端口号的全部含义。


UDP 数据报、IP 数据报、IP 分片,这三个东西最容易混

这部分是 UDP 与 IP 综合题的主线,必须先建立清楚。

1. UDP 用户数据报长什么样

UDP 用户数据报 = UDP首部 8B + UDP数据部分

UDP 首部固定 8B,包含四个字段:

  • 源端口:2B
  • 目的端口:2B
  • 长度:2B
  • 检验和:2B

其中 UDP 长度字段 表示的是整个 UDP 数据报的长度,也就是:

UDP长度 = UDP首部长度 + UDP数据长度 = 8B + 数据部分长度


2. IP 数据报和 UDP 的关系

当 UDP 交给 IP 层后,UDP 整个数据报会作为 IP 数据报的数据部分

也就是说:

IP数据报 = IP首部 + IP数据部分

而这个 IP 数据部分,恰好就是完整的 UDP 数据报。

所以:

IP数据部分 = UDP首部 8B + UDP数据部分

这是综合题最核心的一条。


3. 分片时,分的是谁

分片发生在 IP 层,分的是 IP 数据报,不是 UDP 数据报。

这个结论特别重要。因为很多题里明明说的是“UDP 数据字段 8192B”,但真正要算分片时,必须先把它装进 IP,再用 IP 的 MTU 去切。

而且还要注意:

  • 只有第一个 IP 片段里会带上 UDP 首部,因为 UDP 首部就在整个 IP 数据部分的最前面。
  • 后续片段只是后续的数据字节,不再带完整 UDP 首部。
  • 分片重组也发生在 IP 层的目的主机 上,重组完成后才把完整 UDP 数据报交给 UDP。

例题一:UDP 检验和计算

题目给出:在计算 UDP 检验和过程中,已经得到中间结果

1011 1001 1011 0110

还需要再加上最后一个 16 位数

0110 0101 1100 0101

求最终检验和。

选项:

A. 0001 1111 0111 1011
B. 0001 1111 0111 1100
C. 1110 0000 1000 0011
D. 1110 0000 1000 0100

本题结论

C


这类题考什么

考的是 16 位反码加法 + 最后按位取反

UDP 检验和不是普通二进制加法,而是:

  1. 16 位一组相加
  2. 若最高位产生进位,则回卷加到最低位
  3. 最终结果再按位取反

分步计算

先把两个 16 位数相加:

1011 1001 1011 0110
0110 0101 1100 0101
= 1 0001 1111 0111 1011

这里产生了一个最高位进位 1,所以要回卷:

0001 1111 0111 1011 + 1
= 0001 1111 0111 1100

然后再按位取反:

0001 1111 0111 1100
取反得到:

1110 0000 1000 0011

所以答案是:

C. 1110 0000 1000 0011


为什么容易错

最常见的错误有两个。

第一种错法,是把它当成普通二进制加法,算完就停,不处理回卷进位。这样往往会停在 1 0001 1111 0111 1011 这种状态。

第二种错法,是已经做了回卷进位,却忘了最后还要按位取反。这样会错选 B。


这类题的速判模板

以后看到 UDP/TCP/Internet checksum 这类题,脑子里直接走这四步:

先分 16 位
再相加
有进位就回卷
最后按位取反


例题二:UDP 数据字段为 8192B,经以太网传送,要分成几个 IP 片

题目:一个 UDP 用户数据报的数据字段为 8192B,要使用以太网传送。假定 IP 数据报无选项。问应当划分为几个 IP 数据报片?说明每个 IP 数据报片的数据字段长度和片偏移字段的值。

本题结论

应分为 6 个 IP 数据报片

各片的 IP 数据字段长度分别为:

  • 前 5 片:1480B
  • 最后 1 片:800B

各片的 片偏移字段分别为:

  • 第 1 片:0
  • 第 2 片:185
  • 第 3 片:370
  • 第 4 片:555
  • 第 5 片:740
  • 第 6 片:925

这题先别急着分片,先分清“UDP 数据字段”和“IP 数据字段”

题目说的是:

UDP 用户数据报的数据字段 = 8192B

这只是 UDP 的“数据部分”,还不包含 UDP 首部。

所以完整 UDP 数据报长度为:

8192 + 8 = 8200B

这个完整 UDP 数据报要装入 IP 数据报的数据部分,所以:

IP数据部分 = 8200B

又因为 IP 首部无选项,所以 IP 首部长度为 20B。


以太网下为什么要按 1480 来切

以太网常用 MTU = 1500B,表示一个 IP 数据报总长度最多 1500B。

IP 数据报总长度 = IP 首部 + IP 数据部分

因此每个分片里,IP 数据部分最多只能是:

1500 - 20 = 1480B

又因为 片偏移字段的单位是 8B,所以除了最后一个片,前面的分片数据长度必须是 8 的整数倍。

1480 恰好满足:

1480 ÷ 8 = 185


正式分片

原始 IP 数据部分共 8200B。

按每片 1480B 切:

8200 = 1480 × 5 + 800

所以一共 6 片。

各片 IP 数据字段长度

  • 第 1 片:1480B
  • 第 2 片:1480B
  • 第 3 片:1480B
  • 第 4 片:1480B
  • 第 5 片:1480B
  • 第 6 片:800B

片偏移怎么算

片偏移单位是 8B,所以偏移值等于“本片数据起始字节位置 ÷ 8”。

  • 第 1 片起始位置:0
    片偏移 = 0 ÷ 8 = 0
  • 第 2 片起始位置:1480
    片偏移 = 1480 ÷ 8 = 185
  • 第 3 片起始位置:2960
    片偏移 = 2960 ÷ 8 = 370
  • 第 4 片起始位置:4440
    片偏移 = 4440 ÷ 8 = 555
  • 第 5 片起始位置:5920
    片偏移 = 5920 ÷ 8 = 740
  • 第 6 片起始位置:7400
    片偏移 = 7400 ÷ 8 = 925

这题还可以顺手补一个容易被忽略的点

第 1 个 IP 分片里的 1480B 数据,实际上包括:

  • UDP 首部 8B
  • UDP 数据前 1472B

后面各片就只是在搬运剩余 UDP 数据,不再带完整 UDP 首部。

这是很多综合题喜欢暗考的地方。


为什么这题容易错

最容易错的点有三个。

第一,直接拿 8192 去除以 1500,这样把 IP 首部和 UDP 首部全忘了。

第二,知道要减 20,却忘了题目给的是 UDP 数据字段 8192B,不是完整 UDP 数据报长度,还少加了 UDP 首部 8B。

第三,片偏移不是按字节填,而是按 8 字节为单位 填。很多人会把 1480、2960 直接写进偏移字段,这一定错。


例题三:两次发送的分片能不能拼起来

题目大意:第一次发送时,一个 UDP 数据报被 IP 层分成 4 片发送,结果前两片丢失,后两片到达目的站;过一段时间应用程序重传 UDP,IP 层仍分为 4 片,这次前两片到达,后两片丢失。问目的站能否把两次传输得到的 4 个分片拼成一个完整数据报?已知第一次收到的后两片仍保存在缓存中。

本题结论

不能组装成完整数据报。


这题考什么

考的是 IP 分片重组依据是什么

IP 分片重组不是看“数据内容是不是一样”,也不是看“偏移能不能接上”,而是看这些分片是否属于同一个原始 IP 数据报

通常重组时要依据这几个字段来归类:

  • 源 IP 地址
  • 目的 IP 地址
  • 协议号
  • 标识字段 Identification

其中最关键的就是 标识字段


为什么本题不能拼

应用程序“重传 UDP”时,会重新生成一个新的 UDP 数据报,交给 IP 层后,又会形成一个新的 IP 数据报。

这个新的 IP 数据报,通常会有新的 标识字段 Identification

于是:

  • 第一次收到的后两片,属于“第一次发送形成的那个 IP 数据报”
  • 第二次收到的前两片,属于“第二次发送形成的另一个 IP 数据报”

它们不是同一个 IP 数据报的分片,所以目的站不会把它们归入同一组进行重组

因此答案是:不能


为什么这题特别容易误判

因为题目故意给出一个很诱人的条件:

“第一次收到的后两个数据片仍保存在缓存中。”

很多人会想,那第二次正好前两个来了,不就凑齐了吗?

问题就在于,IP 重组缓存不是“按偏移位置随便拼图”,而是“先判断是不是同一份原始 IP 数据报,再拼”。不同批次发送形成的是不同 IP 数据报,不能混拼。


这类题的识别口诀

只要问“不同批次分片能不能混合重组”,默认先想:

看 Identification,不看内容相不相同。

考试标准答案几乎都是:不能


例题四:根据 UDP 首部十六进制信息分析

题目给出 UDP 首部:

0xF7210045002CE827

要求:

  1. 源端口、目的端口、数据报总长度、数据部分长度分别是多少?
  2. 该 UDP 数据报是从客户发送给服务器还是从服务器发送给客户?使用的是哪个应用层协议?

本题结论

  • 源端口:0xF721 = 63265
  • 目的端口:0x0045 = 69
  • UDP 数据报总长度:0x002C = 44B
  • UDP 数据部分长度:44 - 8 = 36B

该数据报是:

  • 客户发给服务器
  • 使用的应用层协议是 TFTP

先把 UDP 首部按 4 个字段拆开

UDP 首部固定 8B,也就是 16 个十六进制数位。

题目给出:

F721 0045 002C E827

按 UDP 首部分段就是:

  • 源端口:F721
  • 目的端口:0045
  • 长度:002C
  • 检验和:E827

逐字段解释

1)源端口

F721 转十进制:

15×16³ + 7×16² + 2×16 + 1 = 63265

所以源端口 = 63265

这是一个很大的临时端口,很像客户端随机分配的源端口。

2)目的端口

0045 转十进制是 69

而 69 是熟知端口,对应 TFTP

3)UDP 总长度

002C 转十进制是 44

UDP 长度字段表示整个 UDP 数据报长度,包括 8B 首部。

4)UDP 数据部分长度

44 - 8 = 36B

所以数据部分长度是 36B


为什么能判断是“客户发给服务器”

因为目的端口是 69,这是 TFTP 服务器的熟知端口。

一般规律是:

  • 目的端口是熟知端口:通常表示客户发给服务器
  • 源端口是熟知端口:通常表示服务器回给客户

本题中:

  • 源端口 63265:临时端口
  • 目的端口 69:熟知端口

所以很明显是 客户 -> 服务器


为什么容易错

这类题最容易错在两个地方。

第一,把 UDP 长度字段误认为“数据部分长度”。实际上它是首部 + 数据的总长度。

第二,看见 69 不知道是哪个协议,或者知道 69 是 TFTP,却不会进一步判断方向。判断方向的关键就在于:熟知端口出现在源还是目的字段


把 UDP 与 IP 的综合题串成一个统一模板

做到这里,其实已经能总结出一套很稳定的解题框架了。

第一步:先判当前问的是 UDP 还是 IP

一看到题干里有:

  • 源端口、目的端口、UDP 长度、UDP 检验和
    这是 UDP 层题

一看到题干里有:

  • 总长度、标识、DF、MF、片偏移、首部长度、TTL
    这是 IP 层题

综合题通常是先从 UDP 给出数据长度,再进入 IP 分片。


第二步:看到“UDP 数据字段”时,先补 8B

这是最常见坑点。

题目如果说:

“UDP 数据字段为 x B”

那完整 UDP 数据报长度一定是:

x + 8

然后这个长度才是进入 IP 层后,作为 IP 数据部分 的长度。


第三步:看到 IP 分片,先减去 IP 首部算可装载数据

如果链路层 MTU 为 1500B,而 IP 首部无选项为 20B,那么每个 IP 分片最大数据部分是:

1500 - 20 = 1480B

然后再检查是否满足 8 的整数倍。


第四步:片偏移单位不是字节,是 8B

这点一定要机械记忆。

片偏移 = 本片数据起始位置 ÷ 8

不是直接写起始字节数。


第五步:重组看 Identification,不看“数据能不能拼”

只要题目问:

“第一次收到一部分,第二次又收到另一部分,能否重组?”

先想 IP 重组依据,结论往往就是:

不同原始 IP 数据报的分片不能混拼。


最后把这组知识点浓缩成一段复习总结

传输层的端口号用于标识网络中通信的应用进程,80、8080 只是常见端口实例,不是端口号的全部。UDP 首部固定 8B,长度字段表示整个 UDP 数据报长度,因此题目若给的是 UDP 数据部分长度,做题时必须先加上 8B。UDP 交给 IP 层后,整个 UDP 数据报会成为 IP 数据报的数据部分;若链路层 MTU 不够,则由 IP 层进行分片,分的是 IP 数据报而不是 UDP 数据报。分片时前面各片的数据长度通常取不超过 MTU 减去 IP 首部后的最大 8B 整数倍,片偏移字段按 8B 为单位填写。目的主机重组 IP 分片时依据的是源地址、目的地址、协议号和标识字段,因此不同批次发送形成的不同 IP 数据报分片不能混合组装。至于 UDP 首部分析题,通常通过熟知端口判断应用层协议,并通过熟知端口出现在源端口还是目的端口来判断通信方向。

再补几道 UDP 与 IP 的综合题

数据逐层封装时,哪些内容会增加,哪些字段会变化,哪些字段是端到端保持不变的。


例题一:应用层数据 200B,UDP + IP(最大首部)+ 以太网传输,传输效率是多少

题目:某应用层数据大小为 200B,传输层使用 UDP,网际层使用 IP(采用最大首部长度),使用以太网进行传输(不考虑前导码和 VLAN),则该应用层数据的传输效率是?

本题结论

传输效率为:

200 / 286 ≈ 69.93%

如果写百分数,约为 69.9%70%


这题考什么

考的是逐层封装开销

应用层交下来的是 200B 的纯数据,往下封装时各层会加首部,最后在链路上传送的是整个以太网 MAC 帧。


分步分析

1)UDP 增加多少

UDP 首部固定 8B,所以:

UDP数据报长度 = 200 + 8 = 208B


2)IP 增加多少

题目说“IP 采用最大首部长度”。

IPv4 首部长度字段 IHL 最大可取 15,而单位是 4B,所以:

最大IP首部长度 = 15 × 4 = 60B

因此 IP 数据报总长度为:

208 + 60 = 268B


3)以太网增加多少

题目说“使用以太网进行传输,不考虑前导码和 VLAN”。

那就只算普通以太网 MAC 帧的固定部分:

  • 目的 MAC:6B
  • 源 MAC:6B
  • 类型字段:2B
  • FCS:4B

共:

14 + 4 = 18B

因此链路上实际传输的数据总量为:

268 + 18 = 286B


传输效率计算

应用层有效数据是 200B,实际传输总量是 286B,所以:

传输效率 = 200 / 286 ≈ 0.6993

也就是:

约 69.93%


为什么这题容易错

最常见的错误有三个。

第一,忘了 IP 最大首部长度不是 20B,而是 60B。题目专门写“采用最大首部长度”,就是故意卡这里。

第二,算以太网时只算 14B,不算 FCS 4B。但题目说的是“不考虑前导码和 VLAN”,并没有说不算 FCS,所以 FCS 要算进去。

第三,担心是否需要补齐最小帧长。这里不用,因为以太网数据字段承载的是 IP 数据报,共 268B,已经远大于 46B,不需要填充。


例题二:跨网络 IP 通信中,哪些字段一定保持不变

题目:在进行跨网络的 IP 通信时,不考虑 NAT,传输层使用 UDP 进行封装,数据链路层采用以太网 MAC 帧进行封装,则下列字段中一定保持不变的是:

I. UDP 总长度
II. UDP 检验和
III. FCS 帧检验序列
IV. 目的 MAC 地址
V. 目的 IP 地址
VI. IP 检验和

本题结论

一定保持不变的是:

I、II、V

也就是:

  • UDP 总长度
  • UDP 检验和
  • 目的 IP 地址

这题的核心判断方法

这题本质上考的是:跨越多个网络、经过多个路由器时,哪些是端到端的,哪些是逐跳变化的。


逐项分析

I. UDP 总长度 —— 不变

UDP 总长度表示整个 UDP 数据报的长度,是 UDP 层的字段。只要没有 NAT 或应用层重新生成报文,UDP 数据报本身不变,这个字段就不变。

所以 I 不变


II. UDP 检验和 —— 不变

UDP 检验和是发送端根据 UDP 首部、数据以及伪首部算出来的。中途路由器正常转发不会去修改 UDP 内容,也不修改源/目的 IP(题目明确“不考虑 NAT”),因此 UDP 检验和保持不变。

所以 II 不变


III. FCS —— 一定变

FCS 是链路层字段,是对当前这一跳的 MAC 帧进行校验。

每经过一个路由器,原来的以太网帧会被拆掉,然后重新封装成新的 MAC 帧发往下一跳,因此 FCS 每一跳都要重新计算。

所以 III 不保持不变


IV. 目的 MAC 地址 —— 一定变

MAC 地址是逐跳使用的,不是端到端使用的。

一个 IP 数据报从源主机发往远端主机,中途只要跨网络经过路由器,MAC 帧每一跳都要重封装,所以目的 MAC 地址通常是“下一跳接口的 MAC 地址”,会随着路径变化而变化。

所以 IV 不保持不变


V. 目的 IP 地址 —— 不变

题目说了“不考虑 NAT”,那么 IP 数据报的目的地址就是最终目的主机的 IP 地址,中途路由器只看它来决定转发,但不会修改它。

所以 V 不变


VI. IP 检验和 —— 会变

IPv4 首部检验和只校验 IPv4 首部。路由器每转发一次都会把 TTL 减 1,而 TTL 在首部里,所以 IP 首部变了,首部检验和也必须重算。

所以 VI 不保持不变


这题最容易混淆的地方

很多人会把 UDP 检验和和 IP 检验和一起记混。

要分清:

  • UDP 检验和:端到端,正常中间路由器不改
  • IP 首部检验和:逐跳变化,因为 TTL 每跳减 1

这个区别非常常考。


例题三:UDP 实现分用时依据哪个首部字段

题目:UDP 实现分用时所依据的首部字段是:

A. 源端口号
B. 目的端口号
C. 长度
D. 检验和

本题结论

B. 目的端口号


为什么是目的端口号

“分用”就是接收方收到一个 UDP 数据报后,要把它交给本机哪个应用进程。

接收方本机上可能有多个进程都在等待 UDP 数据,因此 UDP 层必须根据目的端口号,把报文交给对应的套接字或应用进程。

所以分用依据是:

目的端口号


为什么不是源端口号

源端口号是用来标识发送方进程的,主要用于回复时定位对方,不是接收端本机分发的依据。

所以这类题的标准结论非常固定:

  • 复用:多个发送进程共用传输层
  • 分用:接收端根据目的端口号交付给对应进程

例题四:NAT 转发 UDP 报文时,UDP 首部哪些字段会被修改

题目:假设路由器实现 NAT 功能,内网主机 H 的 IP 地址为 192.168.1.5/24。若 H 运行某应用向 Internet 发送一个 UDP 报文段,则路由器在转发封装该 UDP 报文段的 IP 数据报过程中,UDP 报文段的首部字段会被修改的是:

I. 源端口号
II. 目的端口号
III. 总长度
IV. 检验和


先给考研做题结论

按考研常见命题口径,这题通常选:

I、IV

也就是:

  • 源端口号
  • 检验和

为什么通常这么做

家用路由器或常见 NAT 场景里,通常不是单纯改 IP,而是做 NAPT/PAT,即“地址 + 端口转换”。

因为很多内网主机要共用一个公网 IP,所以路由器通常要:

  1. 把源 IP 改成公网 IP
  2. 把源端口改成一个映射后的端口号

因此:

I. 源端口号 —— 会改

为了区分不同内网主机或不同会话,NAT 常会改源端口。

所以 I 会变

II. 目的端口号 —— 一般不改

目的端口表示远端服务器提供的服务类型,比如 DNS 的 53、TFTP 的 69 等。转发时通常不改。

所以 II 不变

III. 总长度 —— 不改

只做 NAT 时,UDP 报文段的数据量没有变,首部长度也没变,因此总长度一般不变。

所以 III 不变

IV. 检验和 —— 会改

UDP 检验和计算时要用到伪首部,伪首部中包含源 IP、目的 IP。NAT 改了源 IP 后,检验和必须重算。

而如果连源端口也改了,那更要重算。

所以 IV 会变


这里要补一个“严格说法”

如果从非常严格的协议角度区分:

  • 基本 NAT(只改 IP):UDP 源端口未必改,但检验和一定要重算
  • NAPT/PAT(地址+端口转换):UDP 源端口和检验和都会改

但在 408 风格和国内考研题里,题目一说“路由器实现 NAT 功能”,大多数时候默认就是家用路由器那种“地址+端口转换”的实际语境,所以标准答案通常按 I、IV 处理。

这个地方容易卡人,建议按考试表达记住。


顺手把一类高频考点讲透:各层协议封装到底会增加多少字节

这部分是综合题的底层模板,确实很适合单独背。

1. UDP

UDP 首部固定:

8B

包括:

  • 源端口 2B
  • 目的端口 2B
  • 长度 2B
  • 检验和 2B

所以:

UDP总长度 = 应用层数据长度 + 8B


2. TCP

TCP 首部最小:

20B

最大:

60B

因为 TCP 首部长度字段也是按 4B 为单位,最大可到 60B。没有选项时通常按 20B 算。

所以:

TCP报文段长度 = 应用层数据长度 + TCP首部长度


3. IPv4

IPv4 首部最小:

20B

最大:

60B

无选项时通常按 20B 算;题目如果特别说“最大首部长度”,就按 60B 算。

所以:

IP数据报总长度 = 传输层报文长度 + IP首部长度


4. 以太网 MAC 帧

不考虑 VLAN 和前导码时,普通以太网 MAC 帧固定增加:

  • 目的 MAC:6B
  • 源 MAC:6B
  • 类型:2B
  • FCS:4B

合计:

18B

如果题目要求考虑 VLAN,则再加 4B。
如果题目要求考虑前导码和帧开始定界符,则再加 8B。
如果题目要求考虑帧间间隔 IFG,那是物理层发送间隔,通常不算在帧长度里。


一张最实用的封装增量长度表

层次协议典型增加长度
传输层UDP8B
传输层TCP20B(无选项)到 60B
网络层IPv420B(无选项)到 60B
网络层IPv640B
数据链路层以太网 MAC 帧18B(14B首部 + 4B FCS)
数据链路层VLAN 标签额外 4B
物理层前导前导码 + SFD8B(若题目要求算)

做综合题时,长度题的统一公式

如果是最常见的“应用数据 + UDP + IPv4 + 以太网”,那就直接套:

总传输长度 = 应用数据长度 + UDP首部 + IP首部 + 以太网开销

如果不考虑前导码、不考虑 VLAN,并且 IPv4 无选项,那就是:

总长度 = 应用数据 + 8 + 20 + 18

如果 IP 取最大首部长度,则改成:

总长度 = 应用数据 + 8 + 60 + 18


把这部分再浓缩成考试速记版

UDP 首部固定 8B,TCP 首部通常按 20B 算,IPv4 首部通常按 20B 算、最大可到 60B,以太网 MAC 帧在不考虑前导码和 VLAN 时增加 18B。跨网络转发时,MAC 地址和 FCS 是逐跳变化的,TTL 每跳减 1,因此 IPv4 首部检验和也会变化;而在不考虑 NAT 的情况下,源 IP、目的 IP、UDP 长度、UDP 检验和等端到端字段保持不变。若经过 NAT,最常见的考试结论是源端口号和 UDP 检验和会改。UDP 分用依据的是目的端口号。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇