网络协议分层

本文探讨了应用层开发中如何利用现成的HTTP协议和自定义协议,重点关注了自定义协议的两种格式:文本格式(如XML、JAVA)和二进制格式(UDP与TCP特性对比,包括无连接、可靠性、数据报和字节流等)。特别详细解析了UDP的报文结构,以及TCP的连接管理、可靠性和数据传输机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:应用层
1.使用现成的应用层协议来进行开发
HTTP协议

2.自定义协议
2.1. 客户端给服务器发的请求是啥样的
2.2. 服务器给客户端的响应是啥样的
实际开发中,约定自定义协议大体分为两类:
1.文本格式(把请求响应当成字符串来处理,处理的基本单位是字符)
XML,JAVA

2.二进制格式(把请求响应当成二进制数据处理,处理的基本单位是字节)

二:传输层
负责端对端的数据传输,只考虑起点和终点,不考虑中间过程。
传输层是操作系统内核实现的,因此谈到的传输层协议,一般都是指线程的一些协议,很少会涉及“自定制”。

UDP的特性:
1.无连接
2.不可靠
3.面向数据报
4.全双工

无连接:socket创建好之后,就可以立即尝试读写数据了
有连接:socket创建好了之后,还需要建立连接,连接建立完了,再通过accept获取到连接,才能进行读写数据。

可靠/不可靠:

面向数据报:读写数据都是以DatagramPacket为单位进行的
面向字节流:读写数据直接以byte[]为单位

全双工:一个socket,既能读,也能写

几个概念:
1.端口号
端口号的用途:标识一个进程,就可以区分出当前收到的数据要交给哪个进程来处理。

通常情况下,两个进程无法绑定到同一个端口号。
一个进程可以绑定多个端口,绑定,不是把进程和端口绑定,而是把socket(socket就是文件,一个进程里可以有很多文件,每个socket都可以绑定到不同的端口)和端口绑定。

端口号是一个整数,是一个两个字节的整数,0-65535(没有负数)
0-1023 这些端口,称为“知名端口号”。

UDP协议报文格式:
【UDP报头 | UDP数据(完整的应用层数据报)/UDP载荷(payload)】
【源端口号|目的端口号|UDP长度|UDP校验和】【】

关于UDP长度:
整个UDP数据报的长度,使用2个字节的数据来表示,2个字节能表示的数据范围是0-65535byte,也就是一个UDP数据报,最大就是64KB。如果报文长度超过64KB,此时就可能丢失一部门数据,解决办法是改用TCP,TCP对于数据的长度没有限制。

实际使用的校验的算法有很多,其中比较常见的有crc(循环冗余校验)md5

TCP的特性:
1.有连接
2.可靠
3.面向字节流
4.全双工

TCP协议的报文格式
在这里插入图片描述
【TCP报头/首部(header) | TCP数据/载荷(payload)】
首部前面一共是20个字节,options部分,范围就是0-40个字节,所以首部最长是60个字节。

6个保留位,标识了这个TCP数据报是一个啥类型的数据报。

保证可靠性的核心是确认应答
发送方法数据给接收方,接收方就回应一个应答报文。如果发送方收到了这个应答报文,那么认为是对方已经收到了。

由于网络上的传输,顺序是不确定的,因此不能就单纯的通过收到数据的顺序来确定逻辑,就需要对应答进行编号(报文中的序号与确认序号)。

TCP传输数据是按照字节来算的(面向字节流),TCP的序号和确认序号,是以字节为单位进行编号的。

超时重传
数据在传输的过程中如果发生丢包,就要进入超时重传的机制中,每次重传的等待时间会逐渐增加。

连接管理

TCP是有连接的,连接管理就是如何建立连接(三次握手),如何断开连接(四次挥手)

三:网络层

四:数据链路层

五:物理层

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值