网络知识-05 传输层-UDP

1 传输层

从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。

传输层提供的是应用程序间的逻辑通信,也就是说它向高层(应用层)屏蔽了下面网络层的细节,使应用程序看起来好像是在传输层之间沿着水平方向传输数据,但事实上两者之间并没有这样一条实际的物理连接。

传输层还要对收到的报文进行差错检测。在网络层中,IP数据报首部中的检测和字段,只检测首部是否出现差错而不检测数据部分。

传输层只要包括面向连接的TCP和无连接的UDP。当传输层采用TCP协议时,尽快网络层是不可靠的,但是这种逻辑通信也相当于一个全双工的可靠信道。而当采用UDP协议时,这种逻辑信道就是一条不可靠信道。

1.1 主要协议

协议RFC数据单元是否建立链接接收到数据报后是否确认
用户数据报协议UDP(User Datagram Protocol)RFC768UDP用户数据报不建立连接不需要任何确认
传输控制协议TCP(Transmission Control Protocol)RFC793TCP报文段建立连接需要确认

1.2 传输层端口

传输层通过端口(protocol port number)用以表示区分应用层具体是哪个应用进程在使用传输层传递数据。也就是说,只要应用进程把所传输的报文交到目的主机的某个目的端口,剩下的工作(即最后交付目的进程)就有TCP或UDP来完成。当然,某个应用程序指定的端口是可以修改的,我们所说的只是表示默认约定。

这里的端口指软件端口,而非硬件端口。例如:个人PC机一般只有一个网卡一个硬件端口,但是软件端口确有很多。

TCP/IP传输层用一个16位端口号(0~65535)来标识一个端口,但是注意,端口号只具有本地意义,不同计算机的相同端口号没有关联,0一般不用,所以允许有65535个不同的端口号。

附:TCP/UDP常见端口参考

传输层端口有可以分为以下两类。

1.2.1 服务器端使用的端口号

又分为两类:

  1. 熟知端口号(well-known port number)或系统端口号,数值为0~1023。详见
  2. 登记端口号,数值为1024~49151。这类端口号没有为熟知端口号的应用程序使用。但是必须在IANA按照规定的手续登记,以防止重复(当然属于内部程序时,可以不用登记)。

下面是一些常用的系统端口和指定的应用进程:

应用程序默认端口
FTP21
TELNET23
SMTP25
DNS53
TFTP69
HTTP80
SNMP161
SNMP(trap)162
HTTPS443

1.2.2 客户端使用的端口号

数值49152~65535。这类端口号仅在客户进程运行时才动态选择,因此又叫短暂端口号。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的端口号,因此可以把数据发送给客户进程。通信结束后,刚才已使用的客户端口号就不复存在,这个端口号就可以提供给其他客户进程使用。

2 用户数据报协议UDP

UDP协议在IP协议上增加了复用、分用和差错检测功能。

2.1 UDP的特点

  • 是无连接的。相比于TCP协议,UDP协议在传送数据前不需要建立连接,当然也就没有释放连接。
  • 是尽最大努力交付的。也就是说UDP协议无法保证数据能够准确的交付到目的主机。也不需要对接收到的UDP报文进行确认。
  • 是面向报文的。也就是说UDP协议将应用层传输下来的数据封装在一个UDP包中,不进行拆分或合并。因此,传输层在收到对方的UDP包后,会去掉首部后,将数据原封不动的交给应用进程。
  • 没有拥塞控制。因此UDP协议的发送速率不送网络的拥塞度影响。
  • UDP支持一对一、一对多、多对一和多对多的交互通信。
  • UDP的头部占用较小,只占用8个字节。

2.2 UDP的基本工作过程

  • UDP用户数据报传输过程中的封装与拆封
    工作过程

  • UDP报文传输队列
    传输队列

  • UDP的复用和分用
    复用和分用

2.3 UDP协议格式

每个UDP报文分为UDP报头和UDP数据区两部分。报头由4个16位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。

在这里插入图片描述

真实抓包结果:
抓包

2.3.1 源端口

这个字段占据UDP报文头的前16位,通常包含发送数据报的应用程序所使用的UDP端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选的,所以发送端的应用程序不一定会把自己的端口号写入该字段中。如果不写入端口号,则把这个字段设置为0。这样,接收端的应用程序就不能发送响应了。

2.3.2 目的端口

接收端计算机上UDP软件使用的端口,占据16位。

2.3.3 长度

该字段占据16位,表示UDP数据报长度,包含UDP报文头和UDP数据长度。因为UDP报文头长度是8个字节,所以这个值最小为8。

2.3.4 校验值

该字段占据16位,可以检验数据在传输过程中是否被损坏。校验值为伪头部,头部,data三部分校验和。

2.3.4.1 伪头部

UDP校验和中的伪头部,并非UDP报文中的有效数据,是提取了IP数据报中的源IP,目的IP信息并加上协议等字段构造的数据。伪头部在实际网络传输中,仅用作校验和计算使用,并不发送!因此称为伪头部。事实上在TCP校验和计算中也用到了伪头部,与UDP一致。

伪头部

伪首部(占用12个字节)为:

  • 4个字节的源IP地址;
  • 4个字节的目的IP地址;
  • 1个字节的0;
  • 一个字节的数字17;
  • 以及占用2个字节UDP长度;

接收端进行的校验和与UDP报文中的校验和相与,如果无差错应该全为1。如果有误,则将报文丢弃或者发给应用层、并附上差错警告。

2.3.4.2 校验和算法

UDP计算校验和的方法和计算IP数据报首部校验和的方法类似,不同的是IP数据报的校验和只校验IP数据报的首部,而UDP的校验和是把首部和数据部分一起都校验。

  1. 首先将把全0写入校验和字段。
  2. 把伪首部,UDP首部,UDP数据部分都看做许多个16位组成的字符串。若UDP数据部分不是偶数个字节,则补充0(但此补充字节不发送)。
  3. 按二进制反码计算出这些16位字的和。
  4. 将得出的和求反码,并写入校验和字段。

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值