计算机网络原理--传输层协议(UDP协议详解)

目录

1.端口号

2.UDP协议格式

校验和的作用

3.UDP的特点

无连接

不可靠

面向数据报

缓冲区

大小受限制

4.基于UDP的应用层协议


1.端口号

首先我们了解一个概念:端口号

在Internet上,各主机间通过TCP/TP协议发送和接收数据报,各个数据报根据其目的主机的ip地址来进行互联网络中的路由选择,将数据报传输到对应的主机上.那么数据交由那个程序使用呢?就需要用到端口号了

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

端口号是传输层协议的概念,我们在学习数据库时也用到了端口号,数据库这个应用程序安装的时候端口号默认是3306

它的作用就是用来区分一个主机上具体的应用程序的,一台主机上是运行着很多程序的,那么通过网络层获取到的数据(使用IP来区分主机)要交给哪个程序来处理,就要靠端口号来区分了(使用端口号区分应用程序)

因此在同一个主机上,一个端口号不能被多个进程绑定,当一个进程绑定了3306后再有另一个进程绑定3306,绑定操作失败,抛出异常.

传输层有两个重要的协议,TCP和UDP协议.它们的报头都会包含源端口号和目的端口号

这俩的端口号都是使用2个字节,16个比特位来表示的,一个端口号的取值范围是:0~65535

在这个范围内,又有一些"知名端口号/具名端口号",这些端口号是已经分配给了一些知名的广泛使用的应用程序了

知名端口号的范围是:0~1023.

看一些知名端口号:

其它的端口号由操作系统随机分配给一台主机上的应用程序

2.UDP协议格式

对于UDP报头来说,报头一共就8个字节,分成4个部分(每个部分两个字节)

 这是UDP协议的报文结构,是为了方便理解的

UDP报头真正的的格式如下:

校验和的作用

验证传输的数据是否正确

网络传输中可能会受到一些干扰,在有干扰的情况下可能出现"比特翻转"的情况

一旦数据变了,那么数据的含义也就改变了,传输就出现了差错,因此要引入校验和来判断数据的正确性

具体过程是:

发送方会计算校验和,然后发送数据.接收方接受数据后再次进行计算校验和,如果校验和和发送方计算的结果是相同的,数据就没问题,如果校验和不同,那么数据肯定也出错了

但是也有可能出现这种情况:数据传输过程错了,但是接收方得到的校验和时恰好和发送方的一样,这样的情况概率很小,但是也存在

因此:如果数据内容相同 ,得到的校验和一定相同,校验和相同,原始数据内容不一定相同,因为是极小概率,在工作中认为校验和相同,数据就是正确的

实际网络传输中是将我们的数据内容的所有字节都参与生成校验和的运算,任何一个字节出问题,都能及时发现

针对网络传输的数据来说,生成校验和的算法有很多种:

1.CRC 循环冗余校验码(Cyclic Redundancy Check):将数据的每个字节循环累加,溢出了高位就丢弃,好计算,但是校验效果不好,如果数据同时变动了两个比特位,就会出现内容变了,但校验和不变的情况

2.MD5

3.SHA1

这两个比较靠谱,都是进行了一些数据公式进行复杂的变换,MD5 的特点是:

1.定长.得到的结果是定长的,无论原始数据多长,得到的校验和都是固定长度

2.冲突概率小,原始数据只变动一个地方,计算出来的MD5值差别也很大

3.是不可逆的,通过MD5还原成原始数据很困难,理论上不可实现,计算量很大

这些特点让MD5的作用更多了:校验和,计算哈希值的方式,加密

对hello 字符串进行加密

 解密是很难的

我们改动一个字符后,MD5值完全不一样了,改动很大 

3.UDP的特点

无连接

知道对端的IP和端口号就可以进行传输,不需要建立连接

不可靠

没有安全机制,发送端发送数据报以后,如果因为网络故障没有发送到对端,传输层也不会给应用层反馈任何错误信息

面向数据报

应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并

UDP载荷中放的是完整的应用层数据报

应用层发送数据时,先将数据封装成一个数据报,然后交给传输层.此时,传输层将接受的数据报(通过UDP socket的send方法拿到的数据)当作载荷,再在载荷前拼接上UDP报头(相当于字符串的拼接,是二进制的,不是文本),构成了传输层数据报,此时,UDP报头中就包含了一些重要的信息

缓冲区

UDP只有接收缓冲区,没有发送缓冲区

UDP没有真正意义上的 发送缓冲区。发送的数据会直接交给内核,由内核将数据传给网络层协议 进行后续的传输动作

UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一 致;如果缓冲区满了,再到达的UDP数据就会被丢弃

大小受限制

UDP的报文长度也是2个字节表示的,范围是:0~65535,也就是64kb.

一个UDP数据报最大只能传输64kb的数据,但是我们拍个照都好几个MB了,因此一UDP数据报还是一个比较小的数据了.那么应用层数据报超过了64KB怎么办呢?

我们就需要在应用层通过代码的方式,针对数据报进行分包,拆成多个包通过多个UDP数据报进行传输(send多次)...

或者直接放弃使用UDP,换成TCP协议,TCP传输数据大小是没有限制的

4.基于UDP的应用层协议

DNS、TFTP(简单文件传输协议)、SNMP(简单网络管理协议)。
1、DNS:Domain Name Service (域名服务) 默认端口:53
2、TFTP:Trivial File Transfer Protocol (简单文件传输协议),默认端口:69
3、SNMP:Simple Network Management Protocol (简单网络管理协议) 通过UDP端口161接收,只有Trap信息采用UDP端口162。
4、NTP:Network Time Protocol (网络时间协议),默认端口:123

猜你喜欢

转载自blog.csdn.net/chenchenchencl/article/details/128934931