目录
[3.1.1 UDP的源端口号](#3.1.1 UDP的源端口号)
[3.1.2 UDP的目的端口号](#3.1.2 UDP的目的端口号)
[3.1.3 UDP长度](#3.1.3 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:域名解析协议