给产品经理讲技术,不得不懂的TCP和UDP
TCP/IP协议,你一定经常听说吧,其中TCP(Transmission Control Protocol)称为传输控制协议,IP(Internet Protocol)称为因特网互联协议,好吧,这都是什么2B名字,根本不知所云,这个时候,计算机科学对于一个没有经过深入研究的人,毫无用户体验可言。
其实TCP/IP协议,是一个协议簇,就是一大堆协议的集合,这一大套协议定义了整个互联网通信的基础,比如一次网络链接要经过哪些步骤,一块数据 传输过程中应该如何解释,这块数据该如何展示给编程者等等问题。就好比小时候玩过家家的游戏,谁负责当爸,谁负责当妈,谁负责当儿子,都有明确的指派,谁 负责买菜,买菜之后的钱交给谁来管理,如果没花了,怎么办,每天应该几点起床,起床之后应该谁叠被,都会明确指出,每个人都会默默遵从人物角色和规则。 TCP/IP整个协议集合大概做的就是这个事情,他包含了很多个不同的角色(对应于协议),并定义好了数据如何传输,不同角色之间如何协商。
理解了TCP/IP是什么,你应该可以看懂一些简单的技术博客或百度百科里面的一些描述了,时时刻刻认为,它里面包涵很多个协议,这些协议就是一整套规则,它定义了整个互联网如何连接,如何协商的最基础规则。
TCP/IP协议又分为了4层,分别为应用层,传输层,IP层,物理层。
重点介绍下传输层,也就是TCP,UDP两个协议,也是今天最想描述清楚的。TCP的英文前面抄写过了,UDP(User Datagram Protocol),也是读过之后根本不懂啥意思了。
反正这两个协议,是用来传输数据的,因为他们叫传输层嘛,那不做这个事情,毫无用处了。
我们想象一个场景,网络中任意两个端要通信,会采用什么样的传输方式呢?
想象下人类之间的通信吧。
第一种是拨电话,我拨通了你的手机号码,直到你回答“喂,你好”,我听到了这个话之后,我们之间才继续进行交谈。
第二种是发短信,我给你的手机号码发送一条短信,然后就没有然后了,有可能你没收到,有可能你收到了一会儿又给我回复。
第一种对应的就是TCP,第二种对应的是UDP,TCP是需要对方确认的,也就是传输之前需要进行“三次握手”(这里又是一个专有名词,就是传输的两端要经过三次确认,才能开始通信)。UDP是比较粗暴的,不管对方什么情况,直接发送,不需要确认过程。
很多博客和书籍中说的,TCP是可靠的链接(因为中间有个Control的单词,带上了这个单词,以为着更可靠哦),UDP是不可靠的链接就是这个 意思。可靠的链接带来的是效率的下降,比如一次网络请求很大一部分时间都是浪费在互相确认的过程当中,资源消耗比较多,但是保证了数据的传输是可靠的,并 且数据传输是有序的。不可靠的链接带来的是效率的提升,但可能服务质量有下降。
今天想写这个,主要是想摆脱一种人为的误区,不要以为UDP不可靠,就没有什么应用场景,据说QQ发送数据就是靠UDP发送的呢,虽然是不可靠的链 接,但是还是用了很多校验算法保证了数据质量的稳定,同时保证了效率。TCP虽然耗时,但是对于稳定性优先的场景,还是应该有限选用TCP,比如浏览器中 访问网页用的就是TCP。此外在一些长连接系统里面,比如微信,连接通道应该也是用TCP建立的,因为要维护一条稳定的信息传输通道。
具体协议是如何控制的,数据包是如何传输的,怎么校验数据的正确性,还有重传特性,这些都是协议中重要的控制过程,但是不做详述了,不但枯燥,而且对于实际的产品并没有什么卵用。具体选用什么样的数据传输方式,应该根据场景而定。
PS:写了4,5个小时,删了改,改了删,删了再改,不知道讲没讲清楚,如果没说清楚,欢迎给我留言,我们探讨之后,我再搞个续集:)
给产品经理讲技术,不得不懂的TCP和UDP的更多相关文章
- 3星|《给产品经理讲技术》:APP开发技术介绍,没有技术背景的话恐怕只能看懂书中的比喻和结论
基本是APP开发涉及到的相关技术的入门级介绍.涉及到的知识点与技术细节比较多,不少技术相关的内容并没有像标题暗示的那样没有技术背景也可以看懂,而是涉及到许多专业的术语.原理.也有一些内容是用比喻的方法 ...
- 「给产品经理讲JVM」:垃圾收集算法
纠结的我,给我的JVM系列终于起了第三个名字,害,我真是太难了.从 JVM 到 每日五分钟,玩转 JVM 再到现在的给产品经理讲 JVM ,虽然内容为王,但是标题可以让更多的人看到我的文章,所以,历经 ...
- 💕《给产品经理讲JVM》:垃圾收集器
前言 在上篇中,我们把 JVM 中的垃圾收集算法有了一个大概的了解,又是一个阴雨连绵的周末,宅在家里的我们又开始了新一轮的学习: 产品大大:上周末我们说了垃圾收集算法,下面是不是要讲一下这些算法的应用 ...
- 产品 | What's产品经理
如果想知道什么是产品,首先需要知道什么是缔造者.其名曰:"产品经理". PS:产品经理一词在国内大多时候泛指"互联网产品经理". 对于产品经理这一职位,说实在很 ...
- 【产品经理】产品经理不懂API接口是什么,怎么和程序员做朋友?
接口不是技术经理来写吗?没接过它,一脸不清楚地节奏 开放即共享,是互联网的一个重要属性和精神.它是一种服务模式,一个特殊的产品,目前较大规模的互联网企业都有自己的开放平台. 如果把自己局限为一个功能产 ...
- 上海洋码头(www.ymatou.com)急招技术人才(职位:互联网软件开发工程师,.NET网站架构师,Web前端开发工程师,高级测试工程师,产品经理)
对公司招聘职位有兴趣的童鞋可以把简历发送到zhangzhiqiang@ymatou.com,我们HR会快速给你答复. 互联网软件开发工程师 岗位职责: 1.参与洋码头各个平台(www.ymatou.c ...
- 产品经理如何赢得开发人员的尊重和支持?-摘自infoq
对于产品经理来说,赢得开发人员的尊重和支持,从某种意义上讲,是产品迈向成功的坚实一步.最近,知乎社区上的开发人员和管理者在前.后两个帖子中对此展开了激烈的讨论,其中不乏真知灼见. 林志霖Cray认为产 ...
- 从程序猿到SAP产品经理,我是如何转型的?
文章作者:Jason Xia(夏建军) Jerry: 今天的文章来自Jason Xia, 我的老同事,和我一样从2007年进入SAP成都研究院工作至今.这篇文章讲述了Jason是如何从一名SAP资深开 ...
- 看完你也能独立负责项目!产品经理做APP从头到尾的所有工作流程详解!
(一)项目启动前 从事产品的工作一年多,但自己一直苦于这样或者那样的困惑,很多人想要从事产品,或者老板自己创业要亲自承担产品一职,但他们对产品这个岗位的认识却不明晰,有的以为是纯粹的画原型,有的是以为 ...
随机推荐
- POJ 3304 Segments (直线与线段是否相交)
题目链接 题意 : 能否找出一条直线使得所有给定的线段在该直线上的投影有一个公共点. 思路 : 假设存在一条直线a使得所有线段在该直线上的投影有公共点,则必存在一条垂直于直线a的直线b,直线b与所有线 ...
- UVA 10673 扩展欧几里得
题意:给出x 和k,求解p和q使得等式x = p[x / k] + q [ x / k], 两个[x / k]分别为向下取整和向上取整 题解:扩展欧几里得 //meek///#include<b ...
- hdu 1531(差分约束)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1531 差分约束的题之前也碰到过,刚好最近正在进行图论专题的训练,就拿来做一做. ①:对于差分不等式,a ...
- interviewbit :Min Steps in Infinite GridBookmark Suggest Edit
You are in an infinite 2D grid where you can move in any of the 8 directions : (x,y) to (x+1, y), (x ...
- JLink and JTAG等接口简介
1.JTAG JTAG用的计算机的并口,JTAG也是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试.现在多数的高级器件都支持JTAG协议,如DSP.FPGA器件等. 标准的J ...
- 物联网操作系统Hello China V1.76(PC串口版)版本发布
作为向ARM平台移植的基线版本,经过三个多月的努力,Hello China V1.76终于完成并发布.相对原来发布的V1.75版本,该版本主要做了如下修改: 彻底去掉了原来版本源代码中的C++特性,采 ...
- wordpress编辑器无法切换/输入
出现问题:“可视化”和“文本”无法切换,编辑区也无法输入文字 解决方法: 打开wp-config.php,在 require_once(ABSPATH . 'wp-settings.php'); 后面 ...
- 转: $GLOBALS['HTTP_RAW_POST_DATA'] 和$_POST的区别
$_POST:通过 HTTP POST 方法传递的变量组成的数组.是自动全局变量. $GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变 ...
- Asterisk的配置详解
Asterisk的配置文件都在/etc/asterisk目录下,重要的配置文件有: sip.conf sip电话基本配置 extensions.conf ...
- poj1988-种类并查集
题意:有N个立方体(1<=N <=30,000),相应地初始时每个立方体放在一个栈中,有两种操作:1.M X Y:把包含第X个立方体的栈中的所有立方体当做一个整体拿出来压入包含第Y个立方体 ...