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时就是简单的停等协议。三个子子协议都很复杂,只有靠这种复杂的机制才换取了网络链路的高效利用。



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1274129

相关文章
|
24天前
|
域名解析 网络协议 关系型数据库
tcp和udp的区别是什么
TCP和UDP是互联网协议中的传输层协议。TCP是面向连接的,通过三次握手建立可靠连接,提供数据顺序和可靠性保证,适用于HTTP、FTP等需要保证数据完整性的应用。UDP则是无连接的,数据报独立发送,传输速度快但不保证可靠性,常用于实时通信、流媒体和DNS解析等对速度要求高的场景。根据应用需求选择合适的协议至关重要。
tcp和udp的区别是什么
|
10天前
|
网络协议 Linux
TCP中两种保活方式
【4月更文挑战第7天】两种保活方式:Keep Alive和心跳包
|
4月前
|
存储 网络协议 安全
详解TCP报文格式以及TCP相关特性
详解TCP报文格式以及TCP相关特性
105 2
|
6月前
|
网络协议 安全 网络性能优化
TCP与UDP的区别与适用场景
TCP与UDP的区别与适用场景
|
9月前
|
网络协议 网络性能优化
TCP 和 UDP 的区别?
TCP 和 UDP 的区别?
122 0
|
10月前
|
XML JSON 网络协议
【JaveEE】UDP 与 TCP 原理
1. 应用层协议(自定义组织格式) 对应后面的一个章节HTTP协议,应用层的代表协议,到时候重点讲解
81 0
|
网络协议
TCP协议的状态
TCP协议的状态
96 0
|
网络协议 算法
TCP 重传机制
TCP 重传机制
226 0
|
存储 缓存 监控
|
网络协议 网络性能优化