TCP与UDP区别详解

2021-04-12  本文已影响0人  CODING技术小馆

TCP与UDP区别详解

计算机与其他网络设备相互通信,通信的双方在发送和接收数据包时必须基于相同的规则(例如:如何找到通信目标、如何发起通信、如何结束通信等规则都需要事先确定),我们将这种规则称为协议(Protocol)。

TCP/IP协议簇是 Internet 的基础,其是一系列网络协议的总称,例如:TCP、UDP、IP、FTP、HTTP、ICMP、SMTP等都属于TCP/IP协议族内的协议。
这些协议在计算机网络中自下而上被划分为四层:链路层、网络层、传输层和应用层。

开放式系统互联通信参考模型

在网络体系结构中网络通信的建立必须是在通信双方的对等层进行,不能交错。
在整个数据传输过程中,数据在发送端经过各层时都要附加上相应层的协议头和协议尾(仅链路层需要封装协议尾)。

UDP 与 TCP 两种传输协议是 TCP/IP 协议簇的核心成员。

一、UDP

UDP(User Datagram Protocol)全称是用户数据电报协议,是一种无连接的协议,提供不可靠的用户数据报服务,1980 年发布的 RFC 768 定义了 UDP 协议。

UDP数据结构

UDP数据结构如下图所示:


UDP数据

UDP 协议头中只包含 4 个字段:源端口、目的端口、UDP长度、UDP校验码,其中每一个字段都占 16 位,即 2 字节,共8个字节。

UDP首部数据举例

常见的 DNS 协议就可以使用 UDP 协议获取域名解析的结果:

0000   ff 7c 00 35 00 23 c2 6e

上述 UDP 首部中四个字段对应的值如下:

UDP在数据传输中的位置

这里我们可以将应用到应用之间的传输过程分成两个部分:
主机到主机的数据传输主机到应用的数据转发

我们说 UDP 协议是传输层协议,但是真正在主机间完成数据传输工作的是 IP 协议UDP 协议只起到了定位具体进程的作用。

UDP数据传输的特点

UDP数据传输

二、TCP

TCP(Transmission Control Protocol)协议全称是传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,由RFC 793定义。

当用户查看网页或电子邮件时,希望看到的内容完整且顺序正确,不丢失任何内容;当下载文件时,希望获得的是完整的文件,而不仅仅是文件的一部分;以上应用场景的传输层协议均可采用TCP协议。

TCP数据结构

TCP数据结构

TCP三次握手

TCP协议发送数据之前必须在通信的两端建立连接,建立连接的方法是TCP三次握手

TCP三次握手

为什么 TCP 建立连接需要三次握手,而不是两次?
TCP既要保证数据可靠传输,又要提高传输的效率,而用三次(客户端与服务端发送的报文都得到了响应,通信双方全都有来有回)恰恰满足了以上两方面的需求!

TCP三次握手

TCP四次挥手

TCP断开连接,也被称为四次挥手:

enter description here

TCP协议的特点

相比与UDP协议,TCP协议拥有面向连接、保证顺序、可靠传输、提供拥塞控制等特点。

为了保证顺序性,每个TCP数据包都有一个序号ID,在建立连接的时候会商定起始 ID 是什么,然后按照 ID 一个个发送;
为了保证不丢包,需要对发送的包都要进行应答,这里应答不是一个一个来的,而是会应答某个之前的 ID,表示都收到了,这种模式成为累计应答
为了记录所有发送的包和接收的包,需要发送端接收端分别缓存这些记录。

TCP发送端的缓存里是按照数据包的 序号ID 一个个排列,根据处理的情况分成四个部分:

TCP发送端缓存结构

在 TCP 协议中接收端会给发送端报一个窗口大小Advertised Window,这个窗口大小等于上面的第二、第三部分加和,超过这个窗口接收端处理不过来,暂时不能继续发送;

上图TCP发送端缓存队列中:

TCP接收端缓存内容类型如下:

TCP接收端缓存结构

上图TCP接收端缓存队列中:

TCP发送端、接收端当前的状态如下(依据以上两个图):

根据这个例子可以知道顺序问题和丢包问题都有可能存在:

假设4的ACK响应发送端收到了,5的ACK丢了;6、7的数据包丢了,该怎么办?

参考

UDP—RFC768:
https://tools.ietf.org/html/rfc768

TCP—RFC973:
https://tools.ietf.org/html/rfc793

Stackoverflow: UDP checksum calculation, Sep 2017
https://stackoverflow.com/questions/1480580/udp-checksum-calculation

百度百科—UDP:
https://baike.baidu.com/item/UDP/571511?fr=aladdin

百度百科—TCP:
https://baike.baidu.com/item/TCP/33012?fr=aladdin

TCP 和 UDP 的区别:
https://blog.csdn.net/zhang6223284/article/details/81414149#comments

一文搞懂TCP与UDP的区别
https://www.cnblogs.com/fundebug/p/differences-of-tcp-and-udp.html

上一篇 下一篇

猜你喜欢

热点阅读