UDP客户服务器模型和UDP协议

UDP客户服务器模型和UDP协议

文章目录

一、前言

先前理解了socket的定义,今天我们继续深入探讨。。。

二、socket之客户服务器模型

2.1 socket本质

socket实际上就是一个编程接口 ,是对某种结构的抽象。(网络通信,需要有发送信道和接收信道)

2.2 学习socket的目的

正常来说,这两个信道需要两个主体来描述,但是人们发现一个主体也能描述,这就是socket

socket就是研究:如何使用哪些系统调用接口来向这2个信道进行数据的发送和接收呢?

2.3 C/S模式

client客户端(多,从);server服务端(单,主)

所有的从设备主动 向主设备进行请求,主设备接收到这个请求后,进行解析并响应(服务器回给客户端)。在这个过程中,服务器先执行,在服务器机器上等待客户端的请求

2.4 UDP服务器编程模型

物理接口层:不用编,有网卡来提供

网络层:不用编,已经设置好IP了

传输层:可靠/不可靠

UDP最简单:不考虑可靠传输,省略了很多麻烦(数据冗余:定义大量数据结构来支持可靠性)

  • socket()获取操作系统抽象数据结构的对象。

    只需要关注这一个对象就行了

    Q指的就是queue结构

  • 主动的先执行,等待客户端的请求,客户端的请求包到达服务器。

    那么如何这个数据包能够正确地找到服务器的进程呢?

    所有的操作系统都有pid(进程号),服务器就会有一个进程号,如果客户端知道服务器的进程号不就能连了吗?但是客户端和服务端不在一个机器啊,是不会知道服务端的进程号的。因此进程号需要映射转换为端口号

    主动执行:在服务器上开后门,这里的后门就是开了一个端口号,对应一个程序

    上图,UDP开了两个端口号5353和844

    bind()也是一个系统调用,用来把端口打开,但是需要指定开的门

    不指定也可以,系统会随机指定一个。服务器随便开一个,客户端不好找,建议手动指定端口号,这样可以更方便的找到对应的服务。

  • 服务器第3个系统调用:服务器等待有新的客户端发来请求

    recvfrom-针对udp服务,recvfrom会从Recv-Q取值,然后往上传

    recv-针对tcp服务,会把数据往底层传输,底层会进行发送确认,recv收到的数据包都是发送确认过的

2.5 UDP客户端编程模型

  • UDP能发就发,大不了没人接收,最终数据包就湮灭在链路上了。因此UDP发数据包跟有没有服务器都不重要,它是不知道自己能不能收到的。

  • socket()获取操作系统抽象数据结构的对象

  • bind()不建议做,改填写自己的端口,发送UDP数据包,src ip:port dest ip:port bind(88991)

    客户端代码会在不同的机器上运行,无法保证每个客户端都没有使用8891的端口号,因此不调用bind,src ip:port没有信息

    为了能够将这个数据发送到网卡上,内核就会自动的选择一个当前系统没有被使用的端口号作为src

  • sendto()向某一个IP和port上发送数据包

三、UDP协议抓包分析

  • UDP从协议角度上,只有目的端口、源端口的数据,不提供任何跟有序无丢失有关的传输帮助

  • UDP面向数据报协议,TCP面向连接的协议

    TCP:彼此之间已经建立好关系了,彼此绑定了,一个服务只有一个链接

    UDP:不需要和客户端建立连接,就像是丢报纸,直接丢给客户端(收不收到无所谓了)

  • UDP丢包:服务器根本就不存在(对应的端口号没有),UDP到了网络层,网络传送给传输层,传输层没有缓存来存这个数据,自然这个数据就丢失了

    还有一种丢包:链路和路由选择时,会引起丢失

    可靠传输:有超时重传机制,发送端要暂存这个数据包,但是这个在UDP中是不具有的,UDP是不可靠传输

    UDP的数据包在网络传输中,信号衰减没了

    如果服务器开着,没有端口号,会发不存在端口号的报错

  • 假丢包:服务器存在,端口号也正常的,但是由于服务器的执行太慢了(比如:getchar();),迟迟不能执行到recvfrom的接口处,此时数据包到达该机器后,分配给UDP层,UDP层发现数据包的端口和我的一样,把这个数据包暂时存放在缓存区里,缓存区里是接收数据包(只要是端口号是这个服务器,就接收,仓库里按照数据包进行管理)

    数据包没有发现粘包

    在UDP中,缓存区就像是放了很多很多大小一致的箱子 (毕竟箱子是有限的,当数据包过多时,在发送数据包时就会发生丢包了),用来存放每个包,当取的时候直接取箱子就好了,不会发生粘包。

    UDP没有发送确认机制的缓存,但是会有存储数据包的缓存,UDP会收到来自五湖四海的数据包,因此就只能一个结构体一个结构体的保管。只是这个缓存区里的数据,传输层确认这个数据是否有序,是否丢失,不确定。

    但是TCP就不一样了,容易发生粘包(TCP缓存区里只能存放一个源地址的信息)

  • UDP的缓存怎么知道哪个是一个包呢?

    定长。如果数据包过大,就会丢掉,或者剩下一部分

四、小结

相信你已经对UDP有一个深入的了解了,接下来,我们将带来一个新的协议TCP,或许它和UDP有这样那样相同或者不同的地方亟待我们去探索。

相关推荐
发光小北5 小时前
Modbus TCP 转 Profinet 主站网关如何应用?
网络·网络协议·tcp/ip
wanhengidc7 小时前
云手机 高振畅玩不踩坑
运维·服务器·安全·web安全·智能手机
有谁看见我的剑了?7 小时前
linux 添加硬盘后系统识别不到硬盘处理
linux·运维·服务器
易连EDI—EasyLink8 小时前
易连EDI–EasyLink实现OCR智能数据采集
网络·人工智能·安全·汽车·ocr·edi
@insist1238 小时前
信息安全工程师考点精讲:身份认证核心原理与分类体系(上篇)
大数据·网络·分类·信息安全工程师·软件水平考试
SmartRadio8 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
_.Switch9 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
软件技术NINI9 小时前
webkit简介及工作流程
开发语言·前端·javascript·udp·ecmascript·webkit·yarn
金色光环10 小时前
FreeModbus释放底层的 TCP 监听端口
服务器·网络·tcp/ip
数智化精益手记局10 小时前
拆解物料管理erp系统的核心功能,看物料管理erp系统如何解决库存积压与缺料难题
大数据·网络·人工智能·安全·信息可视化·精益工程