目录
- 传输层协议
- How demultiplexing works in transport layer(传输层如何进行分用)
- 分用(Demultiplexing)的定义:
- TCP/UDP段格式:
- UDP
- UDP的特点:
- UDP Format
- 端口号
- Trivial File Transfer Protocol (TFTP)
- File Transfer Protocol (FTP)
- FTP Replies
- TCP
- TCP简介:
- TCP的特性:
- 端口号的作用:
- TCP Header Fields(TCP头部字段)
- Connection-Oriented Demultiplexing
- TCP套接字通过**四元组(4-tuple)**唯一标识:
- TCP Connection Establishment & Termination TCP连接的建立与终止
- 连接建立
- 连接终止:
- TCP状态图
- 客户端
- 服务器端
- TCP Timers(TCP定时器)
- TCP定时器的作用:
- Selective Acknowledgement(选择性确认)
- SACK(选择性确认)的用途:
- 实现方式:
- TCP Congestion Control Parameters(TCP拥塞控制参数)
- 主要参数:
- Streaming Multimedia: UDP or TCP?
- UDP 特性:
- TCP 特性:
- HTTP Adaptive Streaming (HAS)
- HAS 的特点:
- 常见变体:
- HAS 的分段传输机制:
传输层协议
传输层协议是端到端的协议。仅在主机上实现。
两种常见的传输层协议:
-
UDP
- 面向数据报(Datagram oriented):基于数据报的传输方式,不建立连接。
- 不可靠,无连接(Unreliable, connectionless):不保证数据的可靠性,也没有连接建立过程。
- 简单(Simple):协议设计较为轻量化,开销小。
- 支持单播和多播(Unicast and multicast):适合多种网络通信场景。
- 常用于网络控制信令服务:
- 如网络管理(SNMP)、路由(RIP)、域名解析(DNS)等。
- 适用于交互式多媒体应用:
- 如视频流、音频流等需要快速传输的场景。
-
TCP
- 面向流(Stream oriented):数据以字节流的形式传输。
- 可靠,面向连接(Reliable, connection-oriented):通过握手机制建立连接,确保数据可靠传输。
- 复杂(Complex):实现了流量控制、拥塞控制等功能。
- 仅支持单播(Unicast only):只支持点对点通信。
- 广泛用于大多数互联网应用:
- 如网页(HTTP)、邮件(SMTP)、文件传输(FTP)、终端(Telnet)等。
- 许多基于HTTP/TCP的应用程序依赖它。
How demultiplexing works in transport layer(传输层如何进行分用)
分用(Demultiplexing)的定义:
分用是传输层的重要功能,用于将接收到的IP数据报分发到正确的应用程序(或套接字)。
具体分用过程:
主机接收到IP数据报,其中包含:
- 源IP地址和目标IP地址(来自网络层)。
- 源端口号和目标端口号(来自传输层)。
每个数据报包含一个传输层段(TCP或UDP段)。
传输层通过IP地址和端口号将数据分配到正确的套接字(socket)。
TCP/UDP段格式:
UDP
UDP的特点:
- 不可靠传输:UDP不会确认数据是否正确到达。
- 功能简单:
- 基本功能是将IP数据报的主机到主机传递扩展为应用程序到应用程序的传递。
- UDP的主要附加功能是多路复用(multiplexing)和分用(demultiplexing)。
- UDP的传输过程:
- 应用程序通过UDP协议向目标发送数据报。
- IP层负责数据报的路由和传递。
- 接收主机的UDP层根据端口号将数据分发到目标应用程序。
UDP Format
端口号
- 动态/私有端口(Dynamic/private ports):
- 范围:49152-65535。
- 供客户端随机选择使用。
- 注册端口(Registered ports):
- 范围:1024-49151。
- 普通用户进程使用。
- 知名端口(Well-known ports):
- 范围:0-1023。
- 保留给系统或服务器使用,例如HTTP(80端口)和DNS(53端口)。
Trivial File Transfer Protocol (TFTP)
-
TFTP会话过程:
- 客户端通过UDP端口69向服务器发送读/写请求(RRQ/WRQ)。
- 如果是读请求,服务器返回一个长度为512字节的数据包,编号为1。
- 客户端发送ACK,确认收到数据块1。
- 服务器发送下一个数据块2。
- 重复以上步骤,直到最后一个数据块的长度小于512字节,传输结束。
-
TFTP数据包结构:
- opcode:操作码(读、写、数据、ACK等)。
- block number:数据块编号。
- data:数据字段,最大长度512字节。
File Transfer Protocol (FTP)
- 连接类型:
- 控制连接:
- 服务器的控制端口为21。
- 用于发送命令和响应。
- 数据连接:
- 服务器的数据端口为20。
- 用于传输文件数据。
- 控制连接:
FTP Replies
Typical FTP replies
● 125 Data connection already open; transfer starting
● 200 Command OK
● 331 Username OK, password required
● 425 Can’t open data connection
● 452 Error writing file
● 500 Syntax error (unrecognized command)
● 501 Syntax error (invalid arguments
TCP
TCP简介:
- TCP是传输层的另一个主要协议,与UDP相比,TCP提供可靠的、面向连接的服务。
常用于需要高可靠性的应用,例如HTTP、FTP、Telnet等。
TCP的特性:
- 可靠性:
提供错误控制、确认机制和数据重传功能。 - 流量控制:
基于接收方缓冲区的反馈,动态调整发送速度。 - 拥塞控制:
根据网络的拥塞状态调整数据传输速率。
端口号的作用:
源端口号和目标端口号用于唯一标识发送方和接收方的套接字。
TCP Header Fields(TCP头部字段)
- 源端口号(Source Port Number):
标识发送方应用程序。 - 目标端口号(Destination Port Number):
标识接收方应用程序。 - 序列号(Sequence Number):
标识数据段在整个传输流中的位置,用于数据重组。 - 确认号(Acknowledgment Number):
用于确认接收到的数据段。 - 窗口大小(Window Size):
表示接收方允许的最大数据量,用于流量控制。 - 校验和(Checksum):
用于检测TCP头部和数据是否有错误。
Connection-Oriented Demultiplexing
TCP套接字通过**四元组(4-tuple)**唯一标识:
- 源IP地址。
- 源端口号。
- 目标IP地址。
- 目标端口号。
TCP Connection Establishment & Termination TCP连接的建立与终止
连接建立
使用三次握手(Three-Way Handshake):
- 客户端发送SYN。
- 服务器返回SYN-ACK。
- 客户端发送ACK,连接建立成功
连接终止:
使用四次挥手(Four-Way Handshake):
- 一方发送FIN,表示完成数据发送。
- 另一方发送ACK确认。
- 第二方发送FIN。
- 第一方发送ACK,连接终止。
TCP状态图
客户端
- CLOSED:初始状态,客户端准备建立连接。
- SYN_SENT:客户端发送SYN,等待服务器响应。
- ESTABLISHED:三次握手完成,连接建立。
- FIN_WAIT_1:客户端发送FIN,启动关闭过程。
- FIN_WAIT_2:客户端等待对方发送FIN。
- TIME_WAIT:客户端发送ACK后进入等待状态,确保数据可靠传输。
服务器端
- CLOSED:服务器未开启。
- LISTEN:服务器等待客户端连接。
- SYN_RCVD:收到客户端SYN,发送SYN-ACK。
- ESTABLISHED:三次握手完成,进入数据传输状态。
- CLOSE_WAIT:收到客户端的FIN,等待应用程序关闭。
- LAST_ACK:发送FIN并等待客户端的ACK。
CLOSED:连接完全关闭。
TCP Timers(TCP定时器)
TCP定时器的作用:
- 连接建立定时器(Connection Establishment Timer):
控制建立连接的最大时间。 - 重传定时器(Retransmission Timer):
如果数据段未被确认,则重传。 - 延迟ACK定时器(Delayed ACK Timer):
在交互式数据流中延迟ACK以提高效率。 - 保持活动定时器(Keepalive Timer):
检查连接是否仍然存活。 - 坚持定时器(Persist Timer):
在接收窗口为零时避免死锁,周期性地探测窗口大小。
使用指数回退算法(Exponential Backoff)。 - TIME_WAIT定时器:
在连接关闭后保持一段时间,防止旧的延迟数据段被误解为新连接的一部分
Selective Acknowledgement(选择性确认)
SACK(选择性确认)的用途:
在TCP中,如果接收方发现多个数据段丢失,可以使用SACK选项通知发送方哪些数据段已成功接收。
SACK允许发送方仅重传丢失的数据段,而不是重传整个窗口的数据,从而提高效率。
实现方式:
TCP的SACK功能通过两个选项实现:
- SACK-Permitted:连接建立时协商是否允许使用SACK。
- SACK Option:在数据传输中实际使用,提供丢失和接收数据段的信息。
TCP Congestion Control Parameters(TCP拥塞控制参数)
主要参数:
- 广告窗口大小(rwnd):
接收方通知发送方的缓冲区可用空间。 - 最大分段大小(MSS):
每个TCP数据段的最大字节数。 - 拥塞窗口(cwnd):
发送方根据网络状况调整的窗口大小。 - 慢启动阈值(ssthresh):
用于分界慢启动和拥塞避免的阈值。
Streaming Multimedia: UDP or TCP?
UDP 特性:
- 发送速率固定,忽略网络拥塞。
- 播放延迟短(2-5秒),以补偿网络延迟抖动。
- 错误恢复能力弱:丢包可能导致数据损失。
- 典型应用:多媒体服务(如交互式应用)。
TCP 特性:
- 不适用于多播,但适用于单播。
- 通过拥塞控制调节速率,但可能导致波动。
- 播放延迟较大,但能提高可靠性。
- 支持穿越防火墙。
- 典型应用:与 HTTP 结合的流媒体服务。
HTTP Adaptive Streaming (HAS)
HAS 的特点:
- 基于 TCP 实现,具备高可靠性。
- 与现有 Web 技术集成:能利用 HTTP,适配现有网络基础设施。
- 自动适应可用带宽。
- 标准化支持(如 MPEG-DASH)。
常见变体:
- Microsoft Silverlight
- Apple HLS
选择比特率:根据当前和先前下载速率动态调整每段视频的比特率。
HAS 的分段传输机制:
- 视频分片:视频文件被划分为2-10秒的视频片段。
- 多码率编码:每个片段被编码为多个可选比特率。
- Manifest 文件:
- 提供可供客户端选择的比特率列表。
- 客户端算法:
- 起始选择较低的比特率。
- 根据传输时间动态调整比特率。
- 尝试维持播放缓冲区的正常水位。