CrazyDailyQuestion
CrazyDailyQuestion copied to clipboard
2019-10-21: Tcp,Udp的长连接是怎么做的?如何保证长连接的安全,保证没有被窃听及服务器的合法性?消息的解析和发送怎么设计?长连接的重试怎么做?
UDP | TCP
一.UDP 和TCP 区别
TCP是面向连接的,例如:直播的RTMP协议,会有丢包的风险,但是在直播行业里面,宁可丢包,也不要卡顿或者丢帧,UDP 也是面向连接的,如:很多直播行业,网络状况不佳,会遵循UDP协议来实现自己的网络协议,因为TCP协议会降低网络速度,视频播放会卡的不行。
二.TCP 三次握手
- A: 您好 , 我是 A
- B: 您好A , 我是 B
- A: 您好B
- CLOSED状态: 客户端和服务端处于closed状态
- LISTEN状态: 服务端监听客户端端口
- SYN-SENT状态: 客户端发送syn给服务端
- SYN_RCVD状态: 服务端收到发送连接,返回syn,并且ack客服端的syn
- ESTABLISHED状态: 客户端收到服务端发送的
ack和syn之后,处于ESTABLISHED状态,同理服务端收到客户端的ack和syn之后处于ESTABLISHED状态。
三. TCP 四次挥手
- A: B啊~ 我不想玩了
- B: 哦, 你不想玩了啊, 我知道了。
- A: A啊, 我也不玩了, 拜拜。
- A: 好的, 拜拜~
长链接是通过发送心跳来保持连接的 长连接的重试:
- 客户端网络空闲5秒没有进行写操作时,进行发送一次ping心跳给服务端;
- 客户端如果在下一个发送ping心跳周期来临时,还没有收到服务端ping的心跳应答,则失败心跳计数器加1;
- 每当客户端收到服务端的ping心跳应答后,失败心跳计数器清零;
- 如果连续超过3次没有收到服务端的心跳回复,则断开当前连接,在5秒后进行重连操作,直到重连成功