传输层UDP

再谈端口号

端口号:标识了主机上进行通信的不同的应用程序

在TCP/IP 协议中我们用"源IP""源端口号" "目的IP""目的端口号" "协议号" 五元组来标识一个通信 用netstat -n 查看

查看网络信息,我们有两种命令查看网络通信
1.用netstat 查看

-n:显示所有能用数字表示出的数据、

-t:查看tcp协议 -u :查看udp协议

-p:protocol 多一列PID-Program name 建立相关链接的程序名

-l:查看listen状态的服务器
我们既要查listen状态,又要查看非listen状态

-ntpa
2.用ss 查看

-ntlp 含义与netstat相同

端口号的范围划分

0-1023,知名端口号,像ssh http这类广为使用的的应用层协议,他们的端口号都是固定的。

1024-65535 操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个范围内分配的

一个端口号只能被一个进程绑定,因为端口号就是用来区分进程的唯一性的

但一个进程可以绑定多个端口号

udp协议的报头


在传输层udp报头如何和有效载荷分离

固定报头长度
在传输层udp有效载荷如何向上交付

目的端口号,找到对应的进程
那怎么知道udp报文是收全的?

有16位UDP长度可以支持,它标识了udp报文的大小
如何理解报头?
结构体


UDP中报文有最大长度限制,最大为16位,2的16次方也就是64k

OS要不要对多个报文进行管理?

就要有报文的结构体

cpp 复制代码
struct sk_buff
{
    char * data
    char * tail
}

当需要向缓冲区拷贝时,我们将data前移5个字节,再将hello拷贝到缓冲区

添加报头同理。

向上交付数据,只需要data往后移动8字节,传输hello给上层

udp特点

a.无连接,不可靠,面向数据包

b.使用一次sendto,发送100个字节,就必须recv一次,接收100个字节

c.udp不需要发送缓冲区,把数据打个包就发送,但udp有接收缓冲区

d.不能保证发送和接受的频率一样,不保证接受数据的一次性

e.全双工

相关推荐
方传旺14 分钟前
C++17 std::optional 深拷贝 vs 引用:unordered_map 查询大对象性能对比
c++
Lovyk15 分钟前
Ansible 核心功能进阶:自动化任务的灵活控制与管理
网络
Dontla29 分钟前
Makefile介绍(Makefile教程)(C/C++编译构建、自动化构建工具)
c语言·c++·自动化
Xの哲學35 分钟前
Perf使用详解
linux·网络·网络协议·算法·架构
门前灯35 分钟前
Linux系统之iprconfig 命令详解
linux·运维·服务器·iprconfig
忧郁的橙子.1 小时前
三、k8s 1.29 之 安装2
linux·运维·服务器
何妨重温wdys1 小时前
矩阵链相乘的最少乘法次数(动态规划解法)
c++·算法·矩阵·动态规划
重启的码农1 小时前
ggml 介绍 (6) 后端 (ggml_backend)
c++·人工智能·神经网络
重启的码农1 小时前
ggml介绍 (7)后端缓冲区 (ggml_backend_buffer)
c++·人工智能·神经网络
雨落倾城夏未凉1 小时前
5.通过拷贝构造函数复制一个对象,假如对象的成员中有个指针类型的变量,如何避免拷贝出来的副本中的该成员之下行同一块内存(等价于默认拷贝构造函数有没有缺点)
c++·后端