什么是Sockethtml
Socket:又称做是套接字,网络上的两个程序经过一个双向的通讯链接实现数据的交换,这个链接的一端称为Socket。web
Socket是对TCP/IP的协议的封装,Socket自己并非协议,而是一个调用的接口,只有经过Socket咱们才能使用TCP/IP。数据库
Socket是和网络紧密相关的,网络上的两个程序通常就是指web服务器和咱们的客户端,数据交换的过程就是咱们客户端发一个请求到HTTP服务器、服务器返回数据,这个过程就是数据交换的过程。客户端和服务器之间的数据交换是须要一个双向的通讯链接,二者之间是须要一个通道去实现链接的。安全
通讯管道就是通讯链接,有了这个管道,咱们就能够进行数据传输。客户端到服务器端必需要有一个通道才能实现数据的交互。若是有座大山挡着了道路咱们就会在山中开辟一个隧道,这样咱们才能走到山的另外一端。Socket就能够理解为这个隧道的两个端口,一个入口一个出口。服务器
一个网络请求并非咱们所认为的请求-相应的过程,它的底层是开辟了一个通讯管道的。因此应用程序一般是经过Socket(套接字)向网络发出请求或者应答网络请求。网络
流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。
流式是一种面向链接的Socket,针对于面向链接的TCP服务应用;
数据报式Socket是一种无链接的Socket,对应于无链接的UDP服务应用。socket
发一个HTTP请求到网络上,咱们会有一个URL,URL会有一个TCP协议、IP地址和端口号HTTP默认的端口号是80,没有IP地址咱们就没办法找到服务器,没有端口号咱们就找不到应用程序。函数
网络上的请求其实就是经过Socket创建一个通讯管道实现数据交互的。IP地址就是网络上主机设备的惟一标识。 端口号就是进程的标识,一个应用程序就是一个进程。大数据
服务器其实也是一个电脑,那么服务器上也会有不少应用程序。假如我要访问百度的服务器,百度服务器上会有一个Web应用程序来供咱们访问,例如服务器的数据库应用程序(MySQL),服务器的数据库存储着大量的数据。客户端访问服务器,咱们能够经过IP地址访问,咱们要访问其Web应用程序而不是数据库服务,就要经过对应的端口做为一个标识来定位到Web应用程序。spa
总结以下:
创建链接的传输协议就是TCP协议,发送HTTP网络请求的时候须要经过一个通讯管道创建链接,HTTP就是一个TCP链接。
通道创建链接前为何要进行三次握手呢?三次握手是为了保证数据的安全性和可靠性。举一个打电话的例子来讲,用手机拨号这个过程就是第一次握手,对方接到电话”喂”,这就是第二次握手,咱们也会回应”喂”,这就是第三次握手,这三个过程没有问题的话,就说明链接创建是没问题的。若是任一方在拨号后没有回应,那就不能保证这个连接是有效的,就能保证数据的一个安全性和可靠性。
TCP每次传输数据的时候都要创建链接,因此致使其效率是较低的。咱们在网络中会屡次请求数据,也就意味着每次都要三次握手。就好比,你给对方打电话,保证通话链接后开始说一句话,以后就把电话挂掉了;说第二句话的时候又要再打一次电话,重复以前的操做。效率会低点可是对于咱们的网络请求HTTP请求影响不大,由于咱们的下次请求时间是不固定的。因为这个请求时间不固定,若是这条数据交互还一直保持着,那咱们打电话来讲,咱们不交流了,但仍是保持着通话,那咱们的花费就多了。
第一点不须要创建链接怎么理解呢?例如咱们看直播的时候,主播在他电脑上的操做会及时传递到咱们的屏幕上,若是咱们是经过TCP的形式传递的话,党有不少用户的话,那是比较卡的,会引发堵塞的。
广播的话是不会用TCP的,须要采用UDP,只须要把数据和目的地封装成包进行发送。
中间的过程是怎么样的,可能网络很差卡在那里了,等网络恢复的时候,咱们看到的就是最新的,而不会是以前的画面了。这就是采用UDP的状况,因此UDP是不安全不可靠的,这就是UDP不须要创建链接,不能保证数据能安全的送给咱们。
第二点为何数据报这么小?
由于不能保证数据安全,若是过大的话,传输中间出问题的可能性就比较大,一旦有问题,数据就都没有了。
仍是拿直播举例,若是一次性发20分钟的数据,出问题的话那就是20分钟的直播画面都没有,因此数据报小是为了保证数据若是丢失,数据丢失不会那么多。
UDP无需创建链接,不用三次握手,那就速度比较快的。
总结:TCP、UDP是数据传输的方式。举例说明就是发快递的话,能够选择多个快递公司去发这个快递。
http://www.cnblogs.com/iOSClub/p/5422605.html
socket是什么?
Socket这个名词如今有不少不一样的意思,这里主要讲到其中2个含义。一是,套接字socket=(IP地址:端口号),是端的概念。二是,socket在应用层和传输层之间,是层的概念。
要理解socket是什么,首先要理解网络的分层结构,目前internet普遍使用的TCP/IP模型,总结起来网络模型分为四层,从上层往下依次为:应用层、传输层、网络层、接入层。
网络上的两个程序经过一个双向的通讯链接实现数据的交换,这个链接的一个端点(endpoint)称为一个socket。(端)
而后理解系统调用(system call)和应用程序接口(API)的概念。系统调用就是应用程序和操做系统之间传递控制权。当应用程序启动系统调用时,就把控制权从应用程序传递给系统调用接口,此接口又把控制权传递给操做系统,操做系统执行内部的操做,执行完毕控制权又经过系统调用返回给应用程序。这个系统调用接口就是API。API定义了不少系统调用的函数,经过请求调用就能够得到操做系统的服务。目前最著名就是伯克利为UNIX定义的socket interface。(层)
回到网络中,传输层TCP协议和网络层的IP协议已经集成到操做系统中,应用程序在应用层,这就涉及到应用进程与操做系统的调用,而socket interface就做为应用进程和运输层协议之间的接口。所以,应用进程要使用TCP/IP协议进行通讯就必须经过socket和操做系统进行调用请求服务。
socket的做用?
socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操做抽象为几个简单的接口供应用层调用以实现进程在网络中通讯。
Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来讲,一组简单的接口就是所有,让Socket去组织数据,以符合指定的协议。
————————————————————-
socket的怎么用?
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,均可以用“打开open –> 读写write/read –> 关闭close”模式来操做。socket是能够理解为一种特殊的文件,socket函数就是对其进行的操做(读/写IO、打开、关闭)。
Socket通讯的双方能够分为客户端和服务器端,客户端的基本流程以下:
服务器端的步骤稍微多一些,主要增长了与端口绑定(bind)和监听(listen)、接受阻塞(accept)等流程