前言:本系列文章旨在通过TCP/IP协议簇自下而上的梳理大致的知识点,从计算机网络体系结构出发到应用层,每一个协议层通过一篇文章进行总结,本系列正在持续更新中...
计网期末复习指南(一):计算机网络体系结构 | 计网期末复习指南(二):物理层 | 计网期末复习指南(三):数据链路层 |
计网期末复习指南(四):网络层 | 计网期末复习指南(三):运输层 | 计网期末复习指南(六):应用层 |
目录
一.运输层概述
二.TCP协议
▐ 可靠传输的工作原理
停止等待ARQ(Stop-and-Wait ARQ)
回退N步ARQ(Go-Back-N ARQ)
选择性重传ARQ(Selective Repeat ARQ)
示例说明
▐ TCP的特点
▐ 三次握手与四次挥手
▐ TCP报文结构
▐ 超时重传时间
详细步骤
示例计算
三.UDP协议
▐ UDP的特点
▐ UDP报文结构
▐ UDP的工作过程
四.UDP与TCP的比较
五.端口
▐ 端口号的分类
▐ 常见的端口号
一.运输层概述
在计算机网络中,运输层(Transport Layer)是OSI(开放系统互联)模型中的第四层,它位于网络层之上,会话层之下。运输层的主要功能是为应用层提供可靠的端到端通信服务,确保数据在网络中传输的完整性和顺序性。
在TCP/IP模型中向上为应用层提供通信服务,从通信和信息处理的角度上来说,运输层属于面向通信部分的最高层,同时也是用户功能中的最底层。运输层主要提供应用进程之间的逻辑通信,它与网络层的区别在于,网络层主要为主机之间通信提供服务,而运输层则在网络层的基础上,为应用进程之间的通信提供服务。
- OSI模型:在OSI模型中,运输层位于网络层之上,会话层之下,主要负责端到端的数据传输和控制。
- TCP/IP模型:在TCP/IP模型中,运输层对应于传输层,负责提供传输服务,主要包括TCP和UDP协议。
根据应用程序的不同需求,运输层主要提供俩中不同的运输协议:面向连接的TCP和无连接的UDP。通过使用TCP和UDP协议,运输层满足了不同应用对传输服务的需求,既能提供高可靠性,也能满足对低延迟的要求。
运输层的功能大致总结如下
-
数据分段与重组:
- 运输层将来自应用层的大块数据分成更小的段,以便通过网络传输。
- 到达目的地后,运输层负责将这些段重新组装成原来的数据。
-
端到端连接:
- 运输层在发送端和接收端之间建立和维护连接,确保数据的有序传输。
- 提供连接管理,包括建立连接、数据传输和连接释放。
-
流量控制:
- 运输层通过流量控制机制,防止发送端发送数据过快而导致接收端缓存溢出。
- 常见的流量控制机制包括滑动窗口协议。
-
错误检测与纠正:
- 运输层使用校验和等技术检测数据传输中的错误。
- 提供错误恢复机制,如重传错误数据段,以确保数据的完整性。
-
可靠传输:
- 通过确认和重传机制,确保数据段成功送达接收端。
- 提供超时重传机制,当确认未在预期时间内收到时,重传数据段。
-
多路复用与多路分解:
- 运输层通过端口号区分不同的应用进程,允许多个应用共享同一个网络连接。
- 多路复用:将来自不同应用的数据封装到相同的网络连接上。
- 多路分解:将收到的数据段分发到正确的应用进程。
二.TCP协议
TCP协议(Transmission Control Protocol,传输控制协议)是一种基于连接的、可靠的、面向字节流的传输层通信协议。它是Internet协议套件中的一部分,用于实现可靠的数据传输。
TCP协议提供了可靠的、有序的、面向连接的数据传输。它通过建立连接、拆分数据成小块(称为段),并使用确认和重传机制来确保数据的可靠传输。TCP通过流量控制和拥塞控制机制,调整数据的传输速率,以避免网络拥塞和丢包现象。
TCP协议提供了端到端的传输,即数据从发送方传输到接收方,保持了数据的完整性和顺序。它还支持全双工通信,即发送和接收数据同时进行。TCP协议使用IP地址和端口号来标识发送方和接收方,以便正确地将数据传输到目标设备上的相应进程。
▐ 可靠传输的工作原理
我们说TCP协议是属于可靠传输协议,对于这里的可靠性,我们需要通过一种机制来保证。
自动重传请求(Automatic Repeat reQuest,ARQ)是一种可靠传输机制,用于确保数据在通信过程中正确、无误地到达接收方。ARQ机制通过在数据包出错或丢失时重新传输数据包来实现可靠传输。ARQ主要有三种类型:停止等待ARQ、回退N步ARQ(Go-Back-N ARQ)和选择性重传ARQ(Selective Repeat ARQ)。
停止等待ARQ(Stop-and-Wait ARQ)
在停止等待ARQ中,发送方发送一个数据包后必须等待接收方的确认(ACK)才能继续发送下一个数据包。如果在一定时间内未收到确认,发送方会重传该数据包。
工作原理:
- 发送方发送数据包,并启动定时器。
- 接收方收到数据包后,发送确认(ACK)回给发送方。
- 发送方收到确认后,发送下一个数据包。
- 如果发送方未在超时时间内收到确认,重传数据包。
优点:实现简单。
缺点:信道利用率低,因为发送方必须等待确认后才能发送下一个数据包。
回退N步ARQ(Go-Back-N ARQ)
在Go-Back-N ARQ中,发送方可以连续发送多个数据包,而不必等待每个数据包的确认。接收方按序接收数据包,若发现某个数据包有错误或丢失,接收方将丢弃该数据包以及其后的所有数据包,并发送该错误数据包的编号回给发送方。发送方收到该编号后,回退到该编号重新发送。
工作原理:
- 发送方连续发送多个数据包,并为每个数据包分配序列号。
- 接收方收到数据包后,按序确认(ACK)已收到的数据包。
- 如果接收方发现某个数据包有错误或丢失,发送一个负确认(NAK)或不发送确认。
- 发送方收到NAK或超时后,回退到错误数据包的序列号,重新发送从该序列号开始的所有数据包。
优点:提高了信道利用率。
缺点:重传开销较大,因为需要重传错误数据包之后的所有数据包。
选择性重传ARQ(Selective Repeat ARQ)
在选择性重传ARQ中,发送方也可以连续发送多个数据包,但接收方只请求重传有错误或丢失的数据包,而不是所有后续数据包。接收方会缓存按序到达的数据包,并在收到所有必要的数据包后将其按序提交给上层应用。
工作原理:
- 发送方连续发送多个数据包,并为每个数据包分配序列号。
- 接收方收到数据包后,发送确认(ACK)已收到的数据包。
- 如果接收方发现某个数据包有错误或丢失,只请求重传该数据包。
- 发送方只重传接收方请求的有错误或丢失的数据包。
优点:
- 提高了信道利用率。
- 减少了重传开销,因为只重传有错误或丢失的数据包。
缺点:
- 实现较复杂,需要接收方具备缓存能力以按序存储和重组数据包。
示例说明
假设窗口大小为N,数据包按序号编号为1, 2, 3, ..., n。
停止等待ARQ:
- 发送方发送数据包1,等待ACK1。
- 收到ACK1后,发送数据包2,等待ACK2。
- 重复上述过程。
回退N步ARQ:
- 发送方连续发送数据包1, 2, 3, ..., N。
- 接收方按序接收并确认(ACK1, ACK2, ...)。
- 如果数据包3丢失,接收方丢弃后续包,发送ACK2(或NAK3)。
- 发送方收到ACK2(或NAK3),重传数据包3及后续数据包。
选择性重传ARQ:
- 发送方连续发送数据包1, 2, 3, ..., N。
- 接收方按序接收并确认(ACK1, ACK2, ...)。
- 如果数据包3丢失,接收方发送NAK3。
- 发送方只重传数据包3。
▐ TCP的特点
TCP协议的主要特点包括:面向连接、可靠传输、流量控制、差错检测
-
面向连接:TCP 是面向连接的协议,在数据传输前需要建立连接,并在传输完成后释放连接。三次握手(Three-way Handshake):建立连接的过程。四次挥手(Four-way Handshake):断开连接的过程。
-
可靠传输:TCP 提供可靠的数据传输,通过序列号、确认号和重传机制确保数据的完整性和顺序性。超时重传:如果数据包未在预期时间内收到确认,TCP 会重传数据包。
-
流量控制:TCP 使用滑动窗口机制来控制发送方发送数据的速率,防止接收方缓存溢出。
-
拥塞控制:TCP 包括拥塞控制算法,如慢启动、拥塞避免、快速重传和快速恢复,以防止网络拥塞。
在上述特点中,滑动窗口机制和拥塞控制算法非常的重要,需要明白大致是怎么样个流程。
▐ 三次握手与四次挥手
三次握手本质上是建立连接的过程,分为以下三步骤
- SYN:客户端向服务器发送一个 SYN (synchronize) 包,表示请求建立连接。
- SYN-ACK:服务器接收到 SYN 包后,向客户端发送一个 SYN-ACK 包,表示同意建立连接并进行确认。
- ACK:客户端接收到 SYN-ACK 包后,向服务器发送一个 ACK (acknowledgment) 包,表示确认连接建立。
连接建立完成后,客户端和服务器可以开始数据传输。
在数据传输又包含了以下要点
- 数据分段:TCP 将大块数据分段成适合网络传输的小段,每个段都有序列号。
- 确认机制:接收方收到数据段后,发送确认包 (ACK) 给发送方,确认已接收到的数据段。
- 重传机制:如果发送方未在预期时间内收到确认包,会重传数据段。
- 窗口机制:滑动窗口用于流量控制,决定发送方在未接收到确认前可以发送的数据量。
四次挥手本质上是断开连接的过程
- FIN:一方(通常是客户端)发送一个 FIN (finish) 包,表示希望关闭连接。
- ACK:接收方接收到 FIN 包后,发送一个 ACK 包,表示确认接收到关闭请求。
- FIN:接收方也发送一个 FIN 包,表示同意关闭连接。
- ACK:发送方接收到 FIN 包后,发送一个 ACK 包,表示确认关闭连接。
连接释放完成后,双方的通信连接正式断开。
▐ TCP报文结构
TCP 报文段由头部和数据部分组成。头部的结构如下:
字段名 | 长度 (比特) | 描述 |
---|---|---|
源端口 | 16 | 发送方的端口号 |
目的端口 | 16 | 接收方的端口号 |
序列号 | 32 | 数据段的序列号 |
确认号 | 32 | 确认收到的数据的序列号 |
数据偏移 | 4 | TCP 头部的长度 |
保留字段 | 3 | 保留字段,通常为 0 |
标志位 | 9 | 控制标志,如 SYN、ACK、FIN |
窗口大小 | 16 | 流量控制,表示接收方的缓冲区大小 |
校验和 | 16 | 用于错误检测 |
紧急指针 | 16 | 紧急数据的指针 |
选项和填充 | 可变 | 可选字段,用于扩展功能 |
数据 | 可变 | 实际传输的数据 |
TCP 适用于需要高可靠性和顺序性的数据传输的应用,TCP的应用场景包含:
- 网页浏览 (HTTP/HTTPS):确保网页内容完整地传输。
- 文件传输 (FTP):确保文件不丢失和损坏。
- 电子邮件 (SMTP/IMAP/POP3):确保邮件内容正确传输。
▐ 超时重传时间
在TCP中,计算超时重传时间(Retransmission Timeout, RTO)是确保数据可靠传输的关键部分。TCP使用自适应的算法来计算这个时间,以适应不同网络条件下的延迟变化。这个算法基于测量往返时间(Round-Trip Time, RTT)并进行统计处理。以下是计算RTO的主要步骤:
1. 测量往返时间(RTT)
- RTT:发送数据包到接收到相应确认(ACK)的时间。
2. 计算平滑的往返时间(RTTs)
- 初始情况下,TCP设置一个估计的RTT。
- 当实际测量到RTT时,TCP更新平滑的RTT(RTTs):RTTs=(1−α)×RTTs+α×RTT
通常,α的值为0.125(即1/8)。
3. 计算RTT的变化(RTTd)
- RTTd表示RTT的变化范围,用于估计RTT的波动:RTTd=(1−β)×RTTd+β×∣RTT−RTTd∣
通常,β的值为0.25(即1/4)。
4. 计算重传超时时间(RTO)
- 最终,RTO由 RTTs 和 RTTd 决定:RTO=RTTs+max(1, 4×RTTd)
其中,max(1,4×RTTd) 确保RTO不会过小。
详细步骤
-
初始设置:
- RTTs 设为第一次测得的RTT。
- RTTd 设为第一次测得的RTT/2。
- RTO=RTTs+max(1, 4×RTTd)。
-
更新算法:
- 每次测得新的RTT时,计算RTT偏差(RTT - RTTs)。
- 更新RTTd:
RTTd=(1−0.25)×RTTd+0.25×∣RTT−RTTs∣
- 更新SRTT:
RTTs=(1−0.125)×RTTs+0.125×RTT
- 计算新的RTO:
RTO=SRTT+max(1, 4×RTTd)
示例计算
假设我们测量到的RTT值依次为:100ms, 120ms, 110ms, 90ms。
-
初始值:
- 第一次RTT:100ms
- RTTs = 100ms
- RTTd = 100 / 2 = 50ms
- RTO = 100 + max(1, 4×50) = 100 + 200 = 300ms
-
第二次RTT:120ms
- 偏差 = 120 - 100 = 20ms
- 更新RTTd:RTTd = 0.75 \times 50 + 0.25 \times 20 = 37.5ms
- 更新RTTs :RTTs = 0.875 \times 100 + 0.125 \times 120 = 102.5ms
- 计算新的RTO:RTO = 102.5 + max(1, 4×37.5) = 102.5 + 150 = 252.5ms
-
第三次RTT:110ms
- 偏差 = 110 - 102.5 = 7.5ms
- 更新RTTd:RTTd = 0.75 \times 37.5 + 0.25 \times 7.5 = 30ms
- 更新RTTs :RTTs = 0.875 \times 102.5 + 0.125 \times 110 = 103.44ms
- 计算新的RTO:RTO = 103.44 + max(1, 4×30)= 103.44 + 120 = 223.44ms
通过以上步骤,TCP可以自适应地调整RTO,以适应不同网络条件下的延迟变化,确保数据传输的可靠性。
三.UDP协议
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议。它通过将数据分割成称为数据报的小单元来传输数据,每个数据报都包含源和目的端口号等信息。与TCP协议不同,UDP不提供可靠性、流控制、拥塞控制或错误检测和重传等功能。UDP被广泛用于需要实时性和可能容忍丢包的应用,如音视频传输、在线游戏、广播等。
▐ UDP的特点
-
无连接:UDP是无连接的协议,数据可以在任何时候发送,而不需要先建立连接。每个数据包(称为数据报)独立传输,彼此之间没有任何关联。
-
不可靠传输:UDP不保证数据包的送达顺序,也不保证数据包的送达。没有确认机制、重传机制或超时重传机制。
-
轻量级:UDP的头部开销较小,总共只有8个字节。由于没有连接建立、维护和释放过程,UDP的开销比TCP更小,适用于对传输速度要求高但对可靠性要求低的应用。
-
实时性:由于没有流量控制和拥塞控制,UDP可以提供较低的延迟。适用于实时应用,如视频流、在线游戏和语音通话等。
▐ UDP报文结构
UDP报文段由头部和数据部分组成,头部的结构如下:
字段名 | 长度 (比特) | 描述 |
---|---|---|
源端口 | 16 | 发送方的端口号 |
目的端口 | 16 | 接收方的端口号 |
长度 | 16 | UDP头部和数据的总长度 |
校验和 | 16 | 用于错误检测 |
数据 | 可变 | 实际传输的数据 |
0 7 8 15 16 23 24 31 (位)
+--------+--------+--------+--------+
| 源端口号 | 目的端口号 |
+--------+--------+--------+--------+
| 长度 | 校验和 |
+--------+--------+--------+--------+
▐ UDP的工作过程
UDP是一种无连接的传输层协议,它的工作过程如下:
- 应用程序发送数据报:应用程序将要发送的数据报传递给UDP协议。
- 数据报划分成数据段:根据UDP协议的要求,将数据报分割成一个个数据段,每个数据段包含一个头部和一部分数据。
- 添加UDP头部:在每个数据段的开头添加UDP协议的头部,包括源端口号和目的端口号等信息。
- 数据发送:将数据段通过网络发送给目的主机。
- 数据接收:目的主机接收到数据段后,将其交给UDP协议。
- 检查数据完整性:UDP协议检查数据段的完整性,如果校验和出现错误,则丢弃该数据段。
- 数据分组重组:UDP协议将接收到的数据段按照序列号重新组装成完整的数据报,并将其传递给应用程序。
- 应用程序接收数据报:应用程序接收到UDP传递的数据报,进行处理。
UDP的工作过程简单高效,但不保证数据的可靠性和顺序性。
由于没有建立连接和提供流量控制机制,UDP通常被用于那些对数据传输速度和实时性要求较高、对数据可靠性要求较低的应用,如音频、视频、实时游戏等。
四.UDP与TCP的比较
-
连接性:
- TCP:面向连接,数据传输前需建立连接。
- UDP:无连接,数据随时可以发送。
-
可靠性:
- TCP:提供可靠传输,保证数据的完整性和顺序。
- UDP:不保证数据的送达和顺序。
-
开销:
- TCP:头部较大,包含流量控制、拥塞控制等机制。
- UDP:头部开销小,无流量控制和拥塞控制。
-
延迟:
- TCP:较高的延迟,适合需要高可靠性的应用。
- UDP:较低的延迟,适合实时性要求高的应用。
五.端口
前文中反复提到一个关键词——端口
在计算机网络中,端口是一个逻辑概念,用于标识特定的网络服务或应用进程。端口号是一个 16 位的整数,范围从 0 到 65535。它在运输层协议(如 TCP 和 UDP)中用于区分同一主机上不同的应用程序或服务。
端口是网络通信中用于标识特定进程或网络服务的一个编号。它与 IP 地址结合使用,形成一个完整的网络端点(也称为套接字)。每个网络连接可以通过一个唯一的 IP 地址和端口号对来标识。
端口的作用
-
区分应用程序:不同的应用程序和服务通过不同的端口号进行通信。这样,即使它们在同一主机上运行,也可以互不干扰。
-
网络服务定位:客户端应用程序可以通过特定的端口号连接到服务器上的特定服务。例如,Web 服务器通常监听 80 或 443 端口,FTP 服务器监听 21 端口。
▐ 端口号的分类
端口号根据用途和管理方式,可以分为以下几类:
-
知名端口号(Well-known Ports):范围:0-1023
这些端口号通常分配给常见的标准服务。例如:- SSH:22
- FTP:21
- HTTPS:443
- HTTP:80
-
注册端口号(Registered Ports):范围:1024-49151
这些端口号通常分配给用户或组织注册的应用程序和服务。例如:- Microsoft SQL Server:1433
- MySQL 数据库:3306
-
动态/私有端口号(Dynamic/Private Ports):范围:49152-65535
这些端口号通常用于客户端应用程序动态分配的临时通信。客户端在与服务器建立连接时,会从这个范围内分配一个临时端口号。
▐ 常见的端口号
下面是常见端口号及其对应的服务的表格:
端口号 | 协议 | 服务名称 | 描述 |
---|---|---|---|
20 | TCP | FTP Data | 文件传输协议 (数据传输) |
21 | TCP | FTP | 文件传输协议 (控制) |
22 | TCP | SSH | 安全外壳协议,用于加密的远程登录 |
23 | TCP | Telnet | 明文远程登录协议 |
25 | TCP | SMTP | 简单邮件传输协议 |
53 | UDP | DNS | 域名系统 |
67 | UDP | DHCP Server | 动态主机配置协议 (服务器端) |
68 | UDP | DHCP Client | 动态主机配置协议 (客户端) |
80 | TCP | HTTP | 超文本传输协议 |
110 | TCP | POP3 | 邮局协议版本3 |
119 | TCP | NNTP | 网络新闻传输协议 |
123 | UDP | NTP | 网络时间协议 |
143 | TCP | IMAP | 互联网消息访问协议 |
161 | UDP | SNMP | 简单网络管理协议 |
194 | TCP | IRC | 互联网中继聊天 |
443 | TCP | HTTPS | 安全的超文本传输协议 |
465 | TCP | SMTPS | 用于加密的简单邮件传输协议 |
993 | TCP | IMAPS | 用于加密的互联网消息访问协议 |
995 | TCP | POP3S | 用于加密的邮局协议版本3 |
1433 | TCP | Microsoft SQL Server | Microsoft SQL Server 数据库 |
3306 | TCP | MySQL | MySQL 数据库 |
3389 | TCP | RDP | 远程桌面协议 |
5432 | TCP | PostgreSQL | PostgreSQL 数据库 |
6379 | TCP | Redis | Redis 内存数据库 |
8080 | TCP | HTTP Alternate | 备用 HTTP 端口 |
本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见