TCP与UDP的侵略性
HTTP必须执行在TCP上吗?
SSL必须执行在TCP上吗?
...
实际上HTTP并没有规定一定要执行在TCP上,甚至FTP也不一定要执行在TCP上!HTTP或者FTP仅仅是说底层信道要保证数据的按序传输以及可靠到达而已,由于传输层除了TCP之外没有别的著名的协议能够满足这个需求,所以大多数的应用都选择了TCP,可是你要知道,这并非强制的。
SSL基于这个思想上打开了第一个洞,从而出现了DTLS。DTLS和HTTP一样,也是须要一个可靠的连接,可是它却没有使用TCP,相同OpenVPN的SSL握手更进一步,尽管SSL须要一个可靠的传输层信道,可是OpenVPN能够既不使用TCP,也不使用DTLS,而仅仅是自己实现了一个基于UDP的轻量级可靠层,事实证明,这是非常不错的。
近期看了一本书,《枪炮,病菌与钢铁》,里面谈到了一种抢先性,即一种动植物或者技术在某地驯化或者进化之后迅速传播到其他地区,就会阻滞该地区的自主进化进程,该地区会首选传播而来的现成的东西,终于后来者居上,由于它仅仅是拿来,省去了孵化成本。TCP的侵略性也表如今此。难道你没有问过自己,为何几十年来,基于流的著名传输层协议仅仅有TCP一种,然而当初BSD套接字并非这么想的,否则它就直接把socket的第二个參数定义成TCP而不是随stream了,第三个參数也不须要了...注意,我这里仅仅是针对INET套接字而言,对于别的套接字类型,还是须要三个參数的。对于INET而言,数据报类型的就是UDP,流类型的就是TCP,著名的协议差点儿没有别的了,就算有也能够通过ioctl来设置..请恕我的无知,居然不知道socket參数的意义!
TCP展示的就是这样的抢先性,已经有了TCP了,何必再造出其他协议呢?尽管它有点重,但还是能够用的。造成这个TCP一家独霸的局面的理由,还有技术的成熟早于标准化这一理由。对于UDP的侵略性,主要体如今带宽占用上,UDP仅仅是在IP上添加了一个应用层多路复用机制,既然IP是抢占的,UDP也是,由于它们都没有端到端的流量控制机制。尽管UDP在状态防火墙或者状态NAT上会有问题,可是问题并不在于UDP,而是在于防火墙和NAT设备为UDP强加了一个状态,UDP本身就是无状态的嘛,另外,防火墙技术或者NAT技术本身就是错误的技术,端到端安全以及VPN才是正解,否则如今全世界就全都布满了带有城墙的城市或者城堡碉堡之类的工事了。
TCP与UDP的侵略性的更多相关文章
- C++网络套接字编程TCP和UDP实例
原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1. 创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1) 创建套接字(so ...
- 【校验】TCP和UDP的校验和
一开始,私以为校验和只是简单的求和得到的结果,后来在TCP和UDP里面看到使用的校验和方式有点奇怪--二进制反码(循环进位)求和. 人类的认知过程必将从简单到复杂,看下这个二进制反码循环求和是啥子意思 ...
- 初入网络系列笔记(2)TCP和UDP
一.借鉴说明,本博文借鉴以下博文 1.BlueTzar,TCP/IP四层模型, http://www.cnblogs.com/BlueTzar/articles/811160.html 2.叶剑峰,漫 ...
- 传输层协议TCP和UDP
本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...
- 【Python网络编程】利用Python进行TCP、UDP套接字编程
之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...
- http、tcp、udp、OAUTH2.0网络协议区别
一.先来一个讲TCP.UDP和HTTP关系的 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RAR ...
- TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释
一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...
- OSI参考模型及各层功能,TCP与UDP的区别
OSI参考模型:ISO/IEC 7498标准定义了网络互联的7层结构模型,即开放系统互连参考模型. OSI参考模型定义了开放系统的层次结构.层次之间的相互关系,以及各层所包括的可能的服务.OSI的服务 ...
- TCP与UDP的区别
TCP与UDP的区别 TCP面向连接:UDP是无连接,即发送数据之前不需要建立连接 TCP提供可靠的服务,TCP连接传送的数据,无差错.不丢失.不重复,且按顺序到达:UDP尽最大努力交付,即不保证可靠 ...
随机推荐
- 【译】ASP.NET MVC 5 教程 - 5:使用 SQL 服务器 LocalDB 创建连接字符串
原文:[译]ASP.NET MVC 5 教程 - 5:使用 SQL 服务器 LocalDB 创建连接字符串 在上一节中,我们创建了MovieDBContext 类来连接数据库.处理Movie 对象和数 ...
- emeditor只显示特定类型的文件
emeditor过滤文件类型,右侧资源管理器中只显示特定类型的文件,如只显示java,xml,txt,properties等文件,而不显示doc,jpg,xls等emeditor不能打开的文件. 右击 ...
- C++设计模式--观察员
概要 在软件构建过程中.我们须要为某些对象建立一种"通知依赖关系" --一个对象(目标对象)的状态发生改变,全部的依赖对象(观察者对象)都将得到通知.假设这种依赖关系过于紧密,将使 ...
- BC 2015在百度之星程序设计大赛 - 预赛(1)(KPI-树董事长)
KPI Accepts: 517 Submissions: 2185 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- Learning Cocos2d-x for WP8(6)——场景切换和场景过渡效果
原文:Learning Cocos2d-x for WP8(6)--场景切换和场景过渡效果 C#(wp7)兄弟篇 Learning Cocos2d-x for XNA(6)——场景切换和场景过渡效果 ...
- U7Linux文件与目录管理
1. .:代表当前层目录. ..:代表上一层目录. -:代表前一个工作目录. ~:代表目前用户所在的主文件夹. ~account:代表account这个用户的主文件夹. 2.pwd:显示当前目录. p ...
- xamarin跨平台iOS、Android 与Windows
http://xamarin.csdn.net/ Xamarin是一个行动App开发平台,提供跨平台开发能力,开发人员透过Xamarin开发工具与程序语言,即可开发出iOS.Android 与Wind ...
- Android平台调用Web Service:螺纹的引入
连接文本 剩下的问题 MainActivity的onCreate方法中假设没有有这段代码: // 强制在UI线程中操作 StrictMode.setThreadPolicy(new StrictMod ...
- mini2440裸试验—计算器(LCD显示,触摸屏突破)
关于Pait_Bmp(x0, y0, x, y, BMPaddr);函数 像素图在屏幕左上角为(0,0),Pait_Bmp中的x0.y0分别像素点初始位置,x,y为BMP图片的X,Y的大小.BMPad ...
- C 一个字符串有三段,第一段原样输出,第二段为要输出字符串的长度,第三段为依据第二段长度补齐第一段
C 一个字符串有三段,第一段原样输出.第二段为要输出字符串的长度,第三段为依据第二段长度补齐第一段 比如:输入abc 11 12.输出abc12121212 #include<stdio.h&g ...