上文中讲述了IP协议,本文主要来讲一下TCP协议。
TCP协议
(1)端到端通信
直接把源主机应用程序产生的数据传输到目的主机使用这 些数据的应用程序中,就是端到端通信。
(2)传输层端口
公认端口,数值一般为 0~1023。
登记端口号,数值为1024~49151,为没有公认端口号的 应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复。
客户端口号或短暂端口号,数值为49152~65535,留给客 户进程选择暂时使用。当服务器进程收到客户进程的报 文时,就知道了客户进程所使用的动态端口号。通信结 束后,这个端口号可供其他客户进程以后使用。
端口 | 协议 | 说明 |
21 | FTP | 文件传输协议,用于上传、下载 |
23 | TELNET | 用于远程登陆,通过连接目标计算机的这一端口,得 到验证后可以远程控制管理目标计算机 |
25 | SMTP | 简单邮件传输协议,用于发送邮件 |
53 | DNS | 域名服务,当用户输入网站的名称后,由DNS负责将 它解析成IP地址,这个过程中用到的端口号是53 |
80 | HTTP | 超文本传输协议,通过HTTP实现网络上超文本的输出 |
(3)TCP报文段格式
- 源端口和目的端口:源端口号与IP头部中的源IP地址,目的端口与IP头部中的目的地址,可以唯一确定从源端到目的端的一对TCP连接。共有216-1个端口号。
- 序号:用于标识TCP发送端向TCP接收端发送数据字节流的序号,指的是本报文段所发送的数据的第一个字节的序号。
- 确认号:用于标识接收端收到的下一个TCP报文段第一个字节的序号。确认号字段只有当ACK标志为1时才有效。
- 数据偏移:指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。也称为首部长度。
- 紧急位URG : URG=1时,表明紧 URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 急指针字段有效.它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
- 确认位ACK :ACK=1时,确认号才有效;ACK=0时,确认号无效。
- 推送位PSH :接收TCP收到推送位置1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满后才向上交付。 推送位psh:接收tcp收到推送位置1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满后才向上交付。
- 复位位RST :RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因) ,必须释放连接,同时通知对方。
- 同步位SYN:SYN=1时,表示这是一个连接请求或连接接受报文。只有在连接建立的过程中SYN才被置1。
- 终止位FIN :用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放传输连接。
- 窗口:用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间的大小确定自己的接收窗口大小然后通知对方以确定对方的发送窗口的上限。
- 检验和:覆盖报文的头部和整个数据部分。
- 紧急指针:URG=1时,紧急指针指向紧急数据的位置。
TCP连接的建立(三次握手)
- A 的 TCP 向 B 发出连接请求报文段,其首部中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数 据字节的序号是 x。
- B 的 TCP 收到连接请求报文段后,如同意,则发回确认。
- B 在确认报文段中应使 SYN = 1,使 ACK = 1,其确认号 ack = x + 1,自己选择的序号 seq = y。
- A 收到此报文段后向 B 给出确认,其 ACK = 1, 确认号 ack = y + 1。
- A 的 TCP 通知上层应用进程,连接已经建立。
- B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程:TCP连接已经建立。
TCP连接的关闭(四次挥手)
- 数据传输结束后,通信的双方都可释放连接。现在 A 的 应用进程先向其 TCP 发出连接释放报文段,并停止发送数 据,主动关闭 TCP 连接。
- A 把连接释放报文段首部的 FIN = 1,其序号seq = u,等待B的确认。
- B 发出确认,确认号 ack = u + 1, 序号 seq = v。TCP 服务器进程通知高层应用进程。 从 A 到 B 这个方向的连接 就释放了,TCP 连接 处于半关闭状态。
- B 若发送数据,A 仍要接收。
- 若B已经没有要向A发送的数据,其应用进程就通知 TCP 释放连接。
- A 收到连接释放报文段后,必须发出确认。在确认报文 段中 ACK = 1,确认号 ack =w + 1,自己的序号 seq = u + 1。
UDP协议
UDP是一种无连接的、不可靠的传输层协议,它不对发送的数据包进行排序、重组,也不提供数据确认、重传或流量控制等机制。这种设计使得UDP在数据传输上更加高效,但同时也意味着数据的完整性和可靠性需要由应用层来保障。
工作原理
当应用层数据通过UDP发送时,UDP会将其封装成一个个的数据报(Datagram),每个数据报都包含了源端口号、目的端口号、数据长度和校验和等信息。然后,这些数据报会通过网络层(如IP协议)传输到目标主机,由目标主机的UDP层解封装后传递给相应的应用层。
优势
- 高效性:由于UDP省略了TCP中的许多复杂机制,如三次握手、四次挥手等,因此在数据传输速度上更具优势。
- 实时性:对于需要快速响应的应用(如在线游戏、实时音视频传输等),UDP的低延迟特性使其成为首选。
- 简单性:UDP协议的设计相对简单,实现起来更加容易,也更容易进行调试和优化。
劣势
- 不可靠性:由于UDP不提供数据确认和重传机制,因此在网络条件不佳时容易出现数据丢失或乱序现象。
- 无连接性:UDP是一种无连接的协议,这意味着在数据传输前不需要建立连接,但也因此无法对传输的双方进行身份验证或加密保护。
UDP的应用场景
- 实时音视频传输:在视频会议、在线直播等场景中,UDP因其低延迟特性而被广泛应用。尽管可能会面临一定的数据丢失风险,但通过合理的错误隐藏和冗余编码等技术手段,可以保证音视频流的流畅性和连续性。
- 网络游戏:对于需要快速响应和低延迟的网络游戏来说,UDP是不可或缺的。游戏中的操作指令和状态更新往往需要即时传输,而UDP正好能够满足这一需求。
- DNS查询:DNS(域名系统)查询也常使用UDP协议。因为DNS查询通常只涉及少量的数据交换,且对实时性要求较高,所以使用UDP可以大大减少查询的延迟。