一、TCP/IP协议

TCP/IP协议,你一定常常听说吧,当中TCP(Transmission Control Protocol)称为传输控制协议,IP(Internet Protocol)称为因特网互联协议。

事实上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建立的。由于要维护一条稳定的信息传输通道。

详细协议是怎样控制的,数据包是怎样传输的,怎么校验数据的正确性。还有重传特性。这些都是协议中重要的控制过程,可是不做详述了,不但枯燥。而且对于实际的产品并没有什么卵用。详细选用什么样的传输数据方式,应该依据场景而定。

安全的东西往往不快。反之也是如此,而TCP和UDP他们之间也是这种:

  • TCP(传输控制协议)

    是基于连接的。在正式收发数据之前必须要与对方建立连接。这之间须要经过三次“对话”,首先A主机须要和B主机之间建立数据的收发,A须要发送一个请求,询问B:“我须要连接”,B收到询问后会给A发送一个回应:“能够连接”,这时A主机得到B主机的回应后。他们之间就建立了连接,就能够进行数据的传输了。
  • UDP(用户数报协议)它与TCP相相应的协议,是面向非连接的,不与对方建立连接。直接把数据包发送出去,UDP适用于一次传输少量的数据。对可靠性要求不高的应用环境。日常生活中使用的ping命令測试两台主机是否通信正常,其原理就是通过UDP实现的。

三、理解TCP和UDP

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议。也就是说,在正式收发数据前,必须和对方建立可靠的连接。

一个TCP连接必须要经过三次“对话”才干建立起来,当中的过程非常复杂。我们这里仅仅做简单、形象的介绍,你仅仅要做到能够理解这个过程就可以。

三次对话:

我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,能够吗?”。这是第一次对话;主机B向主机A发送允许连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“能够。你什么时候发?”,这是第二次对话。主机A再发出一个数据包确认主机B的要求同步:“我如今就发,你接着吧!

”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后。主机A才向主机B正式发送数据。

UDP(User Data Protocol,用户数据报协议)是与TCP相相应的协议。

它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

UDP适用于一次仅仅传送少量数据、对可靠性要求不高的应用环境。

比方,我们常常使用“ping”命令来測试两台主机之间TCP/IP通信是否正常。事实上“ping”命令的原理就是向对方主机发送UDP数据包。然后对方主机确认收到数据包,假设数据包是否到达的消息及时反馈回来。那么网络就是通的。

比如,在默认状态下,一次“ping”操作发送4个数据包。

大家能够看到。发送的数据包数量是4包,收到的也是4包(由于对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议。没有建立连接的过程。正由于UDP协议没有连接的过程,所以它的通信效果高;但也正由于如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。

四、适用场合

TCP:Transfer Control Protocol,传输控制协议。

这是一个全双工的、面向连接的、可靠的而且是精确控制的协议。

主要是用在那些实时性不强、但要求不能出错的应用。比方说,网页的浏览、文件的下载(不是BT、电驴下载)、邮件的收发等场合,就须要TCP协议进行传输(由于不会出错)。

当然,它在网络方面的开销是昂贵的。

UDP:User Datagram Protocol。用户数据报协议。

这是一个不可靠的传输协议。由于它不排序所要发送的数据段、不关心这些数据段到达目的方的顺序(所以它才不可靠),所以它在网络的开销要比TCP小非常多。因此UDP适合用在那些实时性强、允许出错的场合。

比方说:即时通信(MSN、QQ),视频,语音等方面。

TCP和UDP比較的更多相关文章

  1. C++网络套接字编程TCP和UDP实例

    原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1.       创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1)  创建套接字(so ...

  2. 【校验】TCP和UDP的校验和

    一开始,私以为校验和只是简单的求和得到的结果,后来在TCP和UDP里面看到使用的校验和方式有点奇怪--二进制反码(循环进位)求和. 人类的认知过程必将从简单到复杂,看下这个二进制反码循环求和是啥子意思 ...

  3. 初入网络系列笔记(2)TCP和UDP

    一.借鉴说明,本博文借鉴以下博文 1.BlueTzar,TCP/IP四层模型, http://www.cnblogs.com/BlueTzar/articles/811160.html 2.叶剑峰,漫 ...

  4. 传输层协议TCP和UDP

    本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...

  5. 【Python网络编程】利用Python进行TCP、UDP套接字编程

    之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...

  6. http、tcp、udp、OAUTH2.0网络协议区别

                    一.先来一个讲TCP.UDP和HTTP关系的 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RAR ...

  7. TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释

    一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...

  8. OSI参考模型及各层功能,TCP与UDP的区别

    OSI参考模型:ISO/IEC 7498标准定义了网络互联的7层结构模型,即开放系统互连参考模型. OSI参考模型定义了开放系统的层次结构.层次之间的相互关系,以及各层所包括的可能的服务.OSI的服务 ...

  9. TCP与UDP的区别

    TCP与UDP的区别 TCP面向连接:UDP是无连接,即发送数据之前不需要建立连接 TCP提供可靠的服务,TCP连接传送的数据,无差错.不丢失.不重复,且按顺序到达:UDP尽最大努力交付,即不保证可靠 ...

随机推荐

  1. hdu 3768(spfa+暴力)

    Shopping Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  2. 只用120行Java代码写一个自己的区块链-3挖矿算法

    在本系列前两篇文章中,我们向大家展示了如何通过精炼的Java代码实现一个简单的区块链.包括生成块,验证块数据,广播通信等等,这一篇让我们聚焦在如何实现 PoW算法. 大家都无不惊呼比特币.以太坊及其他 ...

  3. 巧用nth_element求容器前n%大小的那个数

    #include <algorithm> #include <vector> #include <iostream> #include <string> ...

  4. [ThinkPHP] 独立分组配置,坑!!!

    'APP_GROUP_LIST'=>'Index,Admin', //逗号后面别跟空格啊,真是逗

  5. 康托展开&逆展开算法笔记

    康托展开(有关全排列) 康托展开:已知一个排列,求这个排列在全排列中是第几个 康托展开逆运算:已知在全排列中排第几,求这个排列 定义: X=an(n-1)!+an-1(n-2)!+...+ai(i-1 ...

  6. dfs序学习总结

    dfs序: 每个节点在dfs中的进出栈的时间序列. 树是非线性结构,根节点连着子节点,那么dfs序...节点进出栈的时间先后? 从根节点入栈,然后左儿子入栈,左儿子出栈,右儿子入栈,右儿子出栈,根节点 ...

  7. 区间DP【p2858】[USACO06FEB]奶牛零食Treats for the Cows

    Description 约翰经常给产奶量高的奶牛发特殊津贴,于是很快奶牛们拥有了大笔不知该怎么花的钱.为此,约翰购置了N(1≤N≤2000)份美味的零食来卖给奶牛们.每天约翰售出一份零食.当然约翰希望 ...

  8. Mysql数据库的安装及配置

    本文转载自http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建 ...

  9. [BZOJ1143][CTSC2008]祭祀river(Dilworth定理+二分图匹配)

    题意:给你一张n个点的DAG,最大化选择的点数,是点之间两两不可达. 要从Dilworth定理说起. Dilworth定理是定义在偏序集上的,也可以从图论的角度解释.偏序集中两个元素能比较大小,则在图 ...

  10. Codeforces #480 Tutorial

    Problem A,B,C: 简单的模拟,注意A中p mod q时对q=0特殊处理(注意范围) Problem D: Brief Intro: 给定长度为N的数组A,将A中所有连续子序列分成最少的组, ...