传输层--UDP协议

传输层的功能:

传输层一个很重要的功能就是复用和分用。应用层不同进程的报文通过不同端口向下交到传输层,再往下就共用网络层提供的服务。

具体功能:

1.传输层是为应用进程之间提供端到端的逻辑通信(网络层是为主机之间提供逻辑通信)。
2.传输层要对收到的报文进行差错检测。
3.传输层有很多种协议,这里主要讲两种不同的运输协议,即面向连接传输控制协议TCP(Transmission Control Protocol)和无连接的用户数据报协议UDP(User Datagram Protocol)。

本文先讲解UDP协议,下一篇博客讲解TCP协议。

前提

1.对于TCP/IP模型中的任一层来说,如果当前层上面还有分层,当数据报自底向上分用的时候,由于是一对多,所以需要知道要将当前数据交给上一层的谁。
2.另一方面还需要知道,如何将报头与有效数据进行分隔。

UDP协议的报头

1.报头如下:

这里写图片描述

2.报头详细解释:

(1)源端口号:对于TCP/IP模型中的任一层来说,如果当前层上面还有分层,当数据报自底向上分用的时候,由于是一对多,所以需要知道要将当前数据交给上一层的谁。UDP是传输层的协议,传输层的上一层是应用层,对于应用层的服务来说,是以端口号来区分各个服务进程,所以传输层的协议需要知道上一层的端口号。需要知道是哪个服务进程发给我的报文,所以需要16位的源端口号。
(2)目的端口号:同样需要知道是要发给哪个服务进程,所以还需要16位的目的端口号。

  • 从这里可以看出来,当我们将本地端口号转换为网络字节序对应的端口号时,用到的是htons函数,s表示的就是short,就占16个比特位。

(3)16位总长度:因为UDP是面向数据报的,所以需要知道每个报文的总长度。总长度表示能传输数据的最大长度,包括UDP首部和UDP数据。由于总长度是16位,所以最大为64k.

  • 因为64k很小,这极大限制了使用UDP的场景,如果当用户传来的数据超过64k,如果想要用UDP,用户就必须自己进行分包,将数据报进行切分,分成小的数据报,最后用户再进行组装,但是很可能会出错,因为如果出现丢包问题,就无法进行组装。

(4)16位校验和:因为数据再传输过程中,可能会出现收到的数据与发送的数据不一致,因此需要校验和来进行校正,如果校验和出错,那么当前数据报直接被丢弃。

  • 什么是校验和?
    例如:当我们买菜的时候,菜比较多,有可能记不住,但是每个菜都会有数量,最后可以根据数量来判断当前买的菜是否正确,这种数量之和就叫校验和。

3.可以看到:
(1)UDP的报头长度为8字节,所以对于UDP数据报来说,前面8字节就是报头,后面的数据就是有效数据,通过定长的报头做到了将有效载荷与报头进行分隔。
(2)UDP通过端口号知道我要将我的有效数据交给上一层的谁。
(3)因为UDP报头里面有一个字段叫16位UDP(总)长度,这就做到了将报文与报文之间进行分隔。

UDP协议的特点

1.无连接

(1)什么叫连接?
当我们打电话时,我们拨号的动作就叫建立连接,当对方接听之后,双方才开始进行通信。而发短信就没有建立连接。
也就是:当我们发送数据时需要给对方说一下,我要向你发送数据了,当你回应我之后,我再给你发,我向你询问再收到你回应的过程就叫做建立连接。
(2)为什么UDP是无连接的?
因为UDP只用知道对方的端口号就可以直接进行数据间传递,没有任何建立连接的过程。

2.不可靠

(1)什么叫可靠?
我向你发送数据,无论你收没收到,我都知道,并且还要保证你收到的数据和我发送的数据一致,并且还要保证发送的数据能够按序到达。
(2)为什么UDP不可靠?
因为UDP不包含任何确认机制,发送数据对方是否收到我不知道,如果数据在网路传输过程中丢失也不知道更不会重发等。

3.面向数据报

(1)什么是面向数据报?
如果发送的数据为10k,那么接收的数据大小必须为10k,不能分10次接收,每次接收1k。并且取数据要么取1个,要么取两个,不能取半个。
(2)面向数据报的缺点
不够灵活的对数据进行发送和接收。

UDP其它知识

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

(1)因为UDP不可靠,如果发送的数据包在网络传输过程中丢失,UDP不会在进行重发,也就不需要保存当前数据的拷贝,因此就不需要有发送缓冲区。
(2)因为操作系统会将收到的数据放置进缓冲区里面,所以需要有接收缓冲区。对于UDP的接收缓冲区来说,如果当前缓冲区已经满了,如果再接收到数据,就会将数据包进行丢弃;由于网络有延迟,所以发送的数据包与接收到的数据包顺序可能不一致。

2.为什么UDP不可靠,现在还要使用UDP协议呢?

(1)由于UDP协议不保证可靠性,就会使得其它方面变得比较好例如效率变得很高,并且用户基于UDP编程时,代码也会比较简单。
(2)另一方面,有些数据在传输过程中不用要求完全可靠,丢失几个数据包也没有大的影响,因此可以使用UDP但使得效率变得比较高。例如:视频在传输过程中,就可以使用UDP协议,偶尔丢失一些帧,并不影响视频的观看。

3.基于UDP的应用协议(这里列举后面会用到的)

(1)DNS:域名解析协议;
(2)DHCP:动态主机配置协议

猜你喜欢

转载自blog.csdn.net/xu1105775448/article/details/80928566