当前位置:网站首页>【TCP 和 UDP 基本原理】
【TCP 和 UDP 基本原理】
2022-08-02 14:16:00 【晓龙的小是春晓的晓】
TCP 和 UDP 基本原理
TCP/IP 协议族的传输层协议主要包括 TCP(Transfer Control Protocol,传输控制协议)
和 UDP(User Datagram Protocol,用户数据报协议)。TCP 是面向连接的可靠的传输层协议。
它支持在并不可靠的网络上实现面向连接的可靠的数据传输。UDP 是无连接的传输协议,主要
用于支持在较可靠的链路上的数据传输,或用于对延迟较敏感的应用。
一、TCP/IP传输层的作用
1、传输层的作用
提供面向连接或无连接的服务
维护连接状态
对应用层数据进行分段和封装
实现多路复用
可靠地传输数据
执行流量控制
二、 TCP协议基本原理
1、TCP 协议的特点
RFC 793 定义的 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接
的、端到端的可靠传输协议。TCP 的主要特点包括:
三次握手(Three-Way Handshake)建立连接:确保连接建立的可靠性。
端口号:通过端口号标识上层协议和服务,实现了网络通道的多路复用。
完整性校验:通过对协议和载荷数据计算校验和(Checksum),保证了接收方能检测
出传输过程中可能出现的差错。
确认机制:对于正确接收到的数据,接收方通过显式应答通告发送方,超出一定时间
之后,发送方将重传没有被确认的段,确保传输的可靠性。
序列号:发送的所有数据都拥有唯一的序列号,这样不但唯一标识了每一个段
(segment),而且明确了每个段在整个数据流中的位置,接收方可以利用这些信息实
现确认、丢失检测、乱序重排等功能。
窗口机制:通过可调节的窗口,TCP 接收方可以通告期望的发送速度,从而控制数据
的流量。
2、TCP 封装
源端口(Source Port):16 位的源端口字段包含初始化通信的端口号。源端口和源 IP
地址的作用是标识报文的返回地址。
目的端口(Destination Port):16 位的目的端口字段定义传输的目的。这个端口指明
接收方计算机上的应用程序接口。
序列号(Sequence Number):该字段用来标识 TCP 源端设备向目的端设备发送的字
节流,它表示在这个报文段中的第一个数据字节。如果将字节流看作在两个应用程序
间的单向流动,则 TCP 用序列号对每个字节进行计数。序列号是一个 32 位的数。
确认号(Acknowledgement Number):TCP 使用 32 位的确认号字段标识期望收到的
下一个段的第一个字节,并声明此前的所有数据都已经正确无误地收到,因此,确认
序号应该是上次已成功收到的数据字节序列号加 1。收到确认号的源计算机会知道特
定的段已经被收到。确认号的字段只在 ACK 标志被设置时才有效。
数据偏移(Data Offset):这个 4 位字段包括 TCP 头大小,以 32 位数据结构(字)
为单位。
保留(Reserved):6 位置 0 的字段。为将来定义新的用途保留。
控制位(Control Bits):共 6 位,每 1 位标志可以打开一个控制功能,这六个标志从
左至右是
URG(Urgent Pointer field significant,紧急指针字段标志)
ACK(Acknowledgment field significant,确认字段标志)
PSH(Push Function,推功能)
RST(Reset the connection,重置连接)
SYN(Synchronize sequence numbers,同步序列号)
FIN(No more data from sender,数据传送完毕)
窗口(Window):目的主机使用 16 位的窗口字段告诉源主机它期望每次收到的数据
的字节数。窗口字段是一个 16 位字段。
校验和(Checksum):TCP 头包括 16 位的校验和字段用于错误检查。源主机基于部
分 IP 头信息、TCP 头和数据内容计算一个校验和,目的主机也要进行相同的计算,
如果收到的内容没有错误过,两个计算结果应该完全一样,从而证明数据的有效性。
紧急指针(Urgent Pointer):紧急指针字段是一个可选的 16 位指针,指向段内的最
后一个字节位置,这个字段只在 URG 标志被设置时才有效。
选项(Options):至少 1 字节的可变长字段,标识哪个选项(如果有的话)有效。如
果没有选项,这个字节等于 0,说明选项字段的结束。这个字节等于 1 表示无需再有
操作;等于 2 表示下四个字节包括源机器的最大段长度(Maximum Segment Size,
MSS)。MSS 是数据字段中可包含的最大数据量,源和目的机器要对此达成一致。当
一个 TCP 连接建立时,连接的双方都要通告各自的 MSS,协商可以传输的最大段长
度。常见的 MSS 有 1024 字节,以太网可达 1460 字节。
数据(Data):从技术上讲,它并不是 TCP 头的一部分,但应该了解到,数据字段位
于紧急指针和/或选项字段之后,填充字段之前。字段的大小是最大的 MSS,MSS 可
以在源和目的机器之间协商。数据段可能比 MSS 小,但却不能比 MSS 大。
3、TCP/UDP 端口号
协议号 6 标识 TCP,用协议号 17 标识 UDP
4、TCP 连接的建立
TCP 是一个面向连接的可靠的传输控制协议,在每次数据传输之前首先需要建立连接,连
接建立成功后才开始传输数据,数据传输结束后还要断开连接
TCP 的三次握手建立连接的过程如下:
由发起方 HostA 向被叫方 HostB 发出连接请求。将段的序列号标为 x,SYN 置位。
由于是双方发的第一个包,ACK 无效。HostB 收到连接请求后,读出序列号为 x,发送序列号为 y 的包,同时将 ACK 置为有
效,将确认号置为 x+1,同时将 SYN 置位。HostA 收到 HostB 的连接确认后,对该确认再次作确认。HostA 收到确认号为 x+1、
序列号为 y 的包后,发送序列号为 x+1、确认号为 y+1 的段进行确认HostB 收到确认报文后,连接建立。
这样,一个双向的 TCP 连接就建立好了,双方可以开始传输数据。
5、TCP 连接的拆除
上图所示是一个常规的 TCP 连接终止过程。当数据传输结束后,需要断开连接,其过程描
如下:
HostA 要求终止连接,发送序列号为 u的段,FIN 置为有效,同时确认此前刚收到的
段。HostB 收到 HostA 发送的段后,发送 ACK 段,确认号为 u+1,同时关闭连接。
HostB 发送序列号为 w 的段,FIN 置为有效,通知连接关闭。
HostA 收到 HostB 发送的段后,发送 ACK 段,确认号为 u+1,同时关闭连接。
TCP 连接至此终止。可见这是一个四次握手过程
边栏推荐
猜你喜欢
随机推荐
OpenPose command line
【软件测试】用例篇
炒鸡好用的音乐平台(插件)
排序方法汇总(C语言)
指针/【类型】对指针加一能力的影响(&*ip ,*&ipd)
【进程间通信】:管道通信/有名/无名
Mysql删库恢复数据
【软件测试】性能测试理论
GC垃圾收集器G1
smart_rtmpd 的 NAT 映射方式使用说明
三大特殊类(String Object 包装类)与异常
Oauth2.0 自定义响应值以及异常处理
消息队列的技术选型
打包项目上传到PyPI
CDN的加速原理是什么?
网络运维系列:Ubnt ER-X初始化和开启硬件NAT
HCIE学习记录——OSI参考模型
Dcoker的安装及使用命令
华为Vlan创建及原理简单说明
LAMP 环境搭建 yum源安装方式 (Apache 2.4.6 +mysql 8.0.28+php 8.1.3)