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

相关文章
|
4月前
|
网络协议 Java API
基于UDP/TCP实现客户端服务器的网络通信程序
基于UDP/TCP实现客户端服务器的网络通信程序
|
19天前
|
网络协议 Linux
TCP中两种保活方式
【4月更文挑战第7天】两种保活方式:Keep Alive和心跳包
|
4月前
|
存储 网络协议 安全
详解TCP报文格式以及TCP相关特性
详解TCP报文格式以及TCP相关特性
115 2
|
6月前
|
网络协议 安全 网络性能优化
TCP与UDP的区别与适用场景
TCP与UDP的区别与适用场景
|
9月前
|
网络协议 网络性能优化
TCP协议的相关特性(续)
TCP协议的相关特性(续)
|
9月前
|
网络协议
TCP 协议的相关特性
TCP 协议的相关特性
|
10月前
|
XML JSON 网络协议
【JaveEE】UDP 与 TCP 原理
1. 应用层协议(自定义组织格式) 对应后面的一个章节HTTP协议,应用层的代表协议,到时候重点讲解
81 0
|
网络协议 安全 Java
java实现UDP及TCP通信
java实现UDP及TCP通信,UDP(User Datagram Protocol)用户数据报协议,TCP(Transmission Control Protocol) 传输控制协议,是传输层的两个重要协议。
170 0
|
网络协议
TCP协议的状态
TCP协议的状态
96 0
|
网络协议
TCP协议三次握手的执行流程,tcp的交互模式
TCP协议三次握手的执行流程,tcp的交互模式
129 0