zoukankan      html  css  js  c++  java
  • 27.Socket,TCP,UDP,HTTP基本通信原理

    Socket,TCP,UDP,HTTP基本通信原理(摘自百度):

    TCP、UDP,HTTP 底层通信都是通过 socket 套接字实现 
    网络上不同的计算机,也可以通信,那么就得使用网络套接字(socket)。 
    socket就是在不同计算机之间进行通信的一个抽象。 
    他工作于TCP/IP协议中应用层和传输层之间的一个抽象 

    如图所示:

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

    2.Socket 还可以认为是一种网络间不同计算机上的进程通信的一种方法,利用三元组(ip地址(主机),协议(传输方式),端口(主机上的进程标志))就可以唯一标识网络中的进程,网络中的进程通信可以利用这个标志与其它进程进行交互。

    3.socket保证了不同计算机之间的通信,也就是网络通信。对于网站,通信模型是客户端服务器之间的通信。
    两个端都建立一个socket对象,然后通过socket对象对数据进行传输。通常服务器处于一个无线循环,等待客户端连接。

    通俗的理解:
    Socket的英文原义是“孔”或“插座”,Socket通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务
    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket
    应用程序通常通过”套接字”向网络发出请求或者应答网络请求。

    TCP(传输控制协议,HTTP的交互方式就是TCP交互方式,需要建立连接,一种面向连接的、可靠的字节流服务) 
    在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP
    
    1.建立连接,形成数据传输通道
    2、在链接中进行大数据传输,数据不受限制
    3.通过三次握手完成链接,是可靠协议,安全送达协议
    4.必须建立连接,效率很稍微低
    

    所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。
    三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect() 时,将触发三次握手。

    三次握手:

    * 第一次握手(SYN=1, seq=x):

    客户端发送一个 TCP 的 SYN 标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号 X,保存在包头的序列号(Sequence Number)字段里。

    发送完毕后,客户端进入 `SYN_SEND` 状态。

    * 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):

    服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己 ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。
    发送完毕后,服务器端进入 `SYN_RCVD` 状态。

    * 第三次握手(ACK=1,ACKnum=y+1)

    客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1

    发送完毕后,客户端进入 `ESTABLISHED` 状态,当服务器端接收到这个包时,也进入 `ESTABLISHED` 状态,TCP 握手结束。

    UDP (用户数据报协议,无连接,不可靠的网络协议,用于多播,广播,例如上课同步直播)
    
    1.将数据以及源(我的电脑IP)和目的(别人电脑的IP)封装成数据包中,不需要建立连接
    2.每个数据报的大小限制在64k之内,所以大小有限制
    3.无需连接,因此是不可靠协议
    4.不需要建立连接,速度快

  • 相关阅读:
    ubuntu14.4开启ftp服务
    ubuntu14.4安装gtx970显卡驱动的艰辛历程
    jquery.dataTables的用法
    win7上安装theano keras深度学习框架
    使用BeanUtils设置属性转换String到Date类型
    keras在win7下环境搭建
    Python-try except else finally有return时执行顺序探究
    MySQL-EXPLAIN用法详解
    PHP-Windows下搭建Nginx+PHP环境
    PHP-php.ini中文版
  • 原文地址:https://www.cnblogs.com/lvjing/p/10054761.html
Copyright © 2011-2022 走看看