TCP连接与UDP协议
一、TCP的连接管理
1、TCP包头
2、连接的建立——”三次握手”
- TCP 建立连接的过程叫做握手。
- 采用三报文握手:在客户和服务器之间交换三个 TCP 报文段,以防止已失效的连接请求报文段突然又传送到了,因而产生TCP 连接建立错误
过程:
1、
2、
3、
4、
5、
6、
7、
总结:
三次握手(建立连接)
目的:确保双方都能发送和接收数据,同步序列号。
第一次握手(SYN)
客户端发送一个SYN包(同步序列号),请求建立连接。
包内容:SYN=1, seq=x
(x是客户端初始序列号)第二次握手(SYN-ACK)
服务器收到后,回复一个SYN-ACK包,表示同意建立连接,并同步自己的序列号。
包内容:SYN=1, ACK=1, seq=y, ack=x+1
(y是服务器初始序列号)第三次握手(ACK)
客户端收到后,再发送一个ACK包确认,连接正式建立。
包内容:ACK=1, seq=x+1, ack=y+1
3、连接的释放——“四次挥手”
- TCP 连接释放过程比较复杂。
- 数据传输结束后,通信的双方都可释放连接。
- TCP 连接释放过程是四报文握手
过程:
1、
2、
3、
4、
5、
总结:
目的:确保双方数据都传输完毕,安全关闭连接。
第一次挥手(FIN)
客户端(或服务器)发送FIN包,表示“我没有数据要发了”,请求关闭连接。
包内容:FIN=1, seq=u
第二次挥手(ACK)
对方收到后,回复一个ACK包,表示“知道了,但我可能还有数据要发”。
包内容:ACK=1, ack=u+1
第三次挥手(FIN)
对方数据发完后,也发送一个FIN包,表示“我也发完了,可以关闭了”。
包内容:FIN=1, seq=v
第四次挥手(ACK)
最初发起关闭的一方回复ACK,确认关闭。
包内容:ACK=1, ack=v+1
关键点对比:
阶段 | 三次握手 | 四次挥手 |
目的 | 建立连接 | 断开连接 |
标志位 | SYN, SYN-ACK, ACK | FIN, ACK, FIN, ACK |
状态 | 双方建立通信通道 | 双方安全释放资源 |
为什么挥手比握手多一次?
握手:SYN和ACK可以合并为SYN-ACK(第二次握手)。
挥手:被动关闭方可能需要等待数据发送完毕,因此ACK(第二次挥手)和FIN(第三次挥手)必须分开发送。
4、保活计时器
- 用来防止在 TCP 连接出现长时期空闲。
- 通常设置为 2 小时
- 若服务器过了 2 小时还没有收到客户的信息,它就发送探测报文段。
- 若发送了 10 个探测报文段(每一个相隔 75秒)还没有响应,就假定客户出了故障,因而就终止该连接。
二、用户数据报协议UDP
1、计算机网络体系结构
2、UDP协议
UDP只在IP的数据报服务之上增加了一些功能:
- 复用和分用
- 差错检测
3、UDP 的主要特点
- 无连接。发送数据之前不需要建立连接
- 使用尽最大努力交付。即不保证可靠交付。
- 面向报文。UDP 一次传送和交付一个完整的报文。
- 没有拥塞控制。网络出现的拥塞不会使源主机的发送速率降低。很适合多媒体通信的要求。
- 支持一对一、一对多、多对一、多对多等交互迥首部开销小,只有8个字节。
UDP 通信的特点:简单方便,但不可靠。
4、UDP是面向报文的
- 发送方 UDP 对应用层交下来的报文,既不合并,也不拆分,按照原样发送。
- 接收方 UDP 对 IP 层交上来的 UDP 用户数据报,去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。
用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是 2 个字节。