关于计算机网络中相关协议的一点疑问
source link: https://www.v2ex.com/t/800692
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
最近在看计算机网络相关书和视频。
其中涉及到各种网络协议,如 Http,SSl 等基于 tcp/ip 之上的协议。
我想请问下,像 http 这种其实本质就是重新规划 tcp 数据报中有效数据载体部分空间是吗?
把数据部分重新划分出一部分空间用于存储 http 协议所需的字段 https 就是在去除 http 协议所需空间,再在数据部分划分出一段用于存储 ssl 协议字段是吗?(不考虑数据加密,压缩等问题)
我理解的如下图:
所以网络传输中,协议越复杂,传输的有效数据就越少对吗?
各种协议就是对数据部分改造对吗?
第 1 条附言 · 1 天前
EthanDon 1 天前
网络中各层协议不应该简单地横向比较,因为它们的要解决的问题各不相同。
“像 http 这种其实本质就是重新规划 tcp 数据报中有效数据载体部分空间是吗?”
这个说法太奇怪了,HTTP 不是来「重新规划」 TCP 报文数据的,TCP 只是载体,没有 HTTP 也就没有 TCP 的内容,何来 HTTP 来规划 TCP 数据的说法呢?
EthanDon 1 天前
不过的确,协议层数越多,报文效率越低。
yin1999 1 天前 via Android
ruxuan1306 1 天前
快递公司只关心快递的重量和大小,所以你可以自己实现应用层的加密,比如你要寄些绝密文件,为了提升安全性,你可以先把它装进密码箱,然后用普通快递邮寄,再通过其它什么方式将密码告诉收件人。
gBurnX 1 天前
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 的区别。
chendy 1 天前
不是,HTTP 只管把数据交给 TCP,或者拿 TCP 收到的数据,至于 TCP 到底怎么收发数据,HTTP 管不着
SmiteChow 22 小时 43 分钟前
stach 20 小时 30 分钟前
> 我想请问下,像 http 这种其实本质就是重新规划 tcp 数据报中有效数据载体部分空间是吗?
是的
- tcp 报文的有效数据载体部分, 存储的就是 http 报文的所有内容, 包括 header 和 body
> 把数据部分重新划分出一部分空间用于存储 http 协议所需的字段 https 就是在去除 http 协议所需空间,再在数据部分划分出一段用于存储 ssl 协议字段是吗?(不考虑数据加密,压缩等问题)
描述有点乱
- https 协议相当于利用现有的 http 协议层(应用层, tcp 有效数据载体部分), 又插入了一层 ssl, 介于 tcp 和 http 中间, 不属于 OSI 模型定义的网络模型, 可能是个临时过渡方案
> 所以网络传输中,协议越复杂,传输的有效数据就越少对吗?
是的
- 协议越复杂, 包裹的层数越多, 需要网络交互次数越多, 有效数据越少
> 各种协议就是对数据部分改造对吗?
是的
- 每一层协议都是在底层协议的数据部分进行改造
- 有了底层的协议作为地基, 上层协议才可以层层盖楼, 利用下一层的数据部分进行划分
2i2Re2PLMaDnghL 19 小时 15 分钟前
1. 把信装进信封
2. 把信从信封里拿出来
3. 把信放进密码盒
4. 把密码盒放进信封
你可以直接执行 3 、4 。
1 和 2 是多此一举。
不是「重新规划」,而只是「规划」(或者说首次规划),因为 TCP 根本没规划载荷的组织形式。你不能重新干一件没有被干过的事。
就好像说有一片自人类历史到目前都一直无主的空地,比如火星,你不能说「重新规划」火星用于太阳能发电,你只能说「规划」火星用于太阳能发电。
是的,协议层越复杂,有效载荷比例越少。但这并不必然意味着效率低。你寄信要把信塞进信封,不意味着信封降低了寄信效率;比起把信复印 70 亿份然后投递给地球上所有人,反而是显著提高了寄信效率。当然,类似信封的「重」协议和类似明信片的「轻」协议有具体开销量的区别,但同样也会有其他方面取舍。
同样地,因为数据部分本来就没什么规则,所以不能称对数据部分「改造」,是对数据部分进行「组织」。
GeruzoniAnsasu 19 小时 1 分钟前
你概念中的那个「载体空间」,是不固定大小的,并不是往一个固定盒子里填更复杂的数据,而是把复杂的数据拿一个更大的盒子装,并且套上更多层
smyle 18 小时 38 分钟前
IP 层的包就是以太包中的“数据”部分
传输层(也就是 tcp,udp,还有其他协议,但普通人不太会接触到)的包就是 IP 包中的”数据“部分
类似的,HTTP 、ftp 包就是 tcp 包中的”数据“部分
yezheyu 16 小时 59 分钟前
如果因为数据包太大需要重新分割的话,每段数据不都还是要加上所有协议字段,不还是很大(毕竟数据包过大就是因为协议字段过多导致的)
libook 13 小时 10 分钟前
TCP 这一层,有 TCP 自己的元数据,告诉你这是个 TCP 包,来源和目标的 IP 、端口,以及长度之类的信息,对这一层来说,载荷就只是一坨数据而已,没有特殊意义;
TLS 这一层,就是 TCP 的那坨载荷,有 TLS 自己的元数据,告诉你这是个 TLS 包,还有协议版本、目的地域、加密算法名称啥的,对于这一层来说,载荷就只是一坨数据而已,没有特殊意义;
HTTP 这一层,就是 TLS 的那坨载荷,有 HTTP 自己的元数据( header ),载荷就是你实际传输的 body 之类的。
不要混着看,因为比如路由器在处理 TCP 数据包的时候压根不会关心载荷里是啥东西,它只关心元数据,并把载荷原样传给目的地设备;
浏览器的 TLS 程序也只关心 TLS 本身的元数据,顶多会对载荷进行解密,然后把解密后的数据给浏览器的 HTTP 程序。
libook 13 小时 4 分钟前
分割数据包可以不考虑数据包的结构,可以简单粗暴把整个数据包的数据切成几份,然后新加一层给每一份重新包一个数据包,到目的地后拆包直接拼起来就是原来那个数据包了。
当然实际上各种协议有自己的奇淫技巧来解决各种问题。
GeruzoniAnsasu 10 小时 37 分钟前
但当一个 2 层套 3 层套 4 层“数据包” 超过「最大盒子大小」( MTU/MSS ),就会在各协议层重组,分成更小的 fragment/frame,并给每个上层内容重新套一个本层的包头
比如 MTU 是 1K,你尝试发一个 1K 的网页,首先 HTTP 会套上 HTTP 头,写上 content-length: 1k,这样整个报文就超过 1k 了
轮到 TCP 层,它感觉一个分片发不完,分成了两个片,一片内容 1k,套上 TCP 头交给链路层,另一片内容比如 100b,套上另一个 TCP 头交给链路层。如果这两个片发出去顺序不对或者丢了一部分,TCP 负责重排重发保证接收完整
链路层,发现第一个片原本 1k 套上 TCP 头又超了 1k,于是划分帧的时候也劈两半,各自套上帧头,然后交给网卡
不过呢,TCP 协议栈在不同 OS 甚至硬件的实现上是有差异的,按照上面的假设一个 1k 内容的东西被劈成了 3 份显然不太科学。所以比如 linux 的协议栈就不像上面说的每层都自己处理一次,而是 23 层在同一块内存处理,一次性分拆好。4 层应用层一般内核就不会越界去管了,但并没有不准在内核实现 HTTP 协议做一个 234 层一起分片的协议栈。
GeruzoniAnsasu 10 小时 30 分钟前
实现上需要对「频繁拆分导致包头冗余造成性能浪费」 vs 「 MTU 过大导致丢包重传压力过大使性能下降」之间进行权衡
jedihy 2 小时 33 分钟前
网络里面传输的最大包大小是固定的叫 MTU 。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK