网络传输的前提
网络的传输是不可靠的,对于任意的操作我们都需要考虑自己的发送对方是否可以接收,并且做出预案。这也是全篇的基石。
什么是TCP
TCP传输控制协议(TCP,Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议。
主要目的
TCP的主要目的是在不可靠的网络环境中建立可靠的端到端的连接。
建立连接的过程
客户端:发送SYN包询问是否能连接
是否知道自己可发送 是否知道自己可接收 客户端 否 否 服务端 否 否 服务端:收到请求回复SYN包+ACK包(确认包)
是否知道自己可发送 是否知道自己可接收 客户端 否 否 服务端 否 是 客户端:发送ACK包确认连接建立
是否知道自己可发送 是否知道自己可接收 客户端 是(基于第一次请求) 是 服务端 是(接收后) 是 简称三次握手
关闭连接的过程
- 客户端:发送FIN包通知服务端关闭连接,自身进入等待状态
- 客户端发送请求
- 服务端:发送ACK包,回复客户端,表示自己进入关闭等待状态,客户端接收后进入半关闭状态(仍可以接受数据,即还没关闭)
- 服务端接收请求,发送ACK包
- 服务端:发送FIN包给客户端确认关闭状态(服务端不在发送数据)
- 服务端剩余数据发送完毕后,发送FIN包
- 客户端:收到后回复ACK包 ,进入超时等待状态,经过一定时间后关闭连接,服务端接受ACK包后立即关闭连接。
- 客户端确认服务器不再传输数据。
简称四次挥手,四次挥手本质上与三次握手是一样的情况,只是对于关闭的场景进行了一点特化。
举例客户端向服务端请求关闭。
我们知道,在建立连接时需要进行三次通信,而关闭连接时则需要进行四次通信。这是因为在建立连接时服务端可以将请求与确认在同一时间进行,而关闭时,因为不能保证服务端不处于数据的发送阶段,所以需要将确认提前发出,而在服务端确认了自身没有数据需要发送后再发送关闭的请求到客户端。
半关闭状态
TCP是一个全双工的协议,即数据在两端能同时进行发送与接收,这就要求了一方在请求关闭连接之后仍要有接收数据的能力,这种能力我们称为半关闭。
总结TCP特点
- 端到端
- 全双工
- 面向连接
- 可靠传输
- 面向字节流
UDP
UDP与TCP相反,是一个无连接的不可靠传输协议,相较于TCP协议,UDP协议非常简单。尽管如此,UDP的提出是在TCP之后的,也就是说,UDP是为了解决TCP所面临的一些问题或不足而提出的。
主要目的
对于一些简单的通信,我们不需要TCP协议那样复杂的建立连接,对于UDP则可以快速的处理这些简单传输。
TCP与UDP对比
TCP | UDP | |
---|---|---|
可靠性 | 全双工可靠传输无差错,不丢失,不重复,且按序到达 | 尽最大努力交付 |
建立连接 | 需要建立连接 | 无需建立连接 |
数据发送模式 | 面向字节流 | 面向报文 |
传输方式 | 点对点(不支持广播和多播) | 一对一,一对多,多对一,多对多 |
首部开销 | 20字节 | 8字节 |
拥塞机制 | 有 | 无 |
流量控制 | 有 | 无 |
系统资源占用 | 对系统资源要求较多 | 对系统资源要求较少 |
实时性 | 相对UDP较低 | 较高,适用于对高速传输和实时性要求较高的通信或广播通信 |
确认重传机制 | TCP提供超时重发,丢弃重复数据,检验数据, | 无重传,只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地 |