【后端面经-计算机基础】HTTP和TCP的区别

端面,计算机,基础,http,tcp,区别 · 浏览次数 : 97

小编点评

**HTTP 和 TCP 的区别目录** **2. TCP协议** * 面向连接的、可靠的、基于字节流的传输层通信协议。 * 适用于需要建立连接才能传输数据的应用场景。 * 包含以下重要特征: * 对连接建立和释放需要多次确认的理解相关标志位的数值端到端主机的状态改变。 * 报文格式包括请求行、实体和状态行。 **2.1 特点:** * 面向连接 * 可靠 * 基于字节流 * 报文格式包含请求行、实体和状态行 **2.2 报文格式:** ``` 请求行: 方法字段(Method) URL字段(URL) 版本字段(Version) 实体: 数据 状态行: 版本号(Version) 状态码(Status Code) 原因字段(Reason Phrase) ``` **2.3 三次握手和四次挥手:** * 三次握手: * 客户端发送请求。 * 服务端检查请求的合法性。 * 服务器确认连接建立。 * 四次挥手: * 服务器发送响应包。 * 客户端确认响应的正确性。 * 客户端释放连接。 **3. HTTP协议** * 基于TCP协议的一个应用层协议。 * 适用于需要建立连接才能传输数据的应用场景。 * 包含以下重要特征: * 短连接:基于TCP面向连接的特性,每次请求都需要建立连接,请求结束后断开连接。 * 无状态:由于是短连接,请求响应之后直接断开连接,因此不会进行状态存储,下次连接需要重新输入数据信息。 * 明文:HTTP协议的通信内容都是明文,不加密,因此不安全。 **4. HTTP vs TCP 的区别:** | 特征 | HTTP | TCP | |---|---|---| | 连接方式 | 面向连接 | 面向连接 | | 可靠性 | 可靠 | 可靠 | | 流量 | 可变 | 固定 | | 报文格式 | 明文 | 明文 | | 协议层 | 应用层 | 传输层 | | 连接建立 | 三次握手 | 四次挥手 | | 状态存储 | 无 | 是 | | 安全性 | 不安全 | 安全 |

正文

【后端面经-计算机基础】HTTP和TCP的区别

1. OSI七层模型和相关协议

在计算机网络的学习中,OSI七层结构是一个很重要的概念。
七层模型从上到下如下所示:

  • 应用层:负责应用之间的通信,处理请求和响应的具体格式
  • 表示层:对于数据格式进行处理
  • 会话层:负责建立和断开通信连接,
  • 传输层:负责建立端口之间的连接,规范数据传输
  • 网络层:负责主机之间的传输和寻路
  • 数据链路层:负责传输数据帧,进行差错检测
  • 物理层:负责将数据和电信号进行转化

OSI七层模型的每一层有对应的协议和规范,如图所示:

2. TCP协议

TCP(Transmission Control Protocol)是传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。

2.1 特点:

TCP是面向连接、可靠、基于字节流的传输协议。
传输层的另一个协议是UDP(User Datagram Protocol),
UDP是面向无连接、不可靠、基于数据报的传输协议。
TCP和UDP的区别如下表所示:

2.2 报文格式

TCP协议的报文格式如图所示:

对各字段的解释如下表所示:

2.3 三次握手和四次挥手

TCP的连接建立和释放是一个很重要的过程,其实重点在于三点:

  • 对连接建立和释放需要多次确认的理解
  • 相关标志位的数值
  • 端到端主机的状态改变

各位可以参考如下博客学习:
“三次握手,四次挥手”你真的懂吗?

3. HTTP协议

HTTP(HyperText Transfer Protocol)是超文本传输协议,是基于TCP协议的一个应用层协议。

3.1 特点

  • 短连接:基于TCP面向连接的特性,每次请求都需要建立连接,请求结束后断开连接。想要保持长连接,可在连接有效期内定期发送请求。
  • 无状态:由于是短连接,请求响应之后直接断开连接,因此不会进行状态存储,下次连接需要重新输入数据信息。
  • 通信使用明文:HTTP协议的通信内容都是明文,不加密,因此不安全。

http的一次连接过程如下:

  • 客户端发送请求,连接建立;
  • 服务端响应请求,返回数据;
  • 连接断开

3.2 报文格式

  1. 请求报文
    简单来说,请求报文分为头部(header)和实体(body),两者之间由一行空格相连,其中头部包含请求行和头部字段。报文格式如下图所示:

其中,请求行部分可以细分为如下三个部分:

  • 方法字段(Method)包括常见的GETPOST,如下是对常见方法的介绍:

  • URL字段指出了请求的目标地址。

  • 版本字段(Version)指出了HTTP协议的版本,常见的有1.01.12.0,如下是对http各个版本的解释:

如下是一个请求行的实例:

GET /index.html HTTP/1.1

  1. 响应报文
    和请求报文类似,响应报文也分为头部和实体,两者之间由一行空格相连,其中头部包含状态行和头部字段。报文格式如下图所示:

其中,状态行部分可以细分为如下三个部分:

  • 版本号(Version)在请求报文的介绍中提到过;

  • 状态码(Status Code)指出了请求的处理结果,常见的有200404500,如下是常见状态码和其含义:

    更详细的信息可参考此篇博客

  • 原因字段(Reason Phrase)是对状态码的简单解释。

如下是一个状态行的实例:

HTTP/1.1 200 OK

3.2 https和http

HTTP: 超文本传输协议,是一种通信协议,用于从WWW服务器传输超文本到本地浏览器的传送协议。
HTTPS: 是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

4. HTTP vs TCP

两种的区别见下表所示:

5. 面试模拟

Q:HTTP和TCP了解吗?有什么关系?
A:http是应用层的超文本数据传输协议,tcp是传输层的传输控制协议。
http是基于tcp实现的,在请求的时候会建立tcp连接,但是http的连接不同于tcp的长时连接,是一种短连接。

Q:看过TCP结构吗?用什么看的?
A:看过,tcp首部包括20~60字节,包含源端口、目标端口、数据序号、确认序号、首部长度、指示位、滑动窗口大小、校验和、选项字段。
可通过wireshark抓包查看。

Q:HTTPS是什么?ssl属于哪一层协议?
A:https是基于http的超文本传输安全协议,在http的基础上增加了加密通信、身份认证等功能,从而增强传输的安全性。
SSL是传输层和应用层之间的协议。主要负责对数据通信进行加密等安全支撑。

参考资料

  1. HTTP协议 与 TCP协议 的区别,作为web程序员必须要懂
  2. 一文走进 HTTP 与 TCP 协议
  3. 面试:HTTP协议与TCP协议的区别和联系
  4. TCP报文格式
  5. HTTP 报文格式简介
  6. HTTP方法
  7. HTTP 状态码
  8. HTTP 与 HTTPS 的区别

与【后端面经-计算机基础】HTTP和TCP的区别相似的内容:

【后端面经-计算机基础】HTTP和TCP的区别

本文主要介绍了计算机网络中的两个经典协议:http和tcp,简单介绍两者的报文结构,并结合面试题对两者进行详细说明。

OPPO 后端开发 一、二面面经

你好,我是 Guide,看了这么多面试成功的经验分享,今天来看一个读者分享的 Oppo 秋招面试失败经历。 面经合集请看:Java面试题&面经精选集。 下面是正文(文中的我为读者本人)。 个人情况 我的学校可能比大部分同学都比较差,是一个很一般的二本,土木专业转的计算机专业。 大三之前一直在做 C

【后端面经-数据库】MySQL的存储引擎简介

对于mysql中常用的四类存储引擎MyISAM、InnoDB、MEMORY、MERGE的介绍和性能对比。

【后端面经-数据库】MySQL的事务隔离级别简介

对于数据库常用的事务隔离级别进行解释和区分,并解释三类读取错误——脏读、不可重复读、幻读的区别。

【后端面经】MySQL主键、唯一索引、联合索引的区别和作用

本文介绍了MySQL中主键、唯一索引、联合索引的特点和区别,并且介绍了“索引”对于数据库操作的影响。

【后端面经-Java】Java创建线程的方法简介

本文简要介绍了java中创建线程的四种方式,并介绍了线程概念,适合新手阅读。

【后端面经-java】java线程池满的处理策略

本文对java线程池做了具体介绍,并且讨论了java线程池满了之后的拒绝策略。

【后端面经-Spring】Spring 中 bean 的生命周期)

本文简单介绍了spring中bean的生命周期

【后端面经-Java】HashMap详解

本文详细介绍了hashmap,包括基本概念、hashmap数据结构、关键变量和重要方法,并且结合源码进行分析。

【后端面经-Java】Synchronize和ReentrantLock区别

本文介绍了Synchronize和ReentrantLock同步锁的相似和不同点,并指出两者的主要特点和适用场景。