zoukankan      html  css  js  c++  java
  • socket简介

    网络这块越了解感觉知道的越少,所以学习还是要继续,,,,,,

    Socket

    0.几个名词:

           IPC—>Inter Process Communication,进程间通信

           socket —> 套接字

           TCP—>Transmission Control Protocol传输控制协议,

                  提供的是面向连接、可靠的字节流服务。客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。

                  注意点:TCP协议又称为 “三次握手协议”;

                  建立起一个TCP连接需要经过“三次握手”:

                  第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

                  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

                  第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

           UDP:—>User Datagram Protocol,用户数据报协议

                  是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快.

           TCP/IP—>传输控制协议/网间协议,

                  定义了主机如何连入因特网及数据如何再它们之间传输的标准,这是一个协议族(很多的协议….)

                  TCP/IP协议族包含了很多功能各异的子协议。TCP/IP层次模型共分为四层:应用层、传输层、网络层、数据链路层。(异于7层模型)

           IP—>Internet Protocol,网络互连协议

                  是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。

           IP地址—>Internet Protocol Address,网际协议地址;电脑在网络上的标识.

                  静态IP地址:固定不变的IP地址,需要用户自己手动设置.

                     动态IP地址:通过DHCP协议自动生成的IP地址.

                  子网掩码:与IP地址配合使用判断两台计算机是否位于同一个子网络.

                         DNS服务器:可以将域名(网址)转换成IP地址.

              DHCP协议—>通过DHCP协议,用户获得本机的动态IP地址,子网掩码,网关,DNS服务器等.

                    

           ARP协议—> Address Resolution Protocol,地址解析协议

                  是根据IP地址获取物理地址的一个TCP/IP协议;通过IP地址获得MAC地址.有了ARP协议,可以得到同一个子网络内的主机MAC地址.就可以把数据包发送到任意一台主机.不同的子网络之间: 如果两台主机不在同一个子网络,无法得到对方的MAC地址,只能将数据包发送到两个子网络连接处的“网关”(gateway),让网关去处理.

           MAC地址—> 网卡地址,网卡的唯一标识

           端口号—>传输层给每一个使用网卡的应用程序一个编号,即“端口”号,区间0-65536

                  可以通过端口号找到对应的应用程序;

           HTTP连接—->HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),

           是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用,HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

           1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。

           2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

           由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

     

     

    1.OSI 七层模型

    由下至上

           物理层

                  ①作用:连接计算机,负责传送’0’和’1’的电信号

                  ②典型设备:光纤,同轴电缆,双绞线,等

           数据链路层

                  ①作用:处理电信号,以太网协议(数据包)把数据分组。即把电信号转化为可以在网络中使用的二进制数据而后进行传输,在该层数据以帧为处理单位.

                  ②典型设备:网桥、交换机、中继器等

           网络层

                  ①作用:找到网络中的”唯一”的电脑,建立 主机(IP)—>主机(IP)的连接;

                     也可是看作是:基于网络层地址(IP地址)进行不同网络系统间的路径选择

                  ②典型设备:路由器

                  ③如果处于同一个子网络,采用广播的方式发送数据包.如果处于不同的子网络,就采用“路由”的方式发送数据包.

           传输层

                  ①作用:网络层只能让计算机接收和发送信息,但是并不知道要传递给哪一个应用程序。传输层给每一个使用网卡的应用程序一个编号,即“端口”号;0-65536;建立“端口/应用程序”到“端口/应用程序”之间的通信。

                  ②典型设备:终端设备(PC、手机、平板等)

                  ③Socket           

                         Socket == 主机 + 端口 ;

                         最常见的socket编程就是:TCP/IP编程;

                         需要特别注意的是:socket只是一个通讯模型,不属于网络七层协议.

                        

           会话层

                  ①作用:为了实现自动收发数据,自动寻址功能;引入了会话层.会话层的作用,就是建立和管理应用程序之间的通信.会话层不参与具体的传输,它提供包括”访问验证”和”会话管理”在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。

                  ②典型设备:终端设备(PC、手机、平板等)

     

           表示层

                  ①作用:解决不同系统之间的通信问题,可以看作一个”翻译官”.

                  ②典型设备:终端设备(PC、手机、平板等)

           应用层

                  ①作用:规定了不同应用程序的数据格式.

                  ②典型设备:终端设备(PC、手机、平板等)

                  http协议:超文本传输协议

               file协议:文件传输协议

               mail协议:邮件协议

     

    2.什么是socket?.socket 是用来干什么的?

           两个进程(程序)如果需要进行通讯最基本的一个前提能够唯一标示一个进程,在本地进程通讯中我们可以使用PID(progress ID)来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。

           能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

     

    3.Http与Socket连接究竟有什么区别?

           TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UDP协议。在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。IP协议对应于网层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性。

           Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

          

    4、SOCKET原理

    4.1套接字(socket)概念

           套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

           应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

    4.2 建立socket连接

           建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。

           套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

           服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

           客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

           连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

     
       


          

          

    5、SOCKET连接与TCP连接

           创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

    6、Socket连接与HTTP连接

           我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。

           由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致Socket连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

           很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

    7、Socket和Http区别

           HTTP是基于请求-响应形式并且是短连接,并且是无状态的协议。针对其无状态特性,在实际应用中又需要有状态的形式,因此一般会通过session/cookie技术来解决此问题。

           Socket:Socket不属于协议范畴,而是一个调用接口(API),Socket是对TCP/IP协议的封装,通过调用Socket,才能使用TCP/IP协议。Socket连接是长连接,理论上客户端和服务器端一旦建立连接将不会主动断开此连接。Socket连接属于请求-响应形式,服务端可主动将消息推送给客户端。

    8、TCP和UDP的区别

           1。TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。

           2。也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。

           知道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率。

     

       ps:no words......

           

  • 相关阅读:
    "LC.exe" exited with code -1 错误
    GridControl的用法(1)
    oracle建库及plsql建表空间的用法
    sql server还原数据库文件(.bak)常见问题解决办法笔记
    ubuntu下安装deb包
    ubuntu下安装五笔输入法
    ubuntu下安装codeTyphon
    centos7下源码安装lazarus
    后台对Json数据加密、解密
    Http请求纯后台简单实现分页并返回JSON格式
  • 原文地址:https://www.cnblogs.com/devChang/p/5550229.html
Copyright © 2011-2022 走看看