传输层协议——UDP
阿里云国际,腾讯云国际,AWS 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov8 |
文章目录
1. 认识知名端口号
ssh服务器 使用22端口
ftp服务器 使用21端口
telnet服务器使用23端口
http服务器 使用80端口
https服务器 使用443端口
0-1023 知名端口号HTTP、FTP、SSH应用层协议端口号是固定的
1024-65535 操作系统动态分配的端口号客户端程序的端口号就由操作系统从这个分为分配的
2. netstat
netstat 是一个用来查看网络状态的重要工具
输入 netstat -nltp

n 拒绝显示别名能显示数字的全都转化为数字

若输入 ltp则发现不会显示数字而显示对应的别名
l : 只查看 listen 状态
输入 netstat -ntp

t只查TCP
p显示更多的进程信息
若将p去掉输入 netstat -nt

就不显示对应的PID这一列的信息了
若输入 netstat -np 即将系统中的协议基本上都查出来了

输入 netstat -nup 只查udp

输入 netstat -naup 显示所有udp服务

a显示所有的条目
3. pidof
在服务器查看服务器的进程id时非常方便

输入 pidof +进程 获取对应进程和子进程的PID
4. UDP协议
UDP协议端格式

有效载荷一定是上层——应用层 给的上层通过系统调用 把数据拷过来的
UDP报头的宽度是0-31表示报头所对应的字节数 (4字节)
1. 报头和有效载荷如何分离
报头是固定长度 8字节剩下的就是有效载荷
通过16位UDP长度整体 减去 8字节 即 有效载荷的长度
2. 有效载荷如何做到向上交付的
UDP报头中包含16位目的端口号将一个报文发送到主机上根据目的端口号向上交付给应用层绑定该端口号的进程
报头(协议)的本质结构化数据
基于 struct 有两种数据类型一种为结构体另一种为位段

struct udp_header 结构体 内部 包含 源端口号、目的端口号 、udp长度、校验和

借助位段的方式取整形int的4字节中的16个比特位

将缓冲区数据从应用层拷贝给操作系统内部
提供一段缓冲区定义一个指针p去指向缓冲区
因为报头大小是固定长度8字节让p向后移动8个单位
再将应用层的数据拷贝到对应的位置中

再将指针p指向最开始位置并将p强转成 struct udp_header类型 指向结构体中的源端口号、目的端口号 、udp长度、校验和

该报文经过网络经过协议栈被对方收到了
再定义一个指针s让s+8再次指向有效载荷

将s强转成 struct udp_header类型 指向结构体中的源端口号、目的端口号 、udp长度、校验和
UDP的特点
无连接知道 对端的IP和端口号 就直接传输不需要连接
不可靠若网络故障段无法发送对方UDP协议也不会给应用层返回任何错误信息
面向数据报不能够灵活的控制读写数据的次数和数量
面向数据报的理解
因为UDP有自己固定的报头长度8字节所以UDP能够知道自己的有效载荷多长
不靠上层在底层就自动知道报文和有效载荷的长度
所以就能保证向上交付的 一定是独立的、完整的 有效载荷
不用自己处理只要发的是完整的收的就是完整的对方发几次收几次
由底层交上来独立的报文称为面向数据报
即应用层给UDP多长的报文UDP原样发送既不拆分也不会合并
缓冲区理解
UDP对应数据一定是完整的所以有数据直接交给下层
所以UDP不需要 发送缓冲区
收到一个保文可上层来不及处理就需要接收缓冲区
该缓冲区 并不是用来保证可靠性而是尽可能保证不要丢包如果缓冲区满了再达到的数据就会被丢弃
如在淘宝上买了五件商品编号为1-5先买的是1号商品时间是不确定的所以1-5号 谁先谁后到 是不确定的
这种情况称为 接收报文出现乱序的情况
乱序是不可靠的表现所以UDP不考虑
即UDP接收缓冲区但不保证 接受报文是有序的
阿里云国际,腾讯云国际,AWS 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov8 |