小小小幸运 发表于 2023-7-6 07:49:32

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

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


目录

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

[*]1. OSI七层模型和相关协议
[*]2. TCP协议

[*]2.1 特点:
[*]2.2 报文格式
[*]2.3 三次握手和四次挥手

[*]3. HTTP协议

[*]3.1 特点
[*]3.2 报文格式
[*]3.2 https和http

[*]4. HTTP vs TCP
[*]5. 面试模拟
[*]参考资料


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

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

[*]应用层:负责应用之间的通信,处理请求和响应的具体格式
[*]表示层:对于数据格式进行处理
[*]会话层:负责建立和断开通信连接,
[*]传输层:负责建立端口之间的连接,规范数据传输
[*]网络层:负责主机之间的传输和寻路
[*]数据链路层:负责传输数据帧,进行差错检测
[*]物理层:负责将数据和电信号进行转化
OSI七层模型的每一层有对应的协议和规范,如图所示:
https://cdn.jsdelivr.net/gh/cyl173/Imagebed/OSI%E4%B8%83%E5%B1%82%E5%8D%8F%E8%AE%AE.png
2. TCP协议

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

TCP是面向连接、可靠、基于字节流的传输协议。
传输层的另一个协议是UDP(User Datagram Protocol),
UDP是面向无连接、不可靠、基于数据报的传输协议。
TCP和UDP的区别如下表所示:
https://cdn.jsdelivr.net/gh/cyl173/Imagebed/TCP%E5%92%8CUDP.png
2.2 报文格式

TCP协议的报文格式如图所示:
https://cdn.jsdelivr.net/gh/cyl173/Imagebed/TCP%E6%8A%A5%E6%96%87%E6%A0%BC%E5%BC%8F-1.png
对各字段的解释如下表所示:
https://cdn.jsdelivr.net/gh/cyl173/Imagebed/TCP%E6%8A%A5%E6%96%87%E6%A0%BC%E5%BC%8F.png
2.3 三次握手和四次挥手

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

[*]对连接建立和释放需要多次确认的理解
[*]相关标志位的数值
[*]端到端主机的状态改变
各位可以参考如下博客学习:
“三次握手,四次挥手”你真的懂吗?
3. HTTP协议

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


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

[*]客户端发送请求,连接建立;
[*]服务端响应请求,返回数据;
[*]连接断开
3.2 报文格式


[*]请求报文
简单来说,请求报文分为头部(header)和实体(body),两者之间由一行空格相连,其中头部包含请求行和头部字段。报文格式如下图所示:
https://cdn.jsdelivr.net/gh/cyl173/Imagebed/%E8%AF%B7%E6%B1%82%E6%8A%A5%E6%96%87.png
其中,请求行部分可以细分为如下三个部分:
https://cdn.jsdelivr.net/gh/cyl173/Imagebed/%E8%AF%B7%E6%B1%82%E8%A1%8C.png

[*]方法字段(Method)包括常见的GET、POST,如下是对常见方法的介绍:
[*]URL字段指出了请求的目标地址。
[*]版本字段(Version)指出了HTTP协议的版本,常见的有1.0、1.1、2.0,如下是对http各个版本的解释:
https://cdn.jsdelivr.net/gh/cyl173/Imagebed/http%E7%89%88%E6%9C%AC.png
如下是一个请求行的实例:
GET /index.html HTTP/1.1

[*]响应报文
和请求报文类似,响应报文也分为头部和实体,两者之间由一行空格相连,其中头部包含状态行和头部字段。报文格式如下图所示:
https://cdn.jsdelivr.net/gh/cyl173/Imagebed/%E5%93%8D%E5%BA%94.png
其中,状态行部分可以细分为如下三个部分:
https://cdn.jsdelivr.net/gh/cyl173/Imagebed/%E5%93%8D%E5%BA%94%E8%A1%8C.png

[*]版本号(Version)在请求报文的介绍中提到过;
[*]状态码(Status Code)指出了请求的处理结果,常见的有200、404、500,如下是常见状态码和其含义:
https://cdn.jsdelivr.net/gh/cyl173/Imagebed/http%E7%8A%B6%E6%80%81%E7%A0%81.png
更详细的信息可参考此篇博客
[*]原因字段(Reason Phrase)是对状态码的简单解释。
如下是一个状态行的实例:
HTTP/1.1 200 OK
3.2 https和http

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

两种的区别见下表所示:
https://cdn.jsdelivr.net/gh/cyl173/Imagebed/http%E5%92%8Ctcp.png
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是传输层和应用层之间的协议。主要负责对数据通信进行加密等安全支撑。
参考资料


[*]HTTP协议 与 TCP协议 的区别,作为web程序员必须要懂
[*]一文走进 HTTP 与 TCP 协议
[*]面试:HTTP协议与TCP协议的区别和联系
[*]TCP报文格式
[*]HTTP 报文格式简介
[*]HTTP方法
[*]HTTP 状态码
[*]HTTP 与 HTTPS 的区别

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【后端面经-计算机基础】HTTP和TCP的区别