1. UDP
- UDP无连接的,减少开销和发送数据之间的延迟
- UDP使用最大努力交付,即不保证可靠交付。
- UDP是面向报文的(直接将整个应用层传过来的报文封装),适合一次性传输少量数据的网络应用。
- UDP没有拥塞控制(IP电话、腾讯会议),如果拥塞太过严重,直接重传报文~
- UDP首部开销小,8个字节(8B)–16位源端口号(可有可无)–16位目的端口号(必须要有)–16位UDP长度(整个数据的长度)–16位UDP检验和(检验是否出错)
2. TCP
2.1 特点
- TCP是面向连接的传输层协议
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
- TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。可靠有序,不丢不重
- TCP提供全双工通信:发送缓存(准备发送的数据&已发送但尚未收到确认的数据)接受缓存(按序到达但尚未被接受应用程序读取的数据&不按序到达的数据)
- TCP面向字节流:TCP把应用程序看成仅仅是一连串的无结构的字符流(字节序列)
2.2 TCP报文段首部格式
- 序号seq:TCP发送报文段中第一个字节的值
- 确认号ack:期望收到对方下一个报文段的第一个字节的值
- 数据偏移:TCP首部的长度
- URG:URG = 1,紧急数据,让我先传(插队),冲冲冲~~~
- 确认位ACK:ACK = 1时,确认号有效,ACK = 0,确认号无效,在连接建立后所有传送的报文段都必须吧ACK置为1
- 推送位PSH:如果该位为1的话,就赋予了一个优先级,交给上面
- 复位RST:大多数用来出现差错,重新连接
- 同步位SYN:SYN = 1时,表示这是一个请求连接的报文段
- 终止位FIN:FIN = 1,表明释放连接
- 紧急指针:就是URG中紧急数据的长度
2.3 TCP的连接管理
TCP连接传输三个阶段:连接建立-----数据传送-----连接释放
TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器。
2.3.1 TCP三次握手
- 第一次握手(SYN = 1、seq = x(随机),ACK = 0):客服端发送连接请求报文段,无应用层数据
- 第二次握手(SYN = 1,ACK = 1,seq = y(随机), ack = x + 1):服务器为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据
- 第三次握手(SYN = 0,ACK = 1, seq = x + 1, ack = y + 1):客户端为该TCP连接分配缓存和变量,并向服务器返回确认的确认,可以携带数据。
2.3.2 SYN洪泛攻击
2.3.3 TCP的4次挥手
- 第一次挥手(FIN = 1,seq = u):客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接
- 第二次挥手(ACK = 1,ack = u + 1, seq = v):服务器返回一个确认报文段,客户到服务器这个方向的连接就释放了–半关闭状态
- 第三次挥手(FIN = 1,ack = u + 1, seq = w,ACK = 1):服务器发完数据,就发出连接释放报文段,主动关闭TCP连接
- 第四次挥手(ACK = 1, seq = u + 1,ack = w + 1):客户端回送一个确认报文段,在等待计时器设置的2MSL(最长报文段寿命后),连接彻底关闭。
2.3.4 2MSL的由来
客户端发送的第四次挥手报文段,没有发送到服务器
这时候服务器端会再次发送第三次挥手的内容,请求关闭
这时候客户端收到请求,再次发送4次挥手,服务器收到,双方关闭
如果没有2MSL的话,客户端直接关闭,这时候服务端就会重复的发送第三次挥手,服务器无法进入关闭状态
3. TCP、UDP的区别