计算机网络 运输层上 | 运输层概述 UDP协议 端口 套接字

2023-12-20 17:36:38

1 运输层概述

1.1 运输层存在的意义

之前我们讲网络层的时候,已经可以将信息从一个主机传递到另一个主机了。

那么为什么我们还需要运输层呢?

是因为我们两个主机通信的时候,大多数情况是两个主机不同的进程在通信,比如我们浏览器访问需要一个进程,发邮件又需要一个进程。很多时候这些进程都是并行通信的。那么网络层是无法区分的,实际的区分通信的不同进程就交给了运输层,这也是运输层的重要作用——复用和分用

当然除了复用和分用,运输层还提供一些其他的功能如差错检测等

应用层不同进程的报文通过不同的端口向下交付到运输层

运输层提供应用进程的逻辑通信——逻辑通信的意思是:运输层之间的通信好像是沿着水平方向传送数据,但事实上这两个运输层之间并没有一条水平方向的物理连接

所以总结来看

网络层和运输层的区别

网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信

1.2 运输层协议概述

运输层主要有两个不同的运输协议

TCP和UDP

他们各自的PDU(运输协议单元如下)

UDP:它的PDU是TCP报文段

TCP:它的PDU是UDP报文段或用户数据报

那么实际中运输层如何区分不同的进程呢?通过抽象了端口号这种方式

由此可见,两个计算机中的进程需要对方的IP地址,还要知道对方的端口号(为了找到对方计算机中的应用程序)

不同端口号代表不同进程。

设计者们对端口号做了如下一些规定

1.3 主要端口号

两大类端口

(1)服务端使用的端口号

又分为两大类

熟知端口,数值一般为0~1023

? 熟知端口号用来指派给TCP/IP最重要的一些程序,如下图所示

登记端口,数值为1024~49151

? 没有数值端口使用的,使用的话必须登记

(2)客户端使用的端口号

短暂端口号,数值49152~65535

? 仅在客户端进程运行时动态选择,因此又叫做短暂端口号
在这里插入图片描述

下面分别讨论UDP和TCP

其中UDP比较简单

2 运输层主要协议 UDP

UDP只在IP数据报上增加了很少一点的功能,即端口功能和差错检测的功能

2.1 UDP的特点

  1. UDP是一种无连接协议
  • 提供无连接服务 传送数据前不需要先建立连接
  • 不提供可靠交付 对方的运输层在收到UDP报文后,不需要给出任何确认
  1. 尽最大努力交付
  2. 没有拥塞控制
  3. UDP支持一对一,一对多,多对一和多对多的交互通信
  4. 对于应用层的报文,不合并不拆分,多长就都发送
  5. UDP首部开销较小

2.2 UDP首部格式

UDP首部很简单就八个字节,由四个字段组成,每个字段长度都是2字节

  1. 源端口
  2. 目的端口
  3. 长度 数据报长度,最小值是8
  4. 检验和 检测传输中是否有错

2.3 UDP工作流

如果接收方UDP发现报文端口号不正确,就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方

对于UDP的差错检测,和IP数据报检测方法类似

  1. 首先,将UDP首部中的检验和字段置为0,以便进行计算。

  2. 将UDP伪首部添加到UDP数据包前面。伪首部包含了一些IP层的信息,用于计算检验和。伪首部的格式如下:

    Source IP Address (32 bits)
    Destination IP Address (32 bits)
    Reserved (8 bits, 值为0)
    Protocol (8 bits, UDP的协议值为17)
    UDP Length (16 bits, UDP首部+UDP数据的总长度)
    

    伪首部中的字段分别是源IP地址、目标IP地址、保留字段、协议字段(UDP的协议值为17)和UDP长度字段。这些字段一起构成了伪首部。

  3. 将UDP伪首部的各字段以及UDP首部和UDP数据中的所有16位字(如果数据不是16位的倍数,需要填充0使其满足16位字的条件)进行按位求和。这意味着将它们视为16位整数,将它们相加,如果结果溢出,则将溢出部分加到总和的末尾。

  4. 取总和的反码(将所有位取反,1变为0,0变为1),并将结果存储在UDP首部的检验和字段中。

  5. 发送方将带有计算后的检验和字段的UDP数据包发送到目标主机。

  6. 接收方在收到UDP数据包后,重复以上步骤,计算接收方的检验和。

  7. 接收方将计算得到的检验和与UDP首部中的检验和字段进行比较。如果它们匹配,说明数据包未损坏;如果不匹配,说明数据包可能已损坏或被篡改,接收方可以选择丢弃这个数据包。

总之,UDP检验和用于检测UDP数据包在传输过程中的完整性,但它不提供数据包的可靠传输和重传机制。如果检验和不匹配,接收方可以选择忽略数据包或向上层报告错误,但UDP本身不会进行重传。这是与TCP不同的地方,TCP提供了可靠的数据传输和重传机制。

文章来源:https://blog.csdn.net/Q52099999/article/details/135111306
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。