计算机网络原理——传输层UDP协议

端口号

一个两个字节构成的“无符号”整数 0-65535
区分一个主机上的多个进程
socket API中涉及到端口号的部分使用的是int 表示.实际上最多也就是两个字节.
一个进程可以绑定多个端口号,通常一个端口号不能被多个进程绑定(Linux fork 把当前的进程复制一份,得到一个子进程(把PCB复制,顺便就把PCB中的文件描述表进行复制,看起来就是两个进程绑定了同一个端口))

0-1023是一些 知名端口号,一些常用的服务器,就给他们确定了一些固定的端口
ssh服务器, 使用22端口
ftp服务器, 使用21端口
telnet服务器, 使用23端口
http服务器, 使用80端口
https服务器, 使用443
Linux中知名端口号是需要管理员权限 Tomcat 8080 MySQL3306

描述一次通信过程(五元组)

源IP
源端口号
目的IP
目的端口号
协议号

UDP协议

1、无连接

不需要创建连接就可以直接通讯,跟发微信一样,不需要对方先进行确认,知道对端的IP和端口号就直接进行传输, 不需要建立连接。
UCP不维护连接状态,也不跟踪这些参数,开销小。空间和时间上都具有优势。
分组首部开销小 TCP首部20字节,UDP首部8字节。

2、不可靠

发送者不知道接受者是否收到数据,没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返
回任何错误信息;

3、面向数据报(以DatagramPacket为单位进行读写操作)

应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并,不能够灵活的控制读写数据的次数和数量

4、UDP没有拥塞控制
应用层能够更好的控制要发送的数据和发送时间,网络中的拥塞控制也不会影响主机的发送速率。某些实时应用要求以稳定的速度发送,能容忍一些数据的丢失,但是不能允许有较大的时延(比如实时视频,直播等)

UDP原理

UDP协议格式
在这里插入图片描述

UDP首部有8个字节,由4个字段构成,每个字段都是两个字节
1.源端口: 源端口号,需要对方回信时选用,不需要时全部置0.
2.目的端口: 目的端口号,在终点交付报文的时候需要用到。
3.长度: UDP的数据报的长度(包括首部和数据)其最小值为8(只有首部)
一个UDP数据报的最大长度就是64K,数据比较少,如果应用层数据的长度超过64k,超出的部分就被截断了,于是就会发送一个残缺的数据。
所以一旦超出64k,要么手动在应用层拆分数据报(使用多个UDP数据报进行传输);要么就换成TCP协议
4.校验和: 检测UDP数据报在传输中是否有错,有错则丢弃。 比如去你妈让你去买菜要买:鸡蛋,西红柿,生菜,黄瓜,最后你妈叮嘱一句: 一共四样!!,(最后这个四样就是用来校验是否正确买到菜了,当然如果你把生菜买成了韭菜那也是四样,校验和也还是四所以我们可以得出结论)如果校验和不符合预期,说明数据一定是错了;但是如果校验和符合预期,数据也不一定就是正确无误的。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/char_m/article/details/107087883