ip可以实现传输层甚至应用层的协议吗?

前言:

       我们知道IP协议实现了两点之间的网络数据传输,那么既然已经实现了数据传输,为什么还有传输层、应用层等上层协议呢,IP协议不能直接将完整的数据传输功能实现吗?或者说IP协议能实现传输层甚至应用层的协议功能吗?

       我们假设现在在ip协议上实现传输层功能,OK,首先我们需要在ip头上加入源端口号和目的端口号完成端到端通信,然后给出数据长度(有了ip数据长度字段为什么udp还要有长度字段?主要应该就是为了防止粘包问题)和校验值,至此为止我们已经实现了udp协议。为了实现可靠传输,我们要对ip包响应ack,于是加上了序列号(这个字段的意义是否可以由ip标识号代替? IP标识一定程度上也可以实现有序性,但IP协议本身使用标识字段,主要目的应该是配合偏移字段,为了保证数据的完整性。)以实现有序以及握手,至此可靠传输也实现了,至于tcp的滑动窗口,拥塞控制等,都是类似的优化手段了。
       那么我们可以用ip实现传输层协议吗?此刻当然是可以的。但是没有这么做,为何没有这么做呢?
       一者,客观历史的原因,很多不能很好理解的事情都有历史原因在内,任何事情都受到理论、实践、以及历史背景的影响。不管是网络还是计算机结构,甚至生活,政治等(为什么有人民公社,为什么炒房?)。
        二者,主观意愿的原因,如果按照刚才的逻辑,我们是否可以发现我们连应用层协议都可以完成了?是的,可这样会有一个很明显的问题,ip头部将变得特别复杂且有新的协议还要不停的修改,ip协议可是几乎所有网络中的设备都要使用的,不停的修改将变得特别复杂,更大的头部也会带来更大的开销。

       回到协议本身,协议本身就是一个约定,大家都要遵守的,所以不能充满变化(仅同类型的ipv6至今也没有完全支持),两个人可以当晚决定去哪吃饭,开会需要提前通知,举办奥运会则要花费数年时间准备,涉及面越广,内容越多,调整越困难。

       然后,协议是分层的,分层的目的就是为了划清界限,消除耦合,提高复用,允许扩展!这句话是不是很熟悉,没错,面向对象的思想,以及设计模式的思想。从函数,到面向对象,再到设计模式,其根本就是为了提高复用的同时给予更好的扩展性。所以就好比我定义的人的身体结构,但说什么可以自由发挥,甚至加点设计模式,给说过的话笔录下来,说话时加个大喇叭。
       设计这件事,对于软件有,对于建筑,对于工厂,对于生活,同样有。设计这个事情,在小工程低量的情况下是会增加复杂度和成本的,比如代码就是输出hello word,那你甚至连数据结构都不用有,如果只是盖个草屋,生产一种凉鞋,那一个人一双手甚至就可以了,可是若是想输出英语,德语,鸟语,还想输入英语返回汉语,亦或者想盖一栋大楼,混凝土加保温层加钢化玻璃,这样没有分工协作,资源复用只怕会累死乱死。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值