五层协议之传输层

本文详细介绍了传输层的主要功能,包括传输层的两个关键协议UDP和TCP。UDP是一种无连接的服务,适合局域网广播和域名解析,而TCP提供面向连接的服务,确保可靠交付。文章还探讨了TCP的连接端点——套接字,以及TCP的报文首部格式。此外,讲解了可靠传输的工作原理,如ARQ协议、流水线传输和TCP的重传时间选择。最后,涉及了TCP的流量控制和拥塞控制策略,如慢开始、拥塞避免、快重传和快恢复,以及TCP连接的建立和释放过程。

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

五层协议之传输层

一、传输层概述

1. 传输层的功能

当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有传输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。

在这里插入图片描述

  • 传输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。

  • 传输层还要对收到的报文进行差错检测

  • 传输层需要有两种不同的运输协议,即面向连接的 TCP 和无连接的 UDP
    在这里插入图片描述

2. 两个主要协议

(1) 用户数据报协议 UDP (User Datagram Protocol)

(2) 传输控制协议TCP (Transmission Control Protocol)


  • UDP 在传送数据之前不需要先建立连接。对方的传输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。如局域网广播、域名解析。

  • TCP 则提供面向连接的服务。TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。

3. 端口

1)产生背景

端口为什么会产生?

我们知道,计算机的每个进程都有一个进程标识符(PID)。如果一个进程p给一个计算机A发请求,计算机A发送的答复数据也该由这个进程p负责处理,但是进程的创建和销毁都是动态的,导致发送方A无法确认这个答复包要交给目的计算机的哪个进程处理。而且有时我们会改换接收方的进程号,但并不需要通知所有发送方。

解决这个问题的方法就是在传输层使用协议端口号(protocol port number),或通常简称为端口(port)

虽然通信的终点是应用进程,但我们可以把端口想象是通信的终点,因为我们只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由 TCP 来完成。

区分软件端口和硬件端口:

  • 在协议栈层间的抽象的协议端口是软件端口。

  • 路由器或交换机上的端口是硬件端口。如Serial端口。

硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。

2)TCP端口

端口用一个 16 位端口号进行标志。

端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。

3)三类端口(了解)
  1. 熟知端口,数值一般为 0~1023

  2. 登记端口号,数值为1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复。

  3. 客户端口号或短暂端口号,数值为49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。

二、用户数据报协议UDP

1. UDP的特点

虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。

  • UDP 是无连接的,即发送数据之前不需要建立连接。

  • UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制

  • UDP 支持一对一、一对多、多对一和多对多的交互通信。

  • UDP 的首部开销小,只有 8 个字节。

2. UDP的首部格式

在这里插入图片描述

源端口、目的端口表示发送进程和接受进程。

长度指的是UDP首部和UDP数据的字节长度。

检验和的计算需要用到IP首部的部分信息,称之为伪首部。与UDP首部拼接在一起然后求和取反得到检验和。

在这里插入图片描述

计算完检验和后将伪首部丢弃。

三、传输控制协议TCP介绍

1. TCP的特点

  • TCP 是面向连接的传输层协议。

  • 每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。

  • TCP 提供可靠交付的服务。

  • TCP 提供全双工通信

  • 面向字节流

2. TCP的连接端点

TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是传输层的协议端口。TCP 连接的端点叫做套接字(socket)插口端口号和IP地址拼接构成了套接字

在这里插入图片描述

四、可靠传输的工作原理

1. 可靠传输的四种情况

在这里插入图片描述
在这里插入图片描述

这种可靠传输协议常称为自动重传请求ARQ(Automatic Repeat reQuest)。

还有一种情况是,当A发M1给B,B收到了,但B的回复包阻塞了。A等一段时间后于是重发M1, 这个M1中途丢了。但之前那个阻塞的回复包送达了A。此时A认为B收到了重传的M1,实际上重传的M1丢了。

但这没有任何影响,因为B保存了A第一次送达的M1。

2. 信道利用率


U = T D T D + R T T + T A U = \dfrac {T_D}{T_D + RTT + T_A} U=TD+RTT+TATD

<think>嗯,用户现在想了解应用层协议传输层协议的区别与联系。根据之前的对话,我之前已经详细介绍了各种应用层协议,比如FTP、HTTP、DNS等,并提到了它们使用的传输层协议如TCP和UDP。用户现在可能希望更深入理解这两层之间的关系,尤其是在功能上的划分和协作。 首先,我需要明确两者的基本定义。应用层协议是直接为应用程序服务的,处理具体的应用逻辑,比如HTTP负责网页传输,SMTP处理邮件发送。传输层协议则负责端到端的数据传输,确保数据正确送达,比如TCP提供可靠传输,UDP则更快速但不保证可靠性。 接下来,用户提供的引用内容中有提到UDP的可靠传输设计和数据传输大小限制的问题,这可能与传输层如何支持应用层有关。例如,引用[1]中的经典面试题提到如何基于UDP实现可靠传输,这可能涉及到应用层协议需要在UDP之上添加额外的机制,比如确认和重传,来弥补UDP的不可靠性。而传输层协议本身如TCP已经内置了这些可靠机制,所以应用层协议可以直接利用。 另外,引用[2]和[3]强调了传输层通过端口号定位具体应用进程,这说明了传输层和应用层在地址定位上的协作。应用层协议使用知名端口号,如HTTP的80端口,这样传输层能正确地将数据传递给对应的应用程序。同时,端口号的唯一性确保了进程之间的通信不会混乱,一个端口只能被一个进程绑定,但一个进程可以使用多个端口,这关系到应用层如何管理不同服务。 引用[4]提到应用层协议可能使用二进制格式来提高传输效率,这涉及到应用层协议设计时的数据表示方式,而传输层协议如UDP负责将这些数据包传输出去,不关心内容格式。这再次说明了两层的分工:应用层处理数据内容,传输层处理数据传输。 用户的问题可能还隐藏着对实际应用场景的兴趣,比如为什么某些应用选择TCP而另一些选择UDP。例如,实时通信类协议如RTP使用UDP,因为低延迟比可靠性更重要,而文件传输如FTP使用TCP,确保数据完整到达。 总结起来,应用层和传输层的区别主要在于职责划分:应用层关注应用逻辑和数据格式,传输层关注数据传输的可靠性和效率。两者的联系则体现在传输层为应用层提供数据传输服务,通过端口号定位应用进程,而应用层协议利用传输层的特性(如TCP的可靠性或UDP的速度)来实现不同的应用需求。 在回答时,需要结构清晰,先分点说明区别,再阐述联系,结合用户提供的引用中的例子,如DNS使用UDP、HTTP使用TCP,以及如何基于UDP设计可靠传输。同时,要确保回答符合用户之前的问题格式,使用中文字符和正确的LaTeX标记,最后生成相关问题,帮助用户进一步学习。</think>### 应用层协议传输层协议的区别与联系 #### **一、核心职责对比** | **层级** | **应用层协议** | **传输层协议** | |----------------|--------------------------------------------------|--------------------------------------------------| | **功能定位** | 直接为应用程序提供具体服务(如文件传输、邮件收发) | 提供端到端的数据传输服务(如可靠性保证、流量控制) | | **数据格式** | 定义具体业务数据的格式(如HTTP报文、DNS查询格式) | 不关心数据内容,仅处理传输单位(如TCP段、UDP数据报) | | **通信规则** | 规定应用交互流程(如SMTP的邮件发送步骤) | 规定传输控制机制(如TCP三次握手、UDP无连接特性) | --- #### **二、具体区别** 1. **服务对象** - **应用层**:面向用户程序(如浏览器、邮件客户端),通过协议实现特定功能(如$HTTP$传输网页、$SMTP$发送邮件)。 - **传输层**:面向网络通信,通过端口号(如TCP 80、UDP 53)将数据准确送达目标进程[^2]。 2. **数据封装** - **应用层**:数据单位为**应用报文**(如HTTP请求/响应),包含业务逻辑信息。 - **传输层**:数据单位为**段(TCP)**或**数据报(UDP)**,添加传输控制信息(如源/目的端口、校验和)。 3. **可靠性保证** - **应用层**:依赖传输层实现可靠性(如$HTTP$基于$TCP$的重传机制)。 - **传输层**:$TCP$提供可靠传输(确认应答、超时重传),$UDP$不保证可靠性(需应用层自行处理)[^1]。 4. **端口管理** - **应用层协议**绑定**知名端口号**(如$FTP$使用TCP 21,$DNS$使用UDP 53),由IANA统一分配[^3]。 - **传输层**通过端口号实现多路复用,确保进程间隔离(一个端口只能被一个进程绑定)[^2]。 --- #### **三、核心联系** 1. **依赖关系** 应用层协议必须基于传输层协议实现数据传输。例如: - $HTTP$依赖$TCP$实现可靠通信(如网页加载)。 - $DNS$依赖$UDP$实现快速查询(牺牲可靠性换取效率)[^3]。 2. **协议协作** - **传输层为应用层提供通信通道**: - $TCP$为需要可靠性的应用(如文件传输)提供保障。 - $UDP$为实时性优先的应用(如视频通话)提供低延迟支持。 - **应用层补充传输层不足**: - 基于$UDP$的$QUIC$协议(如HTTP/3)在应用层实现可靠性[^1]。 - 分片传输:应用层可拆分超过$UDP$限制(64KB)的数据(如$NFS$)[^4]。 3. **地址定位** - **IP地址 + 端口号 = 套接字**,传输层通过端口号将数据递交给目标应用进程(如浏览器监听80端口接收HTTP响应)[^2]。 --- #### **四、典型场景对比** | **场景** | 应用层协议示例 | 传输层协议选择 | 原因 | |------------------------|--------------------|--------------------|------------------------------| | 网页浏览 | $HTTP/HTTPS$ | $TCP$ | 需要可靠性保证 | | 域名解析 | $DNS$ | $UDP$ | 快速查询,允许少量丢包 | | 实时视频会议 | $RTP$ | $UDP$ | 低延迟优先,容忍部分数据丢失 | | 大文件传输 | $FTP$ | $TCP$ | 确保数据完整性和顺序 | --- #### **五、总结** - **区别**:应用层关注**业务逻辑**,传输层关注**数据传输质量**。 - **联系**:应用层协议通过传输层协议实现数据交互,两者通过**端口号**和**协议特性**协同工作。 - **设计启示**:选择传输层协议时需权衡**可靠性**与**效率**(如$TCP$ vs $UDP$),必要时在应用层补充机制(如自定义重传逻辑)[^1][^4]。 --- ### 相关问题 1. 为什么DNS协议主要使用UDP而非TCP? 2. 如何基于UDP实现类似TCP的可靠传输机制? 3. 端口号冲突会导致什么问题?如何解决?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值