计算机网络---传输层的概述

本文详细解析了传输层在OSI模型中的作用,介绍了其基本功能,包括数据分割、端口机制、面向连接与无连接服务的区别,以及TCP和UDP的特性。涵盖了端口号、套接字的概念和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)定义

    传输层是整个网络体系结构中的关键层次之一,主要负责向两个主机中进程之间的通信提供服务。由于一个主机同时运行多个进程,因此运输层具有复用和分用功能。传输层在终端用户之间提供透明的数据传输,向上层提供可靠的数据传输服务。传输层在给定的链路上通过流量控制、分段/重组和差错控制来保证数据传输的可靠性。传输层的一些协议是面向链接的,这就意味着传输层能保持对分段的跟踪,并且重传那些失败的分段。

    传输层是国际标准化组织提出的开放系统互连(OSI)参考模型中的第四层。该层协议为网络端点主机上的进程之间提供了可靠、有效的报文传送服务。其功能紧密地依赖于网络层的虚拟电路或数据报服务。传输层定义了主机应用程序之间端到端的连通性。传输层也称为运输层,传输层只存在于端开放系统中,是介于低3层通信子网系统和高3层之间的一层,但是很重要的一层,因为它是源端到目的端对数据传送进行控制从低到高的最后一层。

传输层的服务一般要经历传输连接建立阶段,数据传送阶段,传输连接释放阶段3个阶段才算完成一个完整的服务过程。而在数据传送阶段又分为一般数据传送和加速数据传送两种形式。传输层中最为常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)、用户数据报协议UDP(User Datagram Protocol)传输层提供逻辑连接的建立、传输层寻址、数据传输、传输连接释放、流量控制、拥塞控制、多路复用和解复用、崩溃恢复等服务。

 

(二)基本功能 

传输层提供了主机应用程序进程之间的端到端的服务,基本功能如下:

  •  分割与重组数据

  •  按端口号寻址

  • 连接管理

  • 差错控制和流量控制,纠错的功能

  • 传输层要向会话层提供通信服务的可靠性,避免报文的出错,丢失,延迟时间紊乱、重复、乱序等差错。

  

(三)传输层的寻址与端口

1. 端口的作用
      端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。端口是传输层服务访问点TSAP,它在传输层的作用类似于IP地址在网络层的作用或 MAC地址在数据链路层的作用,只不过IP地址和MAC地址标识的是主机,而端口标识的是主机中的应用进程。
       数据链路层的SAP是MAC 地址,网络层的SAP是IP地址,传输层的SAP是端口。
       在协议栈层间的抽象的协议端口是软件端口,它与路由器或交换机上的硬件端口是完全不同的概念。硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与传输实体进行层间交互的一种地址。传输层使用的是软件端口。
2.端口号
    应用进程通过端口号进行标识,端口号长度为16bit,能够表示65536(216)个不同的端口号,端口号只具有本地意义,即端口号只标识本计算机应用层中的各进程,在因特网中不同计算机的相同端口号是没有联系的。根据端口号范围可将端口分为两类:
 (1)服务器端使用的端口号。它又分为两类,最重要的一类是熟知端口号,数值为0~1023,IANA(互联网地址指派机构)把这些端口号指派给了TCP/IP最重要的一些应用程序,让所有的用户都知道。另一类称为登记端口号,数值为1024~49151。它是供没有熟知端口号的应用程序使用的,使用这类端口号必须在IANA 登记,以防止重复。
一些常用的熟知端口号如下:

应用程序FTPTELNETSMTPDNSTFTPHTTPSNMP
熟知端口号212325536980161

 

 


  (2)客户端使用的端口号,数值为49152~65535。由于这类端口号仅在客户进程运行时才动
态地选择,因此又称短暂端口号(也称临时端口)。通信结束后,刚用过的客户端口号就不复存在,从而这个端口号就可供其他客户进程以后使用。


3.套接字
   在网络中通过IP地址来标识和区别不同的主机,通过端口号来标识和区分一台主机中的不同应用进程,端口号拼接到IP地址即构成套接字 Socket。在网络中采用发送方和接收方的套接字来识别端点。套接字,实际上是一个通信端点,即套接字   Socket =(IP 地址:端口号)
    它唯一地标识网络中的一台主机和其上的一个应用(进程)。
    在网络通信中,主机A发给主机B的报文段包含目的端口号和源端口号,源端口号是“返回地址”的一部分,即当B需要发回一个报文段给A时,B到A的报文段中的目的端口号便是A到B的报文段中的源端口号(完全的返回地址是A的IP地址和源端口号)

 

(四)、无连接与面向连接服务

      面向连接服务就是在通信双方进行通信之前,必须先建立连接,在通信过程中,整个连接的
情况一直被实时地监控和管理。通信结束后,应该释放这个连接。
       无连接服务是指两个实体之间的通信不需要先建立好连接,需要通信时,直接将信息发送到
“网络”中,让该信息的传递在网上尽力而为地往目的地传送。

      TCP/IP 协议族在IP层之上使用了两个传输协议:一个是面向连接的传输控制协议(TCP),采用TCP时,传输层向上提供的是一条全双工的可靠逻辑信道;另一个是无连接的用户数据报协议(UDP),采用UDP 时,传输层向上提供的是一条不可靠的逻辑信道。
     TCP提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP不提供广播或组播服务。由于TCP提供面向连接的可靠传输服务,因此不可避免地增加了许多开销,如确认、流量控制、计时器及连接管理等。这不仅使协议数据单元的头部增大很多,还要占用许多的处理机资源。因此TCP主要适用于可靠性更重要的场合,如文件传输协议(FTP)、超文本传输协议(HTTP)、远程登录(TELNET)等。
       UDP是一个无连接的非可靠传输层协议。它在IP之上仅提供两个附加服务:多路复用和对数据的错误检查。IP 知道怎样把分组投递给一台主机,但不知道怎样把它们投递给主机上的具体应用。UDP在传送数据之前不需要先建立连接,远程主机的传输层收到UDP报文后,不需要给出任何确认。由于UDP比较简单,因此执行速度比较快、实时性好。使用UDP的应用主要包括小文件传送协议(TFTP)、DNS、SNMP 和实时传输协议(RTP)。


 
注意:

  • IP 数据报和 UDP 数据报的区别:IP 数据报在网络层要经过路由的存储转发;而 UDP 数据报在传输层的端到端的逻辑信道中传输,封装成IP数据报在网络层传输时,UDP数据报的信息对路由是不可见的。 

  •  TCP 和网络层虚电路的区别:TCP 报文段在传输层抽象的逻辑信道中传输,对路由器不可见;虚电路所经过的交换结点都必须保存虚电路状态信息。在网络层若采用虚电路方式,则无法提供无连接服务;而传输层采用 TCP 不影响网络层提供无连接服务。

### 传输层 TCP 和 UDP 的工作原理 #### 一、传输层概述 传输层计算机网络体系结构中的关键层次,位于网络层之上和应用层之下。其主要功能是为终端用户提供端到端的可靠通信服务。传输层协议包括用户数据报协议(UDP)和传输控制协议(TCP)。两者的主要区别在于可靠性、连接方式以及应用场景[^1]。 #### 二、UDP 工作原理 UDP 是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。它的主要特点如下: - **无连接**:在发送数据之前不需要建立连接,因此开销较小。 - **不可靠**:不保证数据包的顺序和完整性,也不进行重传机制。 - **首部格式简单**:UDP 首部仅有 8 字节,包含源端口、目的端口、长度和校验和字段[^3]。 - **适用场景**:适用于对实时性要求较高但对可靠性要求较低的应用,如视频流媒体、在线游戏等。 ```python # 示例代码:使用 UDP 发送和接收数据 import socket # 创建 UDP 套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 发送数据 message = b"Hello, UDP!" sock.sendto(message, ("localhost", 12345)) # 接收数据 data, addr = sock.recvfrom(1024) print(f"Received: {data.decode()} from {addr}") ``` #### 三、TCP 工作原理 TCP 是一种面向连接的传输层协议,提供可靠的、全双工的数据流传输服务。其主要特点如下: - **面向连接**:在传输数据前需要通过三次握手建立连接,传输完成后通过四次挥手释放连接[^2]。 - **可靠传输**:通过确认机制、超时重传、流量控制和拥塞控制来确保数据的可靠传递。 - **首部格式复杂**:TCP 首部至少有 20 字节,包含源端口、目的端口、序列号、确认号、窗口大小、校验和等字段[^3]。 - **滑动窗口机制**:用于实现流量控制和提高传输效率。 - **拥塞控制**:包括慢开始、拥塞避免、快重传和快恢复等算法,以避免网络拥塞[^1]。 ```python # 示例代码:使用 TCP 建立连接并传输数据 import socket # 创建 TCP 套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接到服务器 sock.connect(("localhost", 12345)) # 发送数据 message = b"Hello, TCP!" sock.sendall(message) # 接收数据 data = sock.recv(1024) print(f"Received: {data.decode()}") # 关闭连接 sock.close() ``` #### 四、TCP 和 UDP 的对比 | 特性 | TCP | UDP | |-----------------|-----------------------------------|---------------------------------| | 可靠性 | 可靠,提供确认机制和重传机制 | 不可靠,不保证数据顺序和完整性 | | 连接方式 | 面向连接 | 无连接 | | 首部开销 | 较大(至少 20 字节) | 较小(8 字节) | | 应用场景 | 文件传输、邮件、网页浏览等 | 实时音视频、在线游戏等 | #### 五、TCP 段头的关键字段 TCP 段头包含多个重要字段,用于控制数据传输过程。例如: - **源端口和目的端口**:标识发送方和接收方的应用程序。 - **序列号和确认号**:用于确保数据按顺序传递。 - **窗口大小**:用于流量控制,指示接收方的可用缓冲区大小。 - **校验和**:用于检测数据传输过程中是否发生错误[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘 关

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值