Scoket

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是数据传输的方式。举例说明就是发快递的话,可以选择多个快递公司去发这个快递。

时间: 2024-10-08 21:15:33

Scoket的相关文章

node中简单scoket介绍

/*socket.io是一个基于 node.js 的项目,其主要作用是将WebScoket 协议应用到所有的浏览器.该模块主要应用于实时的长连接 多请求的项目中,例如在线联网游戏中.实时聊天.实施股票查看.二维码扫描登录等. 安装配置和 npm 一样: npm intall scoket.io 安装成功后,来学习如何使用 scoket.io 来创建项目,scoket 协议首先要了解其存在的服务器端和客户端,因此要实现一个scoket 服务时,根据 scoket 的服务器端和客户端API要分别实现

Java Scoket之java.io.EOFException解决方案

Java Scoket之java.io.EOFException解决方案 Socket接收数据的时候,常常会抛出java.io.EOFException异常,也没有明确的原因和提示,在网上搜搜,很多人都在问此问题,但是没有找到切实可行的办法.经过研究,问题解决了. 看到的异常堆栈信息如下: java.io.EOFException   at java.io.DataInputStream.readFully(DataInputStream.java:178)   at java.io.DataI

Java Scoket编程

Java Scoket编程 一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机. 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 目前较为流行的网络编程模型是客户机/服务器(C/S)结构. 即通信双方一方作为服务器等待

网络笔记01-2 scoket

scoket: 1.socket /** 第一个参数(domain): 表示用什么协议 AF_INET 为IPV4开发 第二个参数(type): 表示scoket为什么类型SOCK_STREAM为TCP  SOCK_DGRAM(UDP,报文); 第三个参数(protocol): 如果输出0 就表示跟scoket的类型来设置相对应的协议 如果返回值>0 就表示成功 */ self.clientSocket=socket(AF_INET, SOCK_STREAM, 0); 2.connect /**

linux下scoket句柄查询

关于linux下scoket打开超过设置的参数,并且网站应用打开比较慢,和报错 too mary open files错误时. 首先查询当前服务器的句柄数量 #lsof -n |awk '{print $2}'|sort|uniq -c|sort -nr|more 前列是句柄数量  后列是进程编号 #ps -aef|grep 7191 查看进程编号对应的进程 再增加open file的数量 使用ulimit -n  4096  增加到4096  进行测试

python学习笔记-(十二)scoket编程基础

socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭) socket和file的区别: file模块是针对某个指定文件进行[打开

scoket、TCP/UDP、多线传输

scoket:一种机制,创建一个端口,绑定对应的函数,不断地接收和发送信息. TCP:双方建立连接,进行数据传输,可靠性高,但效率低,消耗资源大. UDP:不建立连接,直接把数据扔过去,不能保证对方有没有收到.可靠性低,效率高,资源消耗低. 多线程传输:同一资源分多条线路同步进行传输,以所有的线路完成传输后为传输完毕标志.这种方法会大大加快传输速度.

scoket理解流程图

scoket流程图: socket中TCP的三次握手建立连接流程图: 从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时connect进入阻塞状态:服务器监听到连接请求,即收到SYN J包,调用accept函 数接收请求向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态:客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认:服务器收到ACK K+1时,accept返回,至此三次握手完毕,

走入计算机的第三十三天(异常处理和scoket编程)

一 异常处理 1 异常和错误,而错误分成了两种 一是语法错误,这种错误过不了解释器的检测,必须要在执行前改正 二是逻辑错误,在执行的时候检测出了错误. 2 什么是异常:异常就是程序在运行是产生的错误信息. 3 异常的种类 python3中不同的异常分为不同的类型,用不同的类型去标识.不同的类型对象错误都有相对应的标识语法. AssertionErr: 断言语句失败:关键字后边的条件为假的时候,程序将 停止并抛出AssertionError异常,语句一般是在测试程序的时候用于在代码中置入的检查点.

Scoket编程

1.首先建立服务器 并监听:ServerSocket server = new ServerSocket("端口号"); Scoket socket=server.accept(); 2.建立客户端:Socket client =new Socket("ip","与服务器的端口号一致"); 3.这时客户端和服务器的通信管道已经建立好了,只要通过获取其中的输入流和输出流,并往其中读取信息或写入信息即可实现通讯