杂想:为什么是传输层进行差错控制不是应用层?

TCP/IP协议栈中的差错控制通常在传输层执行,而非应用层。这是因为服务端解析数据时从下往上进行,TCP头部的信息可用于判断差错,如丢包、乱序,而无需解析应用层内容。这样做可以减少不必要的应用层解析,同时在操作系统层面实现通用的差错控制,与业务内容解耦。此外,IP层主要关注路由,不包含差错控制功能,因此差错控制应在端点即TCP层处理。UDP等不可靠传输协议若需确保可靠性,通常需在应用层实现。
摘要由CSDN通过智能技术生成

问题:

在看thrift协议的时候,突然想到差错控制为什么要在传输层(单指tcp)做,而不是更上一层的应用层?

思路:

后来仔细一想,虽然客户端在打包的时候,是从应用层开始从上往下填充的,但是服务端解析的时候是反着来的,从下往上的,这也是为什么TCP/IP被称为协议的原因之一。(刚好满足栈的特性)

所以,我们在进行差错控制的时候,比如看序号有没有乱,是先解析到tcp的,此时应用层还在tcp的数据段里面没有解析出来,这时候在服务端看来,它看到的就是一个单纯的网络段–tcp报文,跟业务是没有关系的,它通过tcp头部的各种信息来判断差错,而不关心业务具体内容(http的数据)。

这样显然是更有道理的,
一方面,如果tcp都查出来问题了(丢包、乱序),应用层就完全不用解析了,解析出来也不对。
另一方面,应用层以下:tcp、ip这些都是操作系统层面实现的,既然在OS层实现,就相当于一个通用的”平台“,不管你是什么业务,丢包乱序之后,我(OS)都可以进行差错控制,松耦合于业务。

所以,像udp这种要保证可靠传输的话,OS层的内容一般动不了,也就是说只能在应用层想办法。

另外,为什么不把差错控制下移,在IP层做差错控制?这样不是省掉tcp的一层封装了吗?

现代的tcp/ip已经做的很精简了(仅网络层次而言) IP层有IP的作用,路由和差错控制也没有任何关系,IP层保障的是网络传输过程,关注的是顺利到达目的地,关注的是传输路径、过程, 差错控制不应该在传输路径上做,当然它也做不了, 所以只能放到端上去做,一旦报文到达端上之后,IP层的生命周期理论上已经结束了,该tcp上场了。
这两个(路由和差错控制,就像上面说的差错控制和业务的关系一样)显然也应该是松耦合的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值