1、概述

  • 应用层:HTTP协议,主要解决如何包装数据;传输层: TCP协议、TPC/IP协议;网络层: IP 协议

  • socket则是对TCP/IP协议的封装和应用,Socket本身并不是协议而是一个调用接口,通过Socket才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。 Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,从而形成了最基本的函数接口,比如create、 listen、connect、accept、send、read和write等等。

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

2、TCP连接

  • 建立一个TCP连接需要经过“三次握手”,具体如下:
    第一次握手:客户端发送请求包到服务器,等待服务器确认
    第二次握手:服务器响应客户端请求,同时也发送一个回应包给客户端
    第三次握手:客户端收到服务器的回应包后,向服务器发送确认包

  • 握手过程中传送的包里,不包含数据,三次握手完毕后,客户端与服务端才正式的开始传递数据。
    TCP一旦连接起来,在客户端和服务端任何一方主动关闭连接之前,TCP连接都将被一直保持下去。
    断开连接时,服务器和客户端都可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”

  • 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次挥手”。

3、HTTP连接

  • HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

  • HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

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

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

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

4、SOCKET原理

4.1、套接字(socket)概念

  • Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
  • 应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

4.2、建立socket连接

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

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

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

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

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

http和socket通信的区别相关推荐

  1. Android中关于Socket通信数据大小,内存缓冲区和数据可靠性的一点调查

    关于TCP和UDP Socket通信的区别: 应用场景: UDP传输协议效率高,但不可靠: TCP传输效率低,但可靠. 传输数据大小: UDP传输数据限定在64K以下: TCP传输数据无大小限制,可进 ...

  2. 手把手教你 Socket 通信(TCP/IP)

    本文将给出完整 Socket 通信代码,在 eclipse 中亲测有效.在Android Studio中用Java开发也是一样的,只是把代码和控件搭配一下,注册监听就好. 网络上的两个程序通过一个双向 ...

  3. Socket通信总结(附C++实现)

    Socket通信总结(附C++实现) 2012年08月16日 ⁄ C++⁄ 共 5870字 ⁄ 评论数 1 ⁄ 被围观 10,061+ 分享到: 文章目录 [隐藏] 一.Socket是什么 二.一些基 ...

  4. android socket通信如何抓取,安卓Socket通信实例(客户端、服务端)

    安卓Socket通信实例 本文摘自:https://whatsblog.icu/index.php/Android/17.html 1.Socket通信必须知道的地方 1.首先,Socket通信采用T ...

  5. Qt的Socket通信

    Qt的Socket通信 文章目录 Qt的Socket通信 1 TCP/IP 2. UDP 3. TCP/IP 和 UDP的区别 Qt中提供的所有的Socket类都是非阻塞的. Qt中常用的用于sock ...

  6. 关于HTTP协议及SOCKET通信

    一.HTTP 1.报文结构 HTTP:超文本传输协议,报文分为请求报文和响应报文. 2.端口(tomcat端口) http在熟知的80端口使用TCP的服务:tomcat的默认端口是8080 3.状态码 ...

  7. Java之Socket与HTTP区别

    转自: Java之Socket与HTTP区别 - 曹刚 - 博客园我们都知道TCP/IP协议共分四层:①链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接 ...

  8. socket通信和异常处理札记

    Linux socket通信出现CLOSE_WAIT状态的原因与解决方法 这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司竟然都面到到了这个问题,不得不使我开始关注 ...

  9. [html] websocket和socket有什么区别?

    [html] websocket和socket有什么区别? 1.Socket 是传输控制层的接口.用户可以通过 Socket 来操作底层 TCP/IP 协议族通信. 2.WebSocket 是一个完整 ...

最新文章

  1. 帆软填报增加记录提交成功后没有_大病医疗填报图解
  2. mysql groupby 日期_sql 语言 groupBy 分组统计时间段解决方案
  3. DCMTK:表示增强型CT对象的类
  4. 061_Apex 异常捕捉
  5. GolVe向量化做文本分类
  6. python基础装饰器(二十)
  7. 去除残缺条目java_为什么说Java匿名内部类是残缺的闭包
  8. 面试阿里Java工程师归来总结面经,已成功斩获P6 offer
  9. bigdecimal 怎么做除法_面向对象之BigDecimal
  10. java导入jdk源码_eclipse导入JDK源码
  11. ABBYY软件的OCR文字识别工具有什么用
  12. 20145322何志威 Exp8 Web基础
  13. 计算机启动项在什么地方找,电脑开机启动项在哪里设置
  14. 马王堆汉墓帛书‧老子乙本——德经
  15. 【C++】利用DFS求解水洼数目问题
  16. rust巨型采矿机_【rust巨型挖掘机在哪加柴油】专区-挖掘机-铁甲网
  17. RN 封装 Android原生组件
  18. SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理
  19. 计算机更新无法卸载,电脑上有无法卸载的软件怎么办?
  20. java实现微信小程序客服功能开发,后台接受用户发送消息实现关键词自动回复

热门文章

  1. android无限旋转动画,android animation rotate 图片无限循环旋转
  2. java scheduled_怎么在java中利用@Scheduled注解执行定时任务
  3. win7下 如何关闭ctrl+alt+箭头转换屏幕快捷键
  4. 构建Instrumented单元测试
  5. (三)一步步来开始SSM:拦截器实现
  6. 9个Python编程小游戏,有趣又好玩,简直太棒了
  7. 小飞鱼通达二开 PHP使用钉钉接口发送带链接的卡片消息(代码)
  8. English--谚语
  9. STM32驱动OV7670(无FIFO)相关问题的解决
  10. AMBA5 AHB协议规范(AHB5,AHB-Lite)中文版-第九章 原子性