爆锤TCP/UDP
TCP/UDP
TCP: 传输控制协议(英语:Transmission Control Protocol,缩写为TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
UDP:用户数据报协议(英语:User Datagram Protocol,缩写为UDP),又称使用者资料包协定,是一个简单的面向数据报的传输层协议,正式规范为RFC 768。
前言:
关于TCP和UDP这两个协议是面试中非常常见的问题,本文讨论以下几个问题:
- 什么是TCP
- 什么是UDP
- TCP和UDP的异同点
- TCP和UDP的应用场景
1. TCP和UDP的异同点
1.1 相同点
- UDP和TCP同属于传输层的协议
1.2 不同点
- TCP面向字节流,而UDP面向数据报。
解释:
TCP收发的是一堆数据,是一个数据流,而每次取多少由主机决定;
而UDP发的是数据报,客户发送多少就接收多少
- TCP是面向连接的,而UDP不是面向连接的。
解释:
TCP是面向连接的,也就是说,在连接持续的过程中,socket中收到的数据都是由同一台主机发出的,因此,知道保证数据是有序的到达就行了,至于每次读取多少数据自己看着办。
而UDP是无连接的协议,也就是说,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。
- TCP是可靠的,而UDP是不可靠的。
解释:
TCP为提供可靠性传输实行“顺序控制”或“重发控制”机制。此外还具备“流量控制”、“拥塞控制”、提高网络利用率等众多功能,并且只有确认通信端存在才会发送数据,从而可以控制通信流量的浪费。
在UDP的情况下,虽然可以确保发送信息的大小,却不能保证信息一定会到达。因此,应用有时会根据自己的需要进行重发处理。 UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。它并不需要确认通信端是否存在,可以随时发送数据。
- TCP是全双工的,UDP支持多播和广播。
解释:
TCP是全双工的,所谓全双工就是数据在两个方向上同时进行传送操作,例如我们打电话,说话的同时也能够听到对方的声音,一旦两个通信端口简历TCP连接,那么两个端口只能一对一进行数据传输。
UDP因为不需要一对一建立连接,所以它可以做到一对一,一对多等传输方式,承担广播或者多播,虽然它不会建立连接,但是会监听这个端口,谁都可以给这个端口传数据,它也可以给任何人传数据。
- UDP 不处理堵塞,应用需要发,就会发送。TCP 还拥有堵塞控制,TCP 会根据网络环境调整发包的频率。
- TCP的传输效率低,UDP的传输效率高。
解释:因为UDP不用对收发的数据进行确认校验,有什么发什么,所以使得UDP的开销更小数据传输速率更高。
来一个直观的对比
原文地址:https://www.cnblogs.com/zaijianba/p/11537581.html
- POJ 1163 The Triangle【dp+杨辉三角加强版(递归)】
- UVA 11039-Building designing【贪心+绝对值排序】 UVA11039-Building designing
- UVA 11636-Hello World!(水题,猜结论) UVA11636-Hello World!
- 百度某SDK设计缺陷导致手机敏感信息泄露(IMEI号和地理位置信息等)
- HDU 1004 Let the Balloon Rise【STL<map>】
- UVA 10881 - Piotr's Ants【模拟+思维】
- DFS中的奇偶剪枝学习笔记
- POJ 3154 Graveyard【多解,数论,贪心】
- HDU 1010 Tempter of the Bone【DFS经典题+奇偶剪枝详解】
- Ethereum - 以太坊项目
- COGS 144. [USACO Dec07] 魅力手镯【01背包复习】
- SQL Server 使用全文索引进行页面搜索
- HDU 1003 Max Sum【动态规划求最大子序列和详解 】
- HDU 1005 Number Sequence【多解,暴力打表,鸽巢原理】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 掌握PHP垃圾回收机制详解
- PHP基于面向对象封装的分页类示例
- PHP获取对象属性的三种方法实例分析
- PHP7内核之Reference详解
- PHP基于PDO扩展操作mysql数据库示例
- php实现的PDO异常处理操作分析
- PHP yield关键字功能与用法分析
- php PDO属性设置与操作方法分析
- PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
- CI框架实现创建自定义类库的方法
- php如何计算两坐标点之间的距离
- Python调用C语言程序方法解析
- php workerman定时任务的实现代码
- Yii2.0 RESTful API 基础配置教程详解
- opencv 形态学变换(开运算,闭运算,梯度运算)