关于UDP/TCP的学习在慕课网专栏《网络协议那些事儿》看到两篇文章,写的不错,在此处做个总结整理。
UDP协议
UDP/TCP协议是OSI七层网络模型中第四层传输层用到的协议,根据使用目的的不同,人们需要能分别达到以下两点要求:
- 传输简单快捷,但传输不可靠,有可能在传输过程中丢失数据报或者接收方没有正确接收数据(UDP)。
- 传输稳定可靠,每一次发送报文必须要求接收方对传输结果作出反馈,所以传输速度相对较慢(TCP)。
根据这两点要求,就有了现在的UDP/TCP协议。
先说说UDP协议,UDP(User Datagram Protocol 缩写)表示用户数据报协议。UDP是一种无连接的协议,发送方只管发送报文,对于是否正确发送和正确接收一无所知。
UDP的数据报格式: 其中Checksum是“校验和”,用于确保发送方发送的数据和接收方接收的数据是一致的。
TCP协议
再说说TCP协议:TCP(Transmission Control Protocol缩写)表示传输控制协议。TCP的协议需要先建立连接之后,再进行通信。
TCP报文段格式: 在建立连接时,客户端和服务器通过空数据报进行请求和响应,在空数据报的报头中有标志位Flag,这些标志位是可以为0、1的bit位,根据这些标志位可以表示发送信息的类型,如下图所示: 连接的建立
- 客户端发送将报头中的SYN标志位设置为1,表示请求与服务器建立通信。
- 服务器成功接收后,响应数据报的报头设置标志位ACK为1,并将SYN设置为1后响应给客户端,表示确认建立客户端到服务端通信,并请求与客户端建立通信。
- 客户端接收到服务器返回的报文后,向服务器发送标志位ACK为1的数据报,表示同意建立服务端到客户端通信。
这时整个连接建立完成,也就是我们常说的TCP三次握手,图解如下: 保持连接
保持连接时数据包的报头标志位ACK设置位1,表示对上次的数据报接收的确认。
终止连接
连接的终止需要用到标志位FIN,过程如下:
- 客户端向服务端发送数据报,报头标志位FIN设置为1,表示请求与服务端断开连接。
- 服务端接收报文后,响应标志位ACK为1的数据报,表示同意断开客户端到服务端的通信。
- 服务端向客户端发送数据报,报头标志位FIN设置为1,表示请求与客户的断开连接。
- 客户端接收到报文后,响应标志位ACK为1的数据报,表示同意断开服务端到客户端的通信。
至此,连接中断,这个过程我们称为TCP的4次挥手,图解如下:
补充: 关于Socket,用我的理解简单的说就是,为了方便使用UDP/TCP,Socket是对UDP/TCP的封装,我们通过调用Socket对外提供的接口,对网络应用进行开发。 Socket区别于http协议,http协议是以TCP协议为基础,是OSI模型的应用层协议,而Socket是对TCP协议的封装。
|