CrazyDailyQuestion icon indicating copy to clipboard operation
CrazyDailyQuestion copied to clipboard

2019-10-21: Tcp,Udp的长连接是怎么做的?如何保证长连接的安全,保证没有被窃听及服务器的合法性?消息的解析和发送怎么设计?长连接的重试怎么做?

Open MicroKibaco opened this issue 6 years ago • 2 comments

MicroKibaco avatar Oct 21 '19 00:10 MicroKibaco

UDP | TCP

一.UDPTCP 区别

   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状态: 客户端收到服务端发送的acksyn之后,处于 ESTABLISHED状态,同理服务端收到客户端的acksyn之后处于 ESTABLISHED状态

三. TCP 四次挥手

  • A: B啊~ 我不想玩了
  • B: 哦, 你不想玩了啊, 我知道了。
  • A: A啊, 我也不玩了, 拜拜。
  • A: 好的, 拜拜~

MicroKibaco avatar Oct 21 '19 14:10 MicroKibaco

长链接是通过发送心跳来保持连接的 长连接的重试:

  1. 客户端网络空闲5秒没有进行写操作时,进行发送一次ping心跳给服务端;
  2. 客户端如果在下一个发送ping心跳周期来临时,还没有收到服务端ping的心跳应答,则失败心跳计数器加1;
  3. 每当客户端收到服务端的ping心跳应答后,失败心跳计数器清零;
  4. 如果连续超过3次没有收到服务端的心跳回复,则断开当前连接,在5秒后进行重连操作,直到重连成功

peiniwan avatar Oct 24 '19 06:10 peiniwan