目录
一、TCP简介
TCP(Transmission Control Protocol),又叫传输控制协议。 TCP协议是面向连接的,可靠的,基于字节流的传输协议。在基于 TCP 进行通信时,通信双方需要先建立一个 TCP 连接,建立连接需要经过三次握手,断开连接的时候需要经过四次挥手。
对于 TCP 头部来说,以下几个字段是很重要的:
- 序列号 (Sequence number),这个序号保证了 TCP 传输的报文都是有序的,对端可以通过序号顺序的拼接报文
- 确认号 (Acknowledgement Number),这个序号表示数据接收端期望接收的下一个字节的编号是多少,同时也表示上一个序号的数据已经收到
- 窗口大小 (Window Size),表示还能接收多少字节的数据,用于流量控制
- 标识符
- ACK=1 :该字段为一表示确认号字段有效。此外,TCP 还规定在连接建立后传送的所有报文段都必须把 ACK 置为一。
- SYN=1:当SYN=1,ACK=0时,表示当前报文段是一个连接请求报文。当SYN=1,ACK=1时,表示当前报文段是一个同意建立连接的应答报文。
- FIN=1:该字段为一表示此报文段是一个释放连接的请求报文。
- URG=1 : 该字段为一表示本数据报的数据部分包含紧急信息,是一个高优先级数据报文,此时紧急指针有效。紧急数据一定位于当前数据包数据部分的最前面,紧急指针标明了紧急数据的尾部。
- PSH=1 :该字段为一表示接收端应该立即将数据 push 给应用层,而不是等到缓冲区满后再提交。
- RST=1:该字段为一表示当前 TCP 连接出现严重问题,可能需要重新建立 TCP 连接,也可以用于拒绝非法的报文段和拒绝连接请求。
二、UDP简介
UDP(User Datagram Protocol),又叫用户数据报协议。 UDP是一个无连接的、不可靠、基于数据报的传输协议。UDP只是报文(报文可以理解为一段段的数据)的搬运工,不会对报文进行任何拆分和拼装操作。
具体来说
- 在发送端,应用层将数据传递给传输层,UDP只会给数据怎加一个UDP头标识一下这是UDP,然后就传递给网络层了,不进行任何拆分。
- 在接收端,网络层将数据传递给传输层,UDP只取出IP报文头就传递给应用层,不进行任何拼装。
特点:
- 面向报文
- 不可靠传输
- 高效
应用场景: 当强调输出性能而非完整性时,如音频和多媒体的实时传输。有个视频流传输协议RTP的实时传输就是基于UDP封装而来的。
不可靠性
- UDP是无连接的,也就是说不需要建立和断开链接。
- UDP是不可靠的。它不会去备份数据,也不关心对方是否能收到数据。
- UDP没有拥塞控制,一直以恒定的速度发送数据,即使网络条件不好,也不进行速率调整。 造成的弊端就是在网络条件不好时可能导致丢包。
高效性
因为 UDP 没有 TCP 那么复杂,不需要保证数据不丢失且有序到达。所以 UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的。
UDP包头部包含了以下几个数据
- 两个十六位的端口号,分别为源端口(可选字段)和目标端口
- 整个数据报文的长度
- 整个数据报文的检验和(IPv4 可选字段),该字段用于发现头部信息和数据中的错误
三、TCP三次握手四次挥手
参考链接