一.TCP协议
1.TCP---》SOCK_STREAM 可靠的---》三次握手 四次挥手
TCP通过以下措施保证可靠性:
- TCP通过三次握手建立连接
- TCP超时没有收到对端的响应,会重发数据
- TCP会把重复的包丢弃
- 出错的数据会被丢弃,等待重发数据
- 滑动窗口机制解决写消息速度快,读消息速度慢的问题
接收端通过窗口大小通知发送端能发多少数据。
2.UDP-->SOCK_DGRAM 不可靠的 丢包 重传 实时性好
UDP是无连接的,不保证可靠的传输层协议。
UDP没有发送缓冲区,有接收缓冲区。
UDP数据报有最大长度限制。
UDP没有建立连接的过程,没有三次握手。
UDP为什么不能保证可靠性:
- UDP头里没有序列号和确认序列号,没有响应确认机制,UDP数据报可能在网络传输中丢失,没有重发机制。
- UDP头里的校验和是允许关闭的,如果关闭,出错了,UDP无法校验出来。
UDP使用场景:
- 对传输效率要求高,对可靠性要求不高的场景,比如视频聊天,语音聊天。
- 发送小尺寸数据,比如查询DNS服务(通过域名查询IP地址)。
- 广播和组播必须使用UDP编程。
实时性 > 可靠性,选择UDP
可靠性 > 实时性,选择TCP
tcp客户端流程
socket ---- bind ---- connect ---- send/recv ---close
tcp客户端流程分为四步,创建流式套接字,客户端连接服务器,发/收消息,关闭套接字。
UDP服务端流程
socket --- connect --- send/recv---close
UDP客户端流程
socket ---- bind ----- send/recv ---close
tcp服务端流程
socket --- connect --- send/recv----close
1.socket
2.connect
3.send/recv
4.bind
5.listen
6.accept