关于计算机网络中相关协议的一点疑问

2021-09-08 18:51:28 +08:00
 yezheyu

最近在看计算机网络相关书和视频。

其中涉及到各种网络协议,如 Http,SSl 等基于 tcp/ip 之上的协议。

我想请问下,像 http 这种其实本质就是重新规划 tcp 数据报中有效数据载体部分空间是吗?

把数据部分重新划分出一部分空间用于存储 http 协议所需的字段 https 就是在去除 http 协议所需空间,再在数据部分划分出一段用于存储 ssl 协议字段是吗?(不考虑数据加密,压缩等问题)

我理解的如下图:

所以网络传输中,协议越复杂,传输的有效数据就越少对吗?

各种协议就是对数据部分改造对吗?

2990 次点击
所在节点    程序员
30 条回复
EthanDon
2021-09-08 19:00:44 +08:00
计算机网络的协议是分层的,首先你要搞清楚每一层解决的是什么问题,然后就能明白每层协议为什么需要。
网络中各层协议不应该简单地横向比较,因为它们的要解决的问题各不相同。

“像 http 这种其实本质就是重新规划 tcp 数据报中有效数据载体部分空间是吗?”
这个说法太奇怪了,HTTP 不是来「重新规划」 TCP 报文数据的,TCP 只是载体,没有 HTTP 也就没有 TCP 的内容,何来 HTTP 来规划 TCP 数据的说法呢?
EthanDon
2021-09-08 19:04:12 +08:00
实际上网络协议的上层是利用下层来屏蔽了一些细节问题,比如 HTTP 不需要再关心“网络连接”的问题,只需要专注应用数据的交付; TCP 不需要再关注 IP 寻址与路由的问题,只需要关注链接的通信;所以 HTTP 根本不关心 TCP 原来的数据是怎么样的,而 HTTP 是利用 TCP 去交付自己的数据。

不过的确,协议层数越多,报文效率越低。
yin1999
2021-09-08 19:09:36 +08:00
其实图里的理解不太对,TCP 的数据报虽然是有边界的,但是它对于上层协议表现出来的是无边界的数据流,HTTP 协议需要定义数据边界等,才能通过 TCP 正常传输数据包
felixcode
2021-09-08 19:15:58 +08:00
http,ssl 所需交互的信息都存在 tcp 数据报的载荷(payload)里,所以上层与下层协议都只关心自己的那部分。
yezheyu
2021-09-08 19:19:08 +08:00
@yin1999 这个我知道,就是 TCP 滑动窗口传输那部分和粘包的问题,忘了加上这一条,我这里并不是特指 http,只是拿 http 来举例,像 IPsec 之类协议
wangxn
2021-09-08 19:38:11 +08:00
一个 TCP 包不一定能放得下整个 HTTP 请求或回应,所以不会每个 TCP 包都会有 HTTP 头,它包含的可能是其中的一个片段。
cwek
2021-09-08 20:24:32 +08:00
只是分层原理而已。你喜欢的话将语义(包括加密)、会话一次过塞到 IP 包里,用 IP 号区分协议,像 OSPF 、GRE 等。只是……IP 号不够分罢了(狗头)
xarthur
2021-09-08 20:29:38 +08:00
当楼主说出「粘包」这个词的时候……
guyeu
2021-09-08 20:36:40 +08:00
每一层都有开销,是这样的
ruxuan1306
2021-09-08 21:58:50 +08:00
想想寄快递,快递员根本不需要知道你怎么规划快递箱里的空间,他只需要统一封箱贴单,这个单就是协议头。
ruxuan1306
2021-09-08 22:09:54 +08:00
你不需要知道你的快递需要走哪个转运中心走哪条路又由谁送到你家,快递公司屏蔽了这些细节,在你看来,通过快递这个协议,你和收件人之间建立了点对点的货物通路。

快递公司只关心快递的重量和大小,所以你可以自己实现应用层的加密,比如你要寄些绝密文件,为了提升安全性,你可以先把它装进密码箱,然后用普通快递邮寄,再通过其它什么方式将密码告诉收件人。
gBurnX
2021-09-08 22:14:13 +08:00
Q: http 这种其实本质就是重新规划 tcp 数据报中有效数据载体部分空间是吗?
A:不是重新规划,而是 tcp / udp 这一层协议,承载了 http 数据。

===========
fix:tcp 数据报这种说法有问题。
tcp 是流,udp 才是数据报。
也有可能是你本来想说 tcp 数据包,输入错了,输成了 tcp 数据报。

===========
把你的图改成套娃结构就对了(为了理解,只是粗略解释,并不精确):

数据帧 = 帧头 + 帧数据。

当帧数据为 IP 数据包时,IP 数据包 = IP 包头 + IP 数据。

当 IP 数据为 TCP 数据包时,TCP 数据包 = TCP 数据包包头 + TCP 数据。

当 TCP 数据为 TLS/SSL 数据包时,这里要分情况处理。

当 Client 与 Server 在加密初期(握手阶段)时,TLS/SSL 数据包是一些交互数据、证书、秘钥等用于建立加密通道的信息。

当 Client 与 Server 在加密通信阶段时,TLS/SSL 数据包 = 基于 TLS/SSL 建立好的加密通道,所承载的 HTTP 数据包。说人话,此时 TLS/SSL 数据包 = 乱码。或者说 TLS/SSL 数据包 = encrypt( httpDataPackage )。

HTTP 数据包 = HTTP Head + HTTP body 。根据通信方式,HTTP 数据包还有客户端请求数据 client request data 与服务端响应数据 server response data 的区别。
secondwtq
2021-09-08 22:33:42 +08:00
又看到这个熟悉的问题了,马克一下,今天的 V 站就刷到这里(
hxndg
2021-09-08 22:54:54 +08:00
这只能说是一部分原因吧,重点是数据的传递。
chendy
2021-09-09 00:16:04 +08:00
> 我想请问下,像 http 这种其实本质就是重新规划 tcp 数据报中有效数据载体部分空间是吗?

不是,HTTP 只管把数据交给 TCP,或者拿 TCP 收到的数据,至于 TCP 到底怎么收发数据,HTTP 管不着
lqw3030
2021-09-09 08:48:08 +08:00
从链路层到应用层,本质就是拼乐高积木,底层无法感知上层
SmiteChow
2021-09-09 09:13:04 +08:00
不对
huangmingyou
2021-09-09 09:39:28 +08:00
有效载荷是底层考虑的问题。上层协议不关心。同样,底层协议也不关心数据是啥。每层只是负责把本层的工作做好而已。
zjj19950716
2021-09-09 10:33:32 +08:00
拆快递,包装了十几层,拆到最后是一张好评返现小卡片。
labulaka521
2021-09-09 10:46:39 +08:00
做好本职工作

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/800692

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX