🤡🤡🤡个人主页🤡🤡🤡
🤡🤡🤡JavaEE专栏🤡🤡🤡
🤡🤡🤡上一篇文章:【JavaEE】网络编程——UDP🤡🤡🤡
文章目录
前言
端口号:
概念:是描述同一主机不同程序的
同一时刻,同一个协议下,同一个主机上的端口号只能绑定一个应用程序,但是在不同的协议下是可以一个端口号绑定多个应用程序,无论是否是同一个协议一个应用程序都可以有绑定多个端口号。
在业务中会经常见一个服务器中会有多个端口号
- 给客户端提供业务功能的这样的端口称为"业务端口"
- 程序猿还需要对这个服务器进行更精细的控制,如让服务器重新加载配置/开启某一个功能/重新启动/重新加载数据/修改某个选项设定,服务器就会提供一个端口号“管理端口”
- 日常开发会遇到一些bug,需要查看服务器的运行状态,服务器不能直接用调试器去调试(调试器一条是就会把服务器阻塞住,无法给别的客户端提供服务了),这时候就需要提供一个端口“调试端口”,通过网路的方式,给服务器发送调试请求,服务器返回对应的关键信息。
1.UDP
1.1报文格式
我们主要了解的是UDP的报文格式
UDP数据报主要由UDP报头和UDP载荷组成的。
1.2UDP长度
UDP长度是指UDP报头与UDP载荷一起的大小为64KB
由于一个UDP数据报的长度只有64KB,所以在传输的时候就会有很大的制约,必须确保传输的单个数据不能超过64KB
1.3UDP校验和
在网络传输中会有出错的情况,主要引起的原因是比特翻转,为什么会出现比特翻转,是因为数据本质上是0101这样的数据在传输,而这些数据本身就是光信号和电信号,在网络传输的过程中很难没有其他因素不会干扰光信号和电信号将本身要传输的数据为0,但在这种情况下传过去的数据是1,那么这样传输过去的数据就会出错,所以我们需要校验和这样的方法来保证我们的数据在传输的过程中是正确的。
校验和是什么?
校验和就是引入冗余信息,通过这些冗余的信息来验证原有的数据
打个比方:我们去采购一些物品,我们将要采购的物品一一列举出来,然后我们在统计我们需要采购多少物品,这个统计采购物品的多少就是冗余信息。
要对数据校验有两层
第一层:能够发现是否出错
第二层:最好发现哪一位出错,并且将这一位纠错
在UDP数据报中做到第一层使用的校验和方法是CRC方法
CRC
CRC是一个简单粗暴的计算校验和的方式,使用循环冗余校验
也就是将数据的每一位通过循环的方式累加起来。
除了CRC还有一种方式可以完成第一层校验和那就是md5(做业务的时候常用)
md5的特点:
- 定长:无论你输入的内容是多长,得到的结果都是一样长
- 分散:输入的内容,哪怕只有一点被改变,那么结果都会差异很大
- 不可逆:通过原数据计算md5值成本很低,但是将md5还原成数据成本就很高。
1.4UDP的主要用途
应用于对于性能要求比较高,但是对于可靠性要求不高的常见——分布式系统中,多个服务器之间的相互通信(多个机器在同一个机房中,网络结构简单&带宽充裕)
2.TCP
2.1报文格式
报文分报头和载荷(数据),TCP报头中有一个位置是叫选项,这个选项就是可有可无的,在选项以上的是必须的,这个选项类似我们在买车的时候,有些东西是必需的,有些是按照你自己需求加配的。
4位首部长度:表示的长度是报头的长度,这个长度为60个字节。
选项:除去选项上面的长度固定的20个字节,那么60-20=40个字节,选项最多有40个字节。
保留6位:提前申请了一块空间,这个空间暂时不需要用,等到以后需要扩展的时候,那么这个空间就能用上了。
这6个标志位是TCP报文中的灵魂。
ACK:置1表示应答报文
RST:置1表示复位报文
SYN:置1表示同步报文
FIN:置1表示结束