c++网络编程基础(一)
TCP和UDP
tcp和udp是传输的两种协议他们各有不同,大部分情况下使用的是tcp协议,还有一部分使用的是udp协议
1.TCP和UDP的区别
- TCP
- TCP面向连接,通过三次握手连接和四次握手断开连接;
- TCP是可靠的通信方式,通过超时重传、数据校验等方式来确保信息无差错,不丢失,不重复。并且按序到达;
- TCP把数据当成字节流,当网络出现波动时,连接可能出现响应延迟的问题;
- TCP只支持点对点通信;
- TCP报文首部比较大有20字节;
- UDP
- 无连接,发送前不握手,收后不断开;
- 不保证可靠,无重传,无确认,无序;
- 面向报文,一次发一个完整报文,不合并,不拆分;
- 支持1->1、1->N、N->N;
- 首部仅8字节,开销小;
- 无流量控制和拥塞控制,应用层自己限速;
2.TCP保证自身可靠性的方式
- 分片重组与序号管理:发送端按 MSS 分片、接收端按序号重组,天然解决失序/重复问题。
- 到达确认:接收端接收到分片数据时,根据分片的序号对端回复一个确认包(ACK);
- 超时重发:发送方在发送分片后开始计时,若超时却没有收到对端的确认包(ACK),将会重发分片,可选SACK只重传丢失的块;
- 滑动窗口:TCP中采用滑动窗口来进行传输控制,发送方可以通过滑动窗口大小来确定应该发送多少字节的数据。当窗口为0时,发送方不会再发送数据;
- 重复处理:如果传输的分片出现重复,TCP的接收端会抛弃重复的数据;
- 数据校验:首部与数据反码和校验,出错即丢。
- 拥塞控制:慢启动,拥塞避免,快重传,快恢复,动态调节发送频率;
- 保活计时器:长时间无数据则发探活包,防止‘’死连接‘’占用资源
3.UDP不可靠的原因
- 无连接状态,不跟踪报文是否到达;
- 无序号与确认,无法判断丢包或乱序;
- 无超时重传,发送后不管;
- 无流量/拥塞控制,网络拥塞时仍按原速率发送,加剧丢包;
- 仅可选校验和,出错直接丢弃,不通知发送方。
4.TCP和UDP的使用场景
- TCP使用场景:
TCP实现了数据传输过程中的各种控制,适合对可靠性有要求的场景
如:文件传输、远程登录、邮件、数据库、web等
- UDP使用场景:
可以容忍数据丢失的场景
如:DNS查询、DHCP广播、实时游戏同步
评论




