tcp的复杂机制

懂socket编程的人不一定理解tcp协议,实际上很多计算机编程高手都不一定懂tcp协议,编程高手很多都是对api很理解,对于api下面的机制就不一定理解了,我是一个学网络出身的人,在我会用java或者c写hello world之前我就知道了tcp的原理,记得当时为tcp的滑动窗口,慢启动等着迷过,成夜成夜的研究路由协议和交换机原理,仅为理解mss,mtu等等概念,然后白天申请到机房去做实验...后来看了linux源码,看了linux中对tcp/ip协议栈的实现,突然发现竟然是如此复杂,tcp的三次握手在socket编程时是看不到的,但是在内核中却能看到,必须在内核中看到,如果内核都不实现协议栈,那么靠谁实现呢?三次握手在linux中是通过一个状态机来实现的,三次握手完毕后跳出内核的状态机,进入用户空间的socket进程。

典型的tcp协议要求每一个数据段发送之后都要有一个ack回复,然后才能发送下一个数据段,虽然这样能保证数据的可靠传输,但是效率呢?由于tcp是全双工通信,在等待一个数据段的ack恢复之前网络将会闲置,因此效率将会受到极大影响,因此协议提出了滑动窗口子协议,专门负责数据的传输,滑动窗口子协议分为简单的停-等协议,后退N协议,以及选择重传协议三个子子协议,其实三个子子协议可以由一个例程表示,只是一个例程的三个不同情况,比如发送和接收窗口都为1时就是简单的停等协议。三个子子协议都很复杂,只有靠这种复杂的机制才换取了网络链路的高效利用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值