@callofduty890
2024-11-05T05:39:58.000000Z
字数 4066
阅读 58
超人视觉
传输控制协议(Transmission Control Protocol:TCP)是互联网协议套件TCP/IP中的核心协议之一,属于传输层的协议。它为应用层提供可靠,面向连接等待通讯服务。确保数据在网络中的完整传输。TCP有美国在20世纪70-80年代初开发,为不同类型的计算机网络提供统一的通讯方式。
TCP在网络通信中的作用
面向连接的协议
TCP是一种面向连接的协议,这意味着在数据传输开始之前,通讯双方必须建立一个连接,确保双方都能准备好继续数据传输,
这个过程涉及到一一系列的握手操作,以确保双方的发送和接收能力,在这个过程中,使用三次握手建立连接,从而确保双方的序列号已经协商好,能够进行高效的通讯。
通过三次握手,双方确认彼此的发送和接收能力,并交换初始序列号,为可靠的数据传输奠定基础。
TCP连接的终止采用四次挥手 Four-Way-Hasdshake过程,确保双方都能正常关闭连接(不丢失数据的情况下)
通过四次挥手,确保双方都能够有序关闭连接,避免数据丢失和资源浪费。
第二次和第三次,被动关闭端需要发送ACK包和FIN包,为什么要分开发送呢?
为确保数据传输的可靠性,TCP引入以下机制
流量控制
流量控制应用防止发送方过快发送数据,导致接收方的缓冲区溢出,TCP通过滑动窗口机制来实现流量控制,接收方在每一次确认应答中告知发送方自己缓冲区的剩余空间,发送方根据收到该信息调整发送速率,确保不会发送超出接收方能处理的数据量。
拥塞控制
拥塞控制用于防止网络堵塞,确保数据在网络中高效传输,TCP采用多种算法监测和调整数据传输速率,以适应未来的当前负载状况,主要的拥塞控制算法包括:
TCP报文段(TCP Segement)是TCP协议在传输数据时使用的基本单位,每一个报文有头部和数据部分组成,头部包含了控制信息和元数据,用于管理数据传输的各种机制。
TCP报文头部的各个字段详解
| 字段名 | 大小位 | 描述 |
|---|---|---|
| 源端口 | 16 | 发送方的端口号,用于标识发送应用端的进程 |
| 目标端口 | 16 | 接收方的端口号,用于标识发送接收端的进程 |
| 序列号 | 32 | 表示该报文段中第一个字节的数据序列号,用于数据的有效传输和重传 |
| 确认号 | 32 | 当ACK标志位为1时,此字段有效,表示接收方期望收到下一个字节的需要,用于确认接收数据 |
| 数据偏移 | 4 | 指示TCP头部的长度,以32为为单位,最小值位5 |
| 保留 | 6 | 保留字段,当前未使用,应设置为0 |
| 标志位 | 6 | 包含控制标志,包括URG\ACK |
| 窗口大小 | 16 | 表示接收方当前可用缓存区的大小,用于流量控制 |
| 校验和 | 16 | 用于错误检测,覆盖整个TCP报文段,包括头部和数据部分 |
| 紧急指针 | 16 | 当URG为1时,此字段有效,指示紧急数据的结束位置 |
| 选项 | 可变 | 可选字段,用于拓展TCP的功能,如调整报文的最大长度,窗口缩放 |
| 填充 | 可变 | 用来确保表头的长度为32字节的整数倍,而填充的空字节,通常设置为0MO |
标志位详解
| 标志位 | 作用 |
|---|---|
| URG | 紧急指针有效,表示报文中有紧急数据 |
| ACK | 确认号有效,表示该报文对之前数据的确认 |
| PSH | 请求接收方尽快将该报文的数据推送到应用层无需等待缓存区满 |
| PST | 复位连接,通常用于错误情况下强制关闭连接 |
| SYN | 同步序列号,用于建立连接时初始化序列号 |
| FIN | 表示发送方已经完成数据发送,准备关闭连接 |
数据部分:
TCP报文段的数据部分承载了应用层的数据。数据的具体内容有上层协议(HTTP,FTP)决定,TCP负责将这些数据可靠的传输到目标端,数据部分的长度取决于TCP报文的总长度将去头部长度,最大可到达65535字节,实际传输受到MTU(最大传输单元)的限制
当应用层发送的数据超过网络承载的最大保温程度MSS,TCP会将数据拆分为多个报文段进行传输。接收端收到多个报文段后,根据序列号将数据组装为原始数据流。
每一层都为相邻层提供服务,并且依赖于下一层所提供的服务。这种分层的架构有助于网络设计、实现和故障排除。在实际应用中,许多协议可能会跨越多个层次。
用户数据包协议(User Datagram Protocol: UDP) 是无连接的,不可靠的传输层协议,它不建立连接,也不确保数据包的顺序和完整性。UDP适用于对实时性要求高而且可以容忍一定量的数据丢失的应用场景,视频直播,在线游戏。
| 特性 | UDP | TCP |
|---|---|---|
| 连接方式 | 无连接(无需建立连接) | 面向连接(需要建立连接) |
| 可靠性 | 提供可靠的数据传输,保证数据顺序,完整到达 | 不保证数据的可靠传输,可能出现丢失、乱序 |
| 流量控制 | 支持流量控制,防止发送过快导致接收方溢出 | 不支持流量控制,发送速率不受限 |
| 堵塞控制 | 包含堵塞控制机制,能够适应网络变化 | 不包含堵塞控制机制,可能加剧网络堵塞 |
| 传输速率 | 由于可靠性机制的限制,相对较慢 | 由于缺乏可靠性机制的限制,相对较快 |
| 数据包结构 | 数据被分段,每一个段包含序列号和确认号等控制信息 | 数据被封装为数据报,头部简单,不包含序列号和确认号等控制信息 |
| 适用场景 | 需要高可靠性和数据顺序的应用,如网页浏览,文件传输,电子邮件 | 对实时性要求高而且可以容忍一定量的数据丢失的应用场景,视频直播,在线游戏。 |
| 头部大小 | 较大(20-60字节) | 较小(8字节) |