网络协议之TCP和UDP

写在前面

本文来看下TCP和UDP协议。

我们接触这两个协议最多的应该就是在面试中了,经典题目就是"TCP和UDP有什么区别?",而最常得到的答案就是TCP是面向连接的,而UDP是面向无连接的。

那么这里的连接到底是什么呢?难道真的是有一条物理上的线在那里吗?当然不是,实际上是这样子的,我们知道,TCP想要建立连接,必须经历三次握手的过程,三次握手其实就是在交换数据,而三次握手之后,双方都会将这些TCP协议本身需要用到的数据使用一定的数据结构维护起来,所以连接其实就是使用一定的数据结构保存的数据,也所以连接其实就是数据了,即连接=数据。那么UDP为什么是无连接的呢,因为它不需要维护这些数据。使用这些数据来维护交互的状态,也就是在逻辑上连接起来了,而绝非物理上的。

TCP维护连接状态的数据都有哪些呢,比如滑动窗口信息,哪些数据发送了没有ack,哪些数据发送了还没有ack,哪些数据还没有发送等。

其他区别:

复制代码
TCP提供可靠交付,UDP不是
TCP是面向流的,没头没尾,而UDP是基于数据包的,一个个发,一个个收
TCP有拥塞控制,UDP没有

所以啊,可以总结来看,TCP也是一个服务,而程序分为无状态的服务和有状态的服务,很明显TCP是属于有状态的服务了。相对应的UDP就是一个无状态的服务。

1:UDP

UDP全称,user diagram protocol,即用户数据报协议,是一种无连接协议。

1.1:UDP的头

当机器收到一个包之后,物理层首先会拆掉物理层头部,判断MAC地址是否匹配,如果是匹配则交给网际层,网际层获取头部后,发现IP地址匹配,则交给传输层处理,但是到底是交给哪种传输层协议呢,这里需要看IP头部的具体存放使用的是TCP还是UDP的8位协议信息了,这里假定是UDP,数据到达UDP,UDP怎么知道交给哪个应用程序呢?这就需要端口号了,也就是UDP头的如下信息:

这里也可以看到UDP的头只有8个字节,简单到一塌糊涂。而相比之下TCP的头就要复杂多了。

传输层处理完毕之后,内核的工作也就完成了。接下来只要找到监听了目标端口号的应用程序,交给其处理就行了。

1.2:UDP适用的场景和实例

1.2.1:网络比较好的内网环境

比如像飞鸽,飞秋等内网的聊天工具。

1.2.2:对时延敏感,且对少少量丢包不敏感应用

比如实时对战游戏,属于分秒必争型的,很多职业玩家,为了进一步降低时延甚至会买专业版的鼠标和键盘。如果是使用TCP,可能为了等待上一个没有到达的包,早就被爆头了。

比如直播场景,视频网站,少量的丢包用户其实是没有感知的,特别是直播追求实时性,已经丢失的包就算等到了其实也没有意义了。

1.2.3:应用本身资源少

比如IOT物联网,设备内部可能只是嵌入了一个很小的操作系统,终端系统资源很少,而TCP需要额外存储一些维护连接状态的数据,协议代价比较大。

1.2.4:广播场景

比如DHCP。就算丢包也所谓,重发就行了。

2:TCP

写在后面

参考文章列表

多知道一点

网络包的单位都有哪些?

网络传输是以包为单位的,二层叫帧,网络层叫包,传输层叫段。我们笼统地称为包。

相关推荐
sibo_yzm17 小时前
ECE-583快速打通欧姆龙PLC与Modbus TCP客户端连接
tcp/ip·modbus tcp·工业通信·光伏·ethercat·工业网关·上海泗博
我今晚不熬夜20 小时前
Java语言实现Modbus协议通过用串口读取数据(以RTU为例)
java·网络协议
DLYSB_1 天前
《从零开始搭建机房轻量化“声光告警”系统:基于 HTTP API 与 TTS 的运维实践》
运维·网络协议·http·报警灯
ZhengEnCi1 天前
N3A-一个端口只能给一个程序使用吗?
网络协议
发光的沙子1 天前
FPGA----配置根文件系统ip和mac地址
网络协议·tcp/ip·macos
Arbori_262151 天前
TCP 通信协议
网络·网络协议·tcp/ip
华清远见成都中心2 天前
物联网通信协议对比:MQTT、CoAP、HTTP到底该怎么选
物联网·网络协议·http
kk的vmware虚拟机安装ubuntu2 天前
鱼皮 yu-rpc:从 0 到 1 手写 RPC 框架的实践教程
网络·网络协议·其他·rpc
ShineWinsu2 天前
对于Linux:网络基础的解析
linux·网络·面试·udp·笔试·ip·tcp