【Java EE】网络原理——UDP

发布于:2024-05-10 ⋅ 阅读:(20) ⋅ 点赞:(0)

目录

1.应用层

2.传输层

2.1端口号

2.1.1端口号的范围划分

2.1.2一个端口号可以被多个进程绑定吗?

2.1.3一个进程可以绑定多个端口号吗?

3.UDP协议

3.1UDP的格式

3.1.1 UDP的源端口号

3.1.2 UDP的目的端口号

3.1.3 UDP长度

3.1.4UDP校验和

3.2UDP的特点

3.3UDP使用注意事项

3.4基于UDP的应用层协议


1.应用层

如何定义协议(1)确定传输信息(2)确定数据格式(xml,json,yml,protobutfer)。

现成的协议:典型代表HTTP协议。

2.传输层

socket api 都是传输层协议提供的。(操作系统内核实现)

负责数据能够从发送端到接受端。

2.1端口号

端口号标识了一个主机上不同通信的不同的应用程序。

端口号的组成 :IP地址(确认主机)+端口号(主机上的应用程序)。IP地址在网络层上,端口号在传输层上。

端口号是两个字节表示的无符号整数。

扩展:

一个字节:有符号:-128~+127;无符号:0~255

两个字节:有符号:-32768~+32767;无符号:0~65535

四个字节:有符号:-21忆~+21忆;无符号:0~42忆9千万

2.1.1端口号的范围划分
  • 0~1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他们的端口号是固定的。
  • 1024~65535:操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个范分配的。

扩展:

知名端口号

  • ssh服务器,使用22端口号
  • ftp服务器,使用21端口号
  • telnet服务器,使用23端口号
  • http服务器,使用80端口号
  • https服务器,使用433端口号
2.1.2一个端口号可以被多个进程绑定吗?

同一个机器上,同一时刻内,端口号不能重复被绑定。

那么。如何确定在当前机器上某个端口号是否被其他进程使用呢?

使用netstart命令

netstart - ano | finder 9090
//netstart封装好api的一个可执行程序。
//Finder筛选查找,查询出当前主机中是否有9090端口号
// | 管道,报多个命令组合起来,把第一个命令的输出当做第二个命令的输入。

两个进程不能同时绑定一个端口号:

如果一个是TCP,一个是UDP,此时重复并不影响。

如果是两个TCP或者两个UDP,都会绑定失败。

2.1.3一个进程可以绑定多个端口号吗?

一个进程同一时刻可以绑定多个端口号。

一个进程可以使用多个Sever Socket绑定多个端口号。

管理端口:程序员+运行人员。

业务端口:普通用户

调试端口:程序员

3.UDP协议

3.1UDP的格式

UDP数据报=UDP报头+UDP载荷

3.1.1 UDP的源端口号

源端口号:这个数据是从哪里来。

3.1.2 UDP的目的端口号

目的端口号:这个数据传输到哪里。

3.1.3 UDP长度

描述了整个UDP数据报战了多少个字节,最大长度为64kb。

3.1.4UDP校验和

目的:(1)能够发现出错。(2)能发现哪一位出错,并进行纠正。

本质上,是引入额外的冗余信息,验证原有信息。

CRC算法作为校验和

md5的特点:

  • 定长:无论输入多长,得出的结果是固定长度。
  • 分散:数的内容改变一点点,最终结果差异都很大。
  • 不可逆:可以通过原数据计算出md5,但是知到md5不能计算出原数据。

md5破解只是查找。

还有sha1和md5差不多。

3.2UDP的特点

UDP传输具有的特点:

  • 无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接。
  • 不可靠传输:没有确认机制,没有重传机制;如果因为网络故障该段无法发送到对方,UDP协议层也不会给应应用层返回任何错误信息。
  • 面向数据报:不能灵活的控制读写数据的次数和数量。
  • 全双工方式
3.3UDP使用注意事项

UDP协议首部中有一个16位的最大长度,也就是说一个UDP能传输的数据最大长度是64kb(包含首部)

如果我们需要传输的数据超过64kb,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。

3.4基于UDP的应用层协议
  • NFS:网络文件系统
  • TFTP:简单文件传输协议
  • DHCP:动态主机配置协议
  • BOOTP:启动协议(用于无盘设备启动)
  • DNS:域名解析协议