网络协议之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

写在后面

参考文章列表

多知道一点

网络包的单位都有哪些?

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

相关推荐
while(1){yan}1 小时前
基础IP协议知识
网络·网络协议·tcp/ip
车载测试工程师1 小时前
CAPL学习-AVB交互层-功能函数-控制类函数
学习·tcp/ip·以太网·capl·canoe
小心我捶你啊2 小时前
正向代理与反向代理两者的核心区别
网络·爬虫·网络协议
一只小鱼儿吖2 小时前
实时监测代理IP池质量并生成可视化报告的实战(以携趣代理API为例)
网络·网络协议·tcp/ip
Nerd Nirvana2 小时前
IPv6组播在DLMS协议中的应用——基础知识掌握
linux·运维·服务器·网络·网络协议·ipv6·dlms协议
福尔摩斯张2 小时前
TCP/IP网络编程深度解析:从Socket基础到高性能服务器构建(超详细)
linux·运维·服务器·开发语言·网络·网络协议·tcp/ip
Sleepy MargulisItG2 小时前
【Linux网络编程】传输层协议:TCP
linux·网络·tcp/ip
那我掉的头发算什么3 小时前
【javaEE】UDP与TCP核心原理深度解析:从“不可靠”到“稳如老狗”的进化之路
网络协议·tcp/ip·udp·java-ee·传输层协议
傻啦嘿哟3 小时前
隧道代理VS传统代理:IP切换效率的深度技术解析
网络·网络协议·tcp/ip
寰天柚子3 小时前
服务器性能优化实战:从资源瓶颈定位到极致调优(附租赁服务器适配指南)
运维·服务器·udp