1.Socket
几个常用的名词
IPC—>Inter Process Communication,进程间通信
socket —> 套接字
TCP—>Transmission Control Protocol传输控制协议,
什么是Socket
Socket:又称作是套接字,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为Socket。
Socket是对TCP/IP的协议的封装,Socket本身并不是协议,而是一个调用的接口,只有通过Socket我们才能使用TCP/IP。
Socket的两层定义:一是,套接字socket=(IP地址:端口号),是端的概念。二是,socket在应用层和传输层之间,是层的概念.
Socket是和网络紧密相关的,网络上的两个程序一般就是指web服务器和我们的客户端,数据交换的过程就是我们客户端发一个请求到HTTP服务器、服务器返回数据,这个过程就是数据交换的过程。客户端和服务器之间的数据交换是需要一个双向的通信连接,两者之间是需要一个通道去实现连接的。
可以理解为Socket: "主机" + "端口" = 套接字/插座; 仅仅是一个通信模型,不属于七层协议(网络协议).
通信管道就是通信连接,有了这个管道,我们就可以进行数据传输。客户端到服务器端必须要有一个通道才能实现数据的交互。如果有座大山挡着了道路我们就会在山中开辟一个隧道,这样我们才能走到山的另一端。Socket就可以理解为这个隧道的两个端口,一个入口一个出口。
一个网络请求并不是我们所认为的请求-相应的过程,它的底层是开辟了一个通信管道的。所以应用程序通常是通过Socket(套接字)向网络发出请求或者应答网络请求。
流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。
2. 网络通信的要素
发一个HTTP请求到网络上,我们会有一个URL,URL会有一个TCP协议、IP地址和端口号HTTP默认的端口号是80,没有IP地址我们就没办法找到服务器,没有端口号我们就找不到应用程序。
网络上的请求其实就是通过Socket建立一个通信管道实现数据交互的。IP地址就是网络上主机设备的唯一标识。 端口号就是进程的标识,一个应用程序就是一个进程。
服务器其实也是一个电脑,那么服务器上也会有很多应用程序。假如我要访问百度的服务器,百度服务器上会有一个Web应用程序来供我们访问,例如服务器的数据库应用程序(MySQL),服务器的数据库存储着大量的数据。客户端访问服务器,我们可以通过IP地址访问,我们要访问其Web应用程序而不是数据库服务,就要通过对应的端口作为一个标识来定位到Web应用程序。
总结如下:
l 网络上的请求就是通过Socket来建立连接然后互相通信
l IP地址(网络上主机设备的唯一标识)
l 端口号(定位程序)
n 用于标示进程的逻辑地址,不同进程的标示
n 有效端口:0~65535,其中0~1024由系统使用或者保留端口,开发中建议使用1024以上的端口
l 传输协议(用什么样的方式进行交互)
n 通讯的规则
n 常见协议:TCP、UDP
3.TCP和UDP
l TCP(传输控制协议)
n 建立连接,形成传输数据的通道
n 在连接中进行大数据传输(数据不受限制)
n 通过三次握手完成连接,是可靠协议,安全送达
n 必须建立连接,效率会稍低
建立连接的传输协议就是TCP协议,发送HTTP网络请求的时候需要通过一个通信管道建立连接,HTTP就是一个TCP连接。
通道建立连接前为什么要进行三次握手呢?三次握手是为了保证数据的安全性和可靠性。举一个打电话的例子来说,用手机拨号这个过程就是第一次握手,对方接到电话”喂”,这就是第二次握手,我们也会回应”喂”,这就是第三次握手,这三个过程没有问题的话,就说明连接建立是没问题的。如果任一方在拨号后没有回应,那就不能保证这个链接是有效的,就能保证数据的一个安全性和可靠性。
TCP每次传输数据的时候都要建立连接,所以导致其效率是较低的。我们在网络中会多次请求数据,也就意味着每次都要三次握手。就比如,你给对方打电话,保证通话连接后开始说一句话,之后就把电话挂掉了;说第二句话的时候又要再打一次电话,重复之前的操作。效率会低点但是对于我们的网络请求HTTP请求影响不大,因为我们的下次请求时间是不固定的。由于这个请求时间不固定,如果这条数据交互还一直保持着,那我们打电话来说,我们不交流了,但还是保持着通话,那我们的花费就多了。
l UDP(用户数据报协议)
n 将数据及源和目的封装成数据包中,不需要建立连接
n 每个数据报的大小限制在64K之内
n 因为无需连接,因此是不可靠协议
n 不需要建立连接,速度快
第一点不需要建立连接怎么理解呢?例如我们看直播的时候,主播在他电脑上的操作会及时传递到我们的屏幕上,如果我们是通过TCP的形式传递的话,党有很多用户的话,那是比较卡的,会引起堵塞的。广播的话是不会用TCP的,需要采用UDP,只需要把数据和目的地封装成包进行发送。中间的过程是怎么样的,可能网络不好卡在那里了,等网络恢复的时候,我们看到的就是最新的,而不会是之前的画面了。这就是采用UDP的情况,所以UDP是不安全不可靠的,这就是UDP不需要建立连接,不能保证数据能安全的送给我们。
第二点为什么数据报这么小?因为不能保证数据安全,如果过大的话,传输中间出问题的可能性就比较大,一旦有问题,数据就都没有了。还是拿直播举例,如果一次性发20分钟的数据,出问题的话那就是20分钟的直播画面都没有,所以数据报小是为了保证数据如果丢失,数据丢失不会那么多。
UDP无需建立连接,不用三次握手,那就速度比较快的。
总结:TCP、UDP是数据传输的方式。举例说明就是发快递的话,可以选择多个快递公司去发这个快递。