网络编程—TCP/IP模型(UDP协议与自定义协议)

上篇文章:

网络编程---Socket套接字(TCP)https://blog.csdn.net/sniper_fandc/article/details/146923783?fromshare=blogdetail&sharetype=blogdetail&sharerId=146923783&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

目录

[1 应用层](#1 应用层)

[1.1 自定义协议](#1.1 自定义协议)

[2 传输层](#2 传输层)

[2.1 UDP](#2.1 UDP)


1 应用层

1.1 自定义协议

应用层除了特殊的协议比如http、https等,大部分协议需要开发人员自定义,即自己约定协议的格式。以登录注册模块为例,常常需要客户端和服务器互相返回账号数据,假设请求和响应的数据都有:userid、number、password,那么自定义协议就有6种常见的类型:

**1.分隔符:**可以采用";"、" "、"\n"等符号作为不同类型数据的划分界限。比如:userid;number;password;

**2.固定长度字节:**采用固定长度的字节来表示请求和响应,比如请求长度10字节,userid占2字节,number占4字节,password占4字节。

**3.分隔符+固定长度字节:**前两种方式组合,实现变长字节组合方式。

**4.xml:**采用标签组织数据

html 复制代码
<request>

<userid>1</userid>

<number>123456789</number>

<password>123456789</password>

</request>

<response>

<userid>1</userid>

<number>123456789</number>

<password>123456789</password>

</response>

**5.JSON:**最常用的前后端数据交互格式,使用{}包含键值对,键必须是字符串,值可以是字符串、数字、数组([])甚至JSON等格式,键和值之间用:分割,键值对之间用,分割,比如:

请求:

{

userid:1,

number:"123456789",

password:"123456789"

}

**6.二进制数据:**常见protobuffer、thift等。

注意:xml和JSON属于文本格式,优点是可读性强,缺点是效率低,占用带宽多。二进制格式优点是效率高,占用带宽少,缺点是可读性差。

2 传输层

2.1 UDP

UDP协议的特点是无连接(不建立连接来传输数据)、不可靠(不知道数据是否发送过去)、面向数据报(发多少收多少,不能拆分为字节多次接收)、只有接收缓冲区没有发送缓冲区、大小受限(最长64kb)、全双工(同时发送和接收)。

UDP数据报结构如下:

****源端口号:****发送方的端口号

****目的端口号:****接收方的端口号

****UDP长度:****单位字节,16位可以表示64kb的数据,即UDP报文长度最大64kb。

****校验和:****发送方发送数据时会计算一个校验和,接收方接收数据后再计算一个校验和,根据校验和是否相等验证当前UDP数据报在传输过程中是否出现错误(导致比特位被修改),如果出错就会丢弃。

UDP校验和的计算没有采用著名的CRC算法(循环冗余校验和),而是把数据划分为多段16位的字(如果不足16位且为奇数位,就在末尾补形成偶数长度),把每个16位的字累加,溢出2字节(16位)的部分从16位的最低位进位,最后把得到的结果按位取反得到校验和。

注意:如果校验和不相等,则数据传输过程一定发生了错误。如果校验和相等,也不能说明数据一定完全正确。因为算法过于简单,有可能某位0变1,对应其他16位字的相同位置是1变0,结果求和过程结果仍然一样。但是虽然网络传输过程可能出错,但这是很小概率的事,多个小概率事件同时发生使校验和仍然一样概率更小,因此工程上一般忽略不计。

下篇文章:

网络编程---TCP/IP模型(TCP协议)https://blog.csdn.net/sniper_fandc/article/details/147011479?fromshare=blogdetail&sharetype=blogdetail&sharerId=147011479&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

相关推荐
2503_924806853 小时前
动态IP使用中 报错407 怎么办???
服务器·tcp/ip·php
小白银子3 小时前
零基础从头教学Linux(Day 42)
linux·运维·服务器·网络·nginx
火星MARK4 小时前
如何配置 Ingress 的 SSL/TLS 证书?
网络·网络协议·ssl
看好多桂花树4 小时前
Nginx SSL/TLS 配置
网络·nginx·ssl
程序猿费益洲5 小时前
Docker 网络详解:(一)Linux 网络虚拟化技术
linux·网络·docker·容器·云计算
shylyly_6 小时前
Linux-> UDP 编程3
linux·运维·网络协议·udp·bind·cs·聊天室程序
云宏信息6 小时前
赛迪顾问《2025中国虚拟化市场研究报告》解读丨虚拟化市场迈向“多元算力架构”,国产化与AI驱动成关键变量
网络·人工智能·ai·容器·性能优化·架构·云计算
歪歪1006 小时前
什么是TCP/UDP/HTTP?
开发语言·网络·网络协议·tcp/ip·http·udp
luckys.one6 小时前
第12篇|[特殊字符] Freqtrade 交易所接入全解:API、WebSocket、限频配置详解
网络·ide·python·websocket·网络协议·flask·流量运营
roman_日积跬步-终至千里7 小时前
【系统架构设计(36)】网络规划与设计
网络·系统架构