概要:html
以前对这几个概念有点糊涂,查阅了些资料,稍微归纳下他们的区别吧。若有错误,请拍~~~数据库
先看图:浏览器

TCP/IP是什么?
安全
TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层中有TCP协议与UDP协议。
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。服务器
Socket是什么呢?
网络
Socket是应用层与TCP/IP协议族通讯的中间软件抽象层,一组接口,把复杂的TCP/IP协议族隐藏在Socket接口后面。并发
因此HTTP就是TCP/IP应用层的协议。Socket是他们的软件抽象层。异步
短链接:
链接->传输数据->关闭链接
HTTP是无状态的,浏览器和服务器每进行一次HTTP操做,就创建一次链接,但任务结束就中断链接。
也能够这样说:短链接是指SOCKET链接后发送后接收完数据后立刻断开链接。
长链接:
链接->传输数据->保持链接 -> 传输数据-> 。。。 ->关闭链接。
长链接指创建SOCKET链接后不论是否使用都保持链接,但安全性较差。
http的长链接:
HTTP也能够创建长链接的,使用Connection:keep-alive,HTTP 1.1默认进行持久链接。HTTP1.1和HTTP1.0相比较而言,最大的区别就是增长了持久链接支持(貌
似最新的 http1.0 能够显示的指定 keep-alive),但仍是无状态的,或者说是不能够信任的。socket
参考资料:ide
http://blog.csdn.net/xijiaohuangcao/article/details/6105623——《写给那些让我糊里糊涂的HTTP、TCP、UDP、Socket》
http://hi.baidu.com/loleafver/blog/item/a222c9d853d4f1e638012fa0.html——《http长链接和短链接》
http://hi.baidu.com/einsof/blog/item/f2f3a84b5d1a30fb82025ca0.html——《什么是短链接、长链接、Socket》
================================================
socket
Socket协议的形象描述 socket的英文原义是“孔”或“插座”。在这里做为4BDS UNIX的进程通讯机制,取后一种意思。socket很是相似于电话插座。以一个国家级电话网为例。电话的通话双方至关于相互通讯的2个进程,区号是它的网络地址;区内一个单位的交换机至关于一台主机,主机分配给每一个用户的局内号码至关于socket号。任何用户在通话以前,首先要占有一部电话机,至关于申请一个socket;同时要知道对方的号码,至关于对方有一个固定的socket。而后向对方拨号呼叫,至关于发出链接请求(假如对方不在同一区内,还要拨对方区号,至关于给出网络地址)。对方假如在场并空闲(至关于通讯的另外一主机开机且能够接受链接请求),拿起电话话筒,双方就能够正式通话,至关于链接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,至关于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机至关于关闭socket,撤消链接。
详细内容见百科。
一般短链接是这样:链接->传输数据->关闭链接 那什么是长链接?通常长链接相对短链接而言的,长链接在传输完数后不关闭链接,而不断的发送包保持链接等待处理下一个数据包。 such as: 链接->传输数据->保持链接 -> 传输数据-> 。。。 ->关闭链接。
那何时用短链接呢? 通常长链接用于少数client-end to server-end的频繁的通讯,例如:数据库的链接用长链接, 若是用短链接频繁的通讯会形成socket错误,并且频繁的socket 建立也是对资源的浪费。 而像WEB网站的http服务通常都用短连接,由于长链接对于服务端来讲会耗费必定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的链接用短链接会更省一些资源。(查看来源)
TCP/IP通讯解读长短连接一。通讯方式主要有如下三大类:(一)SERVER/CLIENT方式1.一个Client方链接一个Server方,或称点对点(peer to peer):2.多个Client方链接一个Server方,这也是一般的并发服务器方式。3.一个Client方链接多个Server方,这种方式不多见,主要用于一个客户向多个服务器发送请求状况。(二)链接方式1.长链接Client方与Server方先创建通信链接,链接创建后不断开,而后再进行报文发送和接收。这种方式下因为通信链接一直存在,能够用下面命令查看链接是否创建:netstat –f inet|grep 端口号(如5678)。此种方式经常使用于点对点通信。2.短链接Client方与Server每进行一次报文收发交易时才进行通信连接,交易完毕后当即断开链接。此种方式经常使用于一点对多点通信,好比多个Client链接一个Server.(三)发送接收方式1.异步报文发送和接收是分开的,相互独立的,互不影响。这种方式又分两种状况:(1)异步双工:接收和发送在同一个程序中,有两个不一样的子进程分别负责发送和接收(2)异步单工:接收和发送是用两个不一样的程序来完成。2.同步报文发送和接收是同步进行,既报文发送后等待接收返回报文。同步方式通常须要考虑超时问题,即报文发上去后不能无限等待,须要设定超时时间,超过该时间发送方再也不等待读返回报文,直接通知超时返回。实际通讯方式是这三类通讯方式的组合。好比通常书上提供的TCP/IP范例程序大都是同步短链接的SERVER/CLIENT程序。有的组合是基本不用的,比较经常使用的有价值的组合是如下几种:同步短链接Server/Client同步长链接Server/Client异步短链接Server/Client异步长链接双工Server/Client异步长链接单工Server/Client其中异步长链接双工是最为复杂的一种通讯方式,有时候经常会出如今不一样银行或不一样城市之间的两套系统之间的通讯。好比金卡工程。因为这几种通讯方式比较固定,因此能够预先编制这几种通讯方式的模板程序。二.报文格式通讯报文格式多样性更多,相应地就必须设计对应的读写报文的接收和发送报文函数。(一)阻塞与非阻塞方式 1.非阻塞方式读函数不停地进行读动做,若是没有报文接收到,等待一段时间后超时返回,这种状况通常须要指定超时时间。2.阻塞方式若是没有报文接收到,则读函数一直处于等待状态,直到有报文到达。(二)循环读写方式1.一次直接读写报文在一次接收或发送报文动做中一次性不加分别地所有读取或所有发送报文字节。2.不指定长度循环读写这通常发生在短链接进程中,受网络路由等限制,一次较长的报文可能在网络传输过程当中被分解成了好几个包。一次读取可能不能所有读完一次报文,这就须要循环读报文,直到读完为止。3.带长度报文头循环读写这种状况通常是在长链接进程中,因为在长链接中没有条件可以判断循环读写何时结束,因此必需要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读报文.实际状况中,报头的码制格式还常常不同,若是是非ASCII码的报文头,还必须转换成ASCII,常见的报文头码制有:(1)n个字节的ASCII码(2)n个字节的BCD码(3)n个字节的网络整型码 |