HTTP与TCP的区别和联系

2023-10-27

https://blog.csdn.net/u013485792/article/details/52100533  

相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助。

一、基本概念

1、TCP连接

      手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立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状态,完成三次握手。

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


2、HTTP连接

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

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

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

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

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


3、SOCKET原理

3.1套接字(socket)概念

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

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


3.2 建立socket连接


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

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

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

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

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


4、SOCKET连接与TCP连接

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


5、Socket连接与HTTP连接

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

     而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

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


相互关系

      首先,纠正一下我以前一直误解的概念,我一直以为Http和Tcp是两种不同的,但是地位对等的协议,虽然知道TCP是传输层,而http是应用层今天学习了下,知道了 http是要基于TCP连接基础上的,简单的说,TCP就是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。http是用来收发数据,即实际应用上来的。

     第一:从传输层,先说下TCP连接,我们要和服务端连接TCP连接,需要通过三次连接,包括:请求,确认,建立连接。即传说中的“三次握手协议”。

     第一次:C发送一个请求连接的位码SYN和一个随机产生的序列号给Seq,然后S收到了这些数据。

     第二次:S收到了这个请求连接的位码,啊呀,有人向我发出请求了么,那我要不要接受他的请求,得实现确认一下,于是,发送了一个确认码 ACN(seq+1),和SYN,Seq给C,然后C收到了,这个是第二次连接。

     第三次:C收到了确认的码和之前发送的SYN一比较,偶哟,对上了么,于是他又发送了一个ACN(SEQ+1)给S,S收到以后就确定建立连接,至此,TCP连接建立完成。

     简单就是:请求,确认,连接。

     第二:从实际上的数据应用来说httP

     在前面客户端和应用服务器建立TCP连接之后,就需要用http协议来传送数据了,HTTP协议简单来说,还是请求,确认,连接。

     总体就是C发送一个HTTP请求给S,S收到了这个http请求,然后返回给Chttp响应,然后C的中间件或者说浏览器把这些数据渲染成为了网页,展示在用户面前。

     第一:发送一个http请求给S,这个请求包括请求头和请求内容:

request header:

     包括了,1.请求的方法是POST/GET,请求的URL,http协议版本2.请求的数据,和编码方式3是否有cookie和cooies,是否缓存等。

     post和get请求方式的区别是,get把请求内容放在URL后面,但是URL长度有限制。而post是以表单的形势,适合要输入密码之类的,因为不在URL中显示,所以比较安全。

request body:

即请求的内容.

     第二:S收到了http请求,然后根据请求头,返回http响应。

response header:包括了1.cookies或者sessions2.状态吗3.内容大小等

response body:

     即响应的内容,包括,JS什么的。

     第三,C收到了以后,就由浏览器完成一系列的渲染,包括执行JS脚本等。

     这就是我所理解的webTCP,HTTP基础知识,待续。。。。。

  

      TCP是底层通讯协议,定义的是数据传输和连接方式的规范
     HTTP是应用层协议,定义的是传输数据的内容的规范
     HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP也就一定支持TCP     

      HTTP支持的是www服务 
     而TCP/IP是协议 
     它是Internet国际互联网络的基础。TCP/IP是网络中使用的基本的通信协议。 
     TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP与TCP的区别和联系 的相关文章

  • Request.Form 和 Request.QueryString 之间的区别?

    有人可以告诉我两者之间的确切区别吗Request Form and Request QueryString 我知道一个区别 比如 如果HTTP请求方式为POST 则用户提交的数据在申请表 收藏 如果HTTP请求方法是GET 则用户提交的数据
  • 在 grails 中编写代理

    我正在使用 Gralis 1 3 7 我正在编写一个控制器 需要从另一台服务器获取 PDF 文件并将其返回给客户端 我想以某种相当有效的方式来做到这一点 例如 class DocController def view URL source
  • python中的编码检测库[重复]

    这个问题在这里已经有答案了 这在某种程度上与我的问题有关here https stackoverflow com questions 2305997 unicodedecodeerror problem with mechanize 我处理
  • 如何在 Rails 中重定向到 404?

    我想在 Rails 中 伪造 404 页面 在 PHP 中 我只发送一个带有错误代码的标头 如下所示 header HTTP 1 0 404 Not Found Rails 是如何做到这一点的 不要自己渲染 404 没有理由这样做 Rail
  • 如何使用 Node.js 和 Axios 将文件上传到 AWS 中的预签名 URL?

    我有下一个场景 通过 AWS SDK 生成用于文件上传的签名 URL 尝试使用axios 或request npm包上传本地文件 但每次我都会出错 Status 403状态文本 禁止
  • iPhone - 从网络服务器获取文件的上次修改日期

    我想检查网络服务器上文件的上次修改日期 任何帮助都会很棒 谢谢 NSURLRequest request NSURLRequest alloc initWithURL aURL NSHTTPURLResponse response NSUR
  • 如何将 POST 请求内容保存为 .NET 中的文件 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个客户端应用程序POST请求a
  • HTTP实时音频流服务器

    作为概念验证 我需要创建一个 HTTP 服务器 该服务器在 GET 请求时应启动连续的非编码 非压缩音频数据流 WAV PCM16 我们假设音频数据是 4096 个随机生成的单声道音频样本块 采样率为 44 1kHz 我应该在 HTTP 响
  • Jsoup http 日志记录

    有没有办法记录http请求和响应 我们假设以下请求 Connection Response res Jsoup connect LOGIN URL HERE data user USER pass PASS method Connectio
  • 在Java中解析包含multipart/form-data请求体的字符串

    问题陈述 我认为标题说明了一切 我正在寻找解析 a 的方法String包含 multipart form data HTTP 请求的正文部分 IE 字符串的内容看起来像这样 xyzseparator blah Content Disposi
  • HTTP请求压缩

    一般用例 想象一下一个正在上传大量 JSON 的客户端 内容类型应保留application json因为这描述了实际数据 Accept Encoding 和 Transfer Encoding 似乎是为了告诉服务器应该如何格式化响应 看起
  • 如何通过 HTTP POST 发送充满对象的 NSArray?

    我在 iPhone 端有一个产品 购物清单 由具有名称 product id 等的产品对象组成 我希望将此列表发送到服务器 在那里我将服务器上的列表与 iphone 中的列表进行比较 以合并所做的更改并将合并的列表发送回 iphone 如何
  • 在 Java Servlet 应用程序中设置 HTTP 201 响应的 Location 标头的正确方法是什么

    考虑以下代码向客户端发送 HTTP 201 已创建 响应 String url app things id 42 example response setStatus HttpServletResponse SC CREATED respo
  • 在 Flex 中以 HTTP Post 方式上传任意数据

    我们目前有一个 Java 小程序 可以生成大量数据并将其上传到我们的服务器 我们拥有的上传方法之一是使用 HTTP POST 到我们的服务器 其内容只是原始数据 没有多部分编码或任何内容 我正在考虑实现一个具有相同功能的 Flex 应用程序
  • Perl:LWP::UserAgent 对于重定向 URL 始终返回代码 200

    我有一个简单的 url 它执行 302 临时错误 移至另一页 我尝试在 URL 返回代码 200 表示 OK 时检索它 并在返回 200 以外的其他内容时停止 My code my ua LWP UserAgent gt new env p
  • .NET 中有什么方法可以以编程方式侦听 HTTP 流量吗?

    我正在使用浏览器自动化来测试网站 但我需要验证来自浏览器的 HTTP 请求 即图像 外部脚本 XmlHttpRequest 对象 有没有一种方法可以以编程方式实例化代理以供浏览器使用以查看其发送的内容 我已经在使用 Fiddler 来监视流
  • 在处理程序之后访问 HTTP 请求上下文

    在我的日志记录中间件 链中的第一个 中 我需要访问一些在链下游的某些身份验证中间件中编写的上下文 并且仅在处理程序本身执行之后 旁注 需要首先调用日志记录中间件 因为我需要记录请求的持续时间 包括在中间件中花费的时间 此外 当权限不足时 身
  • 在golang中获取TTFB(第一个字节的时间)值

    我正在尝试获取 TTFB 值和 Connect 值 c exec Command curl w Connect time connect TTFB time starttransfer Total time time total o dev
  • 响应 301 永久移动

    我曾经得到以下对 php 请求的响应 回复
  • 从 HTTP 登录到 HTTPS

    我的网站默认使用 HTTP 我确实有一个启用 HTTPS 的证书 但只有其上的某些区域强制建立安全连接 登录是通过 Ajax 处理的 我想开始使用 SSL 即使请求来自 HTTP 我尝试强制请求的地址具有 HTTPS 并且它完美地回复 然而

随机推荐

  • 1305. 两棵二叉搜索树中的所有元素(中序遍历)

    给你 root1 和 root2 这两棵二叉搜索树 请你返回一个列表 其中包含 两棵树 中的所有整数并按 升序 排序 示例 1 输入 root1 2 1 4 root2 1 0 3 输出 0 1 1 2 3 4 示例 2 输入 root1
  • 刷脸支付更好地实现了社会资源的协同

    从移动支付到刷脸支付 争体验更是争用户入口 2年前 谈到移动支付 包括许多巨型公司 都只认为它不过是一个收款的入口 方便快捷 不必找零 消费者爱用 企业好清算对账 而如今 移动支付正在演变为各类本地生活服务的重要入口 各路巨头也不断加持 微
  • ISE约束文件UCF与Vivado约束文件XDC(FPGA不积跬步101)

    ISE约束文件UCF与Vivado约束文件XDC FPGA不积跬步101 随着FPGA技术的日益成熟 越来越多的工程师选择使用FPGA进行嵌入式系统的设计和开发 在FPGA的设计中 约束文件的编写是非常重要的一环 而在约束文件的编写中 IS
  • 蓝桥杯2023年第十四届省赛真题------第十四届蓝桥杯本科A组/研究生组2023年省赛题解--全部采用Java语言实现

    引言 今天现在这里 挖个坑 太忙了 这个专题不一样有时间补完 但我会尽力而为的 记录一下今天的日子 2023 04 21 看看这个坑要什么时候自己才能补完 题目pdf下载 第十四届蓝桥杯研究生组pdf下载 在此特别感谢博主int 我的文章参
  • xmind更改分支方向

    XMind如何调整分支主题位置 xmind怎么在左边创建 XMind分支主题任意移动方法 问题 问题解决 问题 在刚开始使用xmind的时候 觉得分支这么这么死板 不能随意拖动到想要的位置 分支朝向不能放到左边 右边 问题解决 这里使用的是
  • 你应该关注的十个智能硬件中文网站

    摘要 不论你是智能硬件从业者 还是智能硬件爱好者 不妨统一称之为 智能硬件er 在信息泛滥的时代 专注于智能硬件 能提供好的资讯 观点 资源的平台屈指可数 这是为您收集的值得关注的十大智能硬件中文网站 不论你是智能硬件从业者 还是智能硬件爱
  • 排序算法之冒泡排序(Bubble sort)

    冒泡排序 Bubble sort 是一个排序算法 可以将一组数列按从小到大或从大到小的顺序排列 操作步骤 从数列的开头开始比较相邻的元素 若前者比后者大 小 则调换二者的位置 依次重复执行1步骤 最终最大 小 的元素排列到了最后 除了已经排
  • C语言求s=a+aa+aaa+aaaa+....

    问题描述 求s a aa aaa aaaa 其中a是一个数字 n表示a的位数 a和n由键盘输入 代码描述 方法1 include
  • 网络安全(黑客)自学路线

    谈起黑客 可能各位都会想到 盗号 其实不尽然 黑客是一群喜爱研究技术的群体 在黑客圈中 一般分为三大圈 娱乐圈 技术圈 职业圈 娱乐圈 主要是初中生和高中生较多 玩网恋 人气 空间 建站收徒玩赚钱 技术高的也是有的 只是很少见 技术圈 这个
  • Python第九、十课

    枭 Python第九 十课 今天讲解了Python的 函数参数类型 变量作用域 函数参数类型 默认值参数 规则 在定义带有默认值参数的函数时 默认值参数必须全部出现在位置参数右侧 且任何一个默认参数右边都不能出现位置参数 默认值参数只在第一
  • 【云原生之kubernetes实战】kubernetes集群的HPA弹性伸缩

    云原生之kubernetes实战 kubernetes集群的HPA弹性伸缩 一 HAP介绍 1 HPA简介 2 HPA的实现原理 3 HPA自动伸缩示意图 4 HPA中影响 Pod 数量的因素 5 HPA改善服务的方式 二 检查本地k8s环
  • python学习主要应该学些什么

    近几年 python 正在成为最受欢迎的编程语言之一 无论是软件开发还是机器学习 python 都能够处理得游刃有余 人们喜欢使用 python 语言是因为它非常容易 相比于 c 语言和 java 等语言 它开发效率更高 它有着丰富的第三方
  • centos7安装或卸载RabbitMQ 3.8.4+Erlang 23.0详细步骤

    参考博客 Linux CentOS 7 下RabbitMQ的安装与配置 风萧萧1999的博客 CSDN博客 安装前准备 1 检查RabbitMQ Erlang版本 https www rabbitmq com which erlang ht
  • 【解决】使用mybatis解决sql报错: Parameter index out of range (1 > number of parameters, which is 0)

    当我们运用ssm框架做项目 并且要通过mybatis来做模糊查询时 sql语句中where条件语句 like后面 要用 like 条件名 而不是平常做where 时的like 条件名
  • InceptionNext实战:使用InceptionNext实现图像分类任务(一)

    文章目录 摘要 安装包 安装timm 安装 grad cam 数据增强Cutout和Mixup EMA 项目结构 计算mean和std 生成数据集 摘要 论文翻译 https blog csdn net m0 47867638 articl
  • wavefronts

    https www g truc net post 0597 html https michaldrobot com 2014 04 01 gcn execution patterns in full screen passes https
  • 力扣刷题记录(三)

    1084 销售分析III Create table If Not Exists Product product id int product name varchar 10 unit price int Create table If No
  • 机器学习——numpy逻辑回归(手写数字识别)

    二分类 识别1 7 import numpy as np import struct import matplotlib pyplot as plt import os from PIL import Image from sklearn
  • timm库安装

    按理来说 conda config append channels conda forge conda install timm 更新timm版本 pip install timm 0 5 4 python3 8 pytorch 1 11
  • HTTP与TCP的区别和联系

    https blog csdn net u013485792 article details 52100533 相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别 希望通过自己的浅显理解能对初学者有所帮助 一 基