一、TCP/UDP对比
1.共同点:
都是工作在TCP/IP体系结构的传输层的协议
工作主要都是把端口号往原始数据封装
在 TCP 协议中,原始数据指的是应用程序产生的需要通过网络进行传输的数据。这些数据可以是各种类型的信息,例如文本、图像、音频、视频等。
原始数据通常在应用程序中生成,并被传递给 TCP 协议进行封装和传输。TCP 协议会将原始数据与其他相关信息(如端口号、序列号、校验和等)一起组成 TCP 数据包。
2.区别:
- TCP是面向连接的协议,而UDP是无连接的协议;
- TCP协议的传输是可靠的,而UDP协议的传输 “尽力而为”;
- TCP协议可以实现流控,而UDP不行;
流控:流量控制
我们在发送数据的时候,有的时候发送的太快,有的时候发送的太慢,我们要想办法控制一下这个速度,这点TCP可以做到,而UDP做不到。
流控(3)应该算是传输可靠性(2)中的一环,流量发的快一点或者慢一点,主要目的是保证对方能够正常收到这些信息,能够正常地处理这些信息,并且保证传输效率。所以有流控这个机制在里面,传输也会更可靠一点。
- TCP可以分段,而UDP不行;
分段:拆分大的数据包
我们发数据的时候,这个数据包有可能很大,因为里面的数据内容有可能很多,TCP可以分段就是可以把这些很大的数据包拆分开,拆成一个一个的小段,然后再去分别发送过去,而UDP不行,多大就多大发。
- TCP消耗资源较大,传输效率较低。UDP耗费资源较小,速度快;
3.TCP/UDP使用场景
- TCP协议更适用于对传输可靠性要求较高,但是对传输效率和资源占用要求较低;(网页浏览、电子邮件传输和文件传输等);
- UDP更适用于对传输效率要求较高,可靠性要求较低的场景;(即时通实现类:语音、视频、聊天、游戏、直播等);
什么是面向连接?
我们可以通过一个小游戏来理解一下:
TCP面向连接小游戏
在正式传输数据之前,先使用预先的协议(TCP协议),建立点到点的链接。
A跟B说:你准备好了吗?我要开始扔球了,然后B说:我准备好了。
有了这一来一回,A就可以给B扔球了。A给B的连接就相当于建立好了。这种情况下,A就可以给B扔球了。
如果B也想给A扔球,那B也要A给B说:你准备好了吗?我也要开始扔球了,然后A说:我准备好了。 有了这一来一回,B也可以给A扔球了。
所以数据传输其实是双向的,TCP协议建立好的通信通道其实是双向的,就是A可以给B扔球,小B也可以给A仍球,这个通道就是 “会话”。
什么是会话?
A可以给B发信息,那A就生成一条指向B的会话,B可以给A发信息,那B就生成一条指向A的会话。可以发送信息的这个通道,就可以把他理解为是一个会话。
TCP协议是面向连接的协议,在发送数据之前要先建立连接,而他建立的连接就是建立的一条双向会话。
TCP建立的连接实际建立了一个双向的会话连接,即通讯双方都可以向对方发送数据。
一张很刺激的图片:
这张图可以在一定程度上可以反应出来TCP和UDP这两种协议的风格。
- TCP比较沉稳,面向连接、速度慢、可靠传输;
- UDP比较奔放,无连接、速度快、不可靠传输;
来看一下TCP和UDP这两个协议的包头,上面的图片中写着TCP-20字节头,UDP-8字节头。
往原始数据前面加的数据称之为头部,往后面加的称之为尾部。
TCP和UDP都是只给前面加,所以他们只有头部信息。
我们看一下他们头部都要封装哪些参数,哪些内容。
TCP协议头部:
- 源端口号:
- 目的端口号
- 序号
- 确认序号
- 首部长度
- 保留
- 窗口大小
- 校验和
- 紧急指针
- 选项
封装图: