TCP 传输控制协议
TCP:Transmission Control Protocol: 传输控制协议:是一种面向连接的协议,用于在网络上可靠地传输数据。它提供了一种面向连接、可靠的、有序的、基于字节流的数据传输服务,确保数据的完整性、顺序性和可靠性。TCP通常与IP(互联网协议)一起使用,构成TCP/IP协议族中的一部分。TCP适用于需要准确可靠传输的应用,如网页浏览、文件传输、电子邮件和远程登录。
TCP 连接:
用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗口大小称为连接。
TCP连接三次握手:
SYN是同步的缩写 Synchronize ,ACK 是确认的缩写 Acknowledgement;
在建立TCP连接时,客户端和 服务端 需要进行三次握手的过程。具体过程如下:
- 客户端 向 服务端 发送一个连接请求同步报文段 SYN ;该段中也包含客户端的初始序列号(Sequence number = x) 。
- 服务端 收到连接请求后,向 客户端 发送一个连接确认报文段 SYN-ACK;该段中包含服务器的初始序列号(Sequence number = y);同时使 Acknowledgment number = x + 1来表示确认已收到客户端的 SYN段(Sequence number = x)。
- 客户端 收到连接确认后,向 服务端 发送一个确认报文段 ACK,连接建立; 该段中使 Acknowledgment number = y+ 1来表示确认已收到服务器的 SYN段(Sequence number = y)。
TCP断开四次挥手:
FIN:Finish 完成报文/控制报文
在断开TCP连接时,客户端和 服务端 需要进行四次挥手的过程。具体过程如下:
- 客户端 向 服务端 发送一个连接释放报文段(FIN=1 ,其序列号为seq=u ), 并且停止发送数据 ; 此时,客户端 进入FIN-WAIT-1(终止等待1)状态
- 服务端 收到 连接释放报文后 ,向 客户端 发送一个确认报文段( ACK=1,ack=u+1 , 并且带上自己的序列号seq=v );此时,服务端 就进入了CLOSE-WAIT 关闭等待状态
- 客户端 接收到 服务器端 的确认请求后,客户端 就会进入FIN-WAIT-2(终止等待2)状态(等待 服务器 发送连接释放报文);服务器 将最后的数据发送完毕后,就向 客户端 发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待 客户端 的确认。
- 客户端 收到 服务器 的连接释放报文后,必须发出确认(ACK=1,ack=w+1),而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成。
TCP 特点:
- TCP是面向连接的运输层协议
- 每一条TCP连接只能由两个端点,每一条TCP连接只能是点对点的
- TCP提供可靠交付的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,并且按序到达:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证⼀个报文⼀定能够到达接收端(依靠各种机制)
- 面向字节流:消息是没有数据边界的(管道也是),不管消息多大都可以传输,并且消息是有序的
应用场景:
万维网:HTTP协议
文件传输:FTP协议
电子邮件:SMTP协议
远程终端接入:TELNET协议
UDP 用户数据报协议
UDP:User Datagram Protocol:用户数据报协议:是一种无连接的、不可靠的、基于数据报的传输层通信协议。UDP不保证数据传输的有序性、完整性、流量控制和拥塞控制;使用UDP时,数据以数据包的形式发送,接收方不需建立连接,直接接收;UDP适用于实时应用,如音频、视频流传输、在线游戏和广播。
UDP 特点:
- UDP是无连接的:知道对端的IP和端口号就直接进行传输, 不需要建立连接
- UDP使用尽最大努力交付(不可靠):没有确认机制,没有重传机制;如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息
- UDP是面向数据报:不能够灵活的控制读写数据的次数和数量
- UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内
- UDP没有拥塞控制(直播,视频会议等实时应用)
- UDP支持一对一,一对多,多对一,多对多的交互通信(腾讯早期使用的就是UDP)
- UDP的首部开销小,只有8字节
TCP和UDP区别总结
TCP提供了数据包的顺序保证、错误检测和重传机制,确保数据的可靠传输,但可能会引入额外的延迟;
UDP提供了更快的传输速度和更低的开销,但不保证数据包的顺序、可靠性或错误检测,适用于对实时性要求高但可以容忍一定数据丢失的应用;
TCP/UDP有什么相同点?
都是在IP网络上运行的传输层协议;
都使用端口号来标识不同的应用程序;
都可以用于客户端和服务器之间的通信。
TCP/UDP有什么不同点?
TCP是面向连接的,UDP是无连接的;
TCP提供可靠的数据传输服务,UDP不提供可靠性保证;
TCP具有流量控制和拥塞控制功能,UDP没有;
TCP需要进行三次握手建立连接,UDP不需要。
TCP的优势
可靠性:TCP提供可靠的数据传输,确保数据的完整性和顺序性。
错误检测和纠正:TCP具备检测和纠正传输中发生的错误的能力。
流量控制:TCP通过流量控制避免了接收方因来不及处理大量数据而导致的问题。
TCP的劣势
较慢:因为TCP提供可靠传输,它需要进行复杂的握手和确认过程,这导致了相对较高的延迟。
处理负载:TCP的控制机制增加了系统的负载,对处理能力有一定要求。
UDP的优势
较快:UDP不需要进行连接建立和握手,以及其他传输保障机制,因此传输速度相对较快。
简单轻量:UDP的头部开销较小,资源占用较少。
UDP的劣势
不可靠:UDP没有提供可靠性保证,传输过程中可能丢包或乱序。
不具备流量控制和拥塞控制:UDP不包含流控制和拥塞控制机制,可能导致数据的丢失和网络拥塞。
应用场景:
TCP的应用场景:
- Web浏览:因为 HTTP和HTTPS 需要保证数据的完整性,所以使用TCP。
- 文件下载和上传:如 FTP、SFTP 等,需要确保文件数据的完整性和正确性。
- 电子邮件传输:SMTP和POP3等协议使用TCP来保证邮件数据的可靠传输。
- 远程登录和命令执行:SSH 等协议使用TCP来确保远程操作的安全性和可靠性。
- 数据库访问:数据库查询和操作通常使用TCP连接,以保证数据的准确性。
- 在线交易:金融交易系统使用TCP来确保交易数据的完整性和安全性。
- 实时通信:虽然TCP不是实时通信的首选,但某些实时应用(如股票交易平台)可能会使用TCP来确保数据的准确性。
UDP的应用场景:
- 在线游戏:实时性要求高,可以容忍一定程度的数据丢失,如部分游戏状态更新。
- 及时通信:语音和视频通话对实时性要求高,使用UDP可以减少延迟。
- 流媒体服务:直播和视频点播服务使用UDP来减少缓冲,提供更流畅的观看体验。
- DNS查询:域名解析通常不需要保证数据包的顺序,使用UDP可以快速响应。
- DHCP服务:动态IP地址分配使用UDP,因为它简单且足以满足需求。
- 网络测量工具:如ping使用ICMP,但某些网络测量工具可能使用UDP来测试网络延迟和带宽。
- 某些API调用:轻量级的API服务,特别是那些对性能要求高且可以容忍偶尔的数据丢失的场景。