Internet传输协议-TCP
http://phei.eefocus.com/book/08-07/473781276058574.html
http://www.eefocus.com/communication/210643
传输协议的要素
6.2.1寻址
6.2.2 建立连接
6.2.3 释放连接
两军问题
6.2.4 流控制和缓冲
6.2.5多路复用
TCP/IP体系中的传输层
6.5.1TCP介绍
TCP的序列号和确认号
6.5.5 TCP的连接建立和释放
三次握手的建立连接过程
TCP 连接释放
6.5.7 TCP连接的管理模型
6.5.8 TCP的传输策略
- 基于确认和可变窗口大小;
- 窗口大小为0时,正常情况下,发送方不能再发送TCP段,但有两个例外:
紧急数据可以发送;
为防止死锁,发送方可以发送1字节的TCP段,以便让接受方重新声明确认号和窗口大小。
TCP的传输效率
- TCP/IP开销=20 字节TCP头 + 20字节IP头
- 例如使用 TELNET连接, 每发送1个字节数据就要附加 40 字节的开销(41+40+40+41)
提高TCP传输效率的方法
- 策略1:发送方缓存应用程序的数据,等到形成一个比较大的段再发出;
- 策略2:在没有可能进行“捎带”的情况下,接收方延迟发送确认段;
- 策略3:使用Nagle算法:当应用程序每次向传输实体发出一个字节时,传输实体发出第一个字节并缓存所有其后的字节直至收到对第一个字节的确认;
然后将已缓存的所有字节组段发出并对再收到的字节缓存,直至收到下一个确认;
如果缓存的数据填满一半的窗口或是最大数据段时也可发送;
愚笨窗口综合症(Silly window syndrome)
Negle+Clark
- 发送端:避免发送太小的数据段;
- 接收端:避免请求太小的数据段。
6.5.9 TCP的拥塞控制
- 出现拥塞的情况
快网络小缓存接收者;
慢网络大缓存接收者 - 导致网络拥塞的潜在因素:
网络能力:拥塞窗口
接收能力:接收窗口
TCP拥塞管理策略
- TCP处理第一种拥塞的措施
在连接建立时声明最大可接受段长度;
利用可变滑动窗口协议防止出现拥塞; - TCP处理第二种拥塞的措施
发送端的主机在确定发送报文段的速率时,既要根据接收端的接收能力,又要从全局考虑不要使网络发生拥塞;
拥塞窗口依照慢启动(slow start)算法和拥塞避免(congestion avoidance)算法变化。
发送窗口的上限值
- 发送端的发送窗口的上限值应当取为接收端窗口
- rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确定:
发送窗口的上限值 = Min [rwnd, cwnd] - 当 rwnd < cwnd 时,是接收端的接收能力限制发送窗口的最大值。
- 当 cwnd < rwnd 时,则是网络的拥塞限制发送窗口的最大值。
慢启动算法(slow start)
- 连接建立时拥塞窗口(cwnd)初始值为该连接允许的最大段长,阈值(threshold)为64KB;
- Start with cwnd = 1
On each successful ACK increment cwnd: cwnd——cnwd + 1 - Exponential growth of cwnd in
each RTT: cwnd —— 2 x cwnd - Enter CA when cwnd >= ssthresh

拥塞避免算法 congestion avoidance
- 若拥塞窗口大于阈值,从此时开始,拥塞窗口线性增长,一个RTT周期增加一个最大段长,直至发生丢包超时事件;
- 当超时事件发生后,阈值设置为当前拥塞窗口大小的一半,拥塞窗口重新设置为一个最大段长;
- 执行慢启动算法。
慢开始和拥塞避免算法的实现举例
当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。
慢开始门限的初始值设置为 16 个报文段,即 ssthresh = 16。
发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。
在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。
发送端收到 ACK1 (确认 M0,期望收到 M1)后,将 cwnd 从 1 增大到 2,于是发送端可以接着发送 M1 和 M2 两个报文段。
接收端发回 ACK2 和 ACK3。发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1。现在发送端的 cwnd 从 2 增大到 4,并可发送 M4 ~ M6共 4个报文段。
发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输次数按指数规律增长。
当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。
假定拥塞窗口的数值增长到 24 时,网络出现超时(表明网络拥塞了)。
更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1,并执行慢开始算法。
当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。
乘法减小 (multiplicative decrease)
- “乘法减小“是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 ssthresh 设置为当前的拥塞窗口值乘以 0.5。
- 当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注入到网络中的分组数。
加法增大 (additive increase)
- “加法增大”是指执行拥塞避免算法后,当收到对所有报文段的确认就将拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。
Internet传输协议-TCP的更多相关文章
- 【计算机网络】-传输层-Internet传输协议-TCP
[计算机网络]-传输层-Internet传输协议-TCP TCP介绍 在不可靠的互联网上提供一个可靠的端到端字节流 面向连接的.可靠的.端到端的.基于字节流的传输协议 TCP位置 TCP服务模型 应用 ...
- Java 网络编程(二) 两类传输协议:TCP UDP
链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951841.html 两类传输协议:TCP,UDP TCP TCP是Transfer C ...
- 【计算机网络】-传输层-Internet传输协议-UDP
[计算机网络]-传输层-UDP 简介 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,UserDatagram Protocol) .UDP为应用程序提供了一-种无需 ...
- 传输层协议TCP和UDP
本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...
- RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议
RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...
- TCP/IP协议网络编程以及UDP和TCP之传输协议
1.什么是TCP/IP协议? 网络编程协议有很多,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal 传输控制协议/英特网 ...
- (传输层)TCP协议
目录 首部格式数据单位特定注意自动重传请求ARQ具体实现发送缓存接收缓存滑动窗口确认丢失和确认迟到超时重传时间选择报文段的发送时机运输连接发送TCP请求客户端拥塞处理相关概念避免拥塞具体实现TCP 的 ...
- TCP/IP详解学习笔记(11)-- TFTP:简单文本传输协议,BOOTP:引导程序协议
1.TFTP: TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,基于UD ...
- OSI模型第四层传输层--TCP协议
1.传输层2个协议tcp和udp 2.tcp的可靠性(挂号信). 面向链接的:类似寄挂号信,对方收到了并且能够确认.所以也是可靠的传输. 最大报文传输:两端可以协商传输报文大小.(协商一个报文的大小) ...
随机推荐
- TWebHttpRequest使用
TWebHttpRequest使用 TWebHttpRequest通过HTTP GET方法,向中间件REST API申请数据. procedure TForm1.WebButton1Click(Sen ...
- FAQ:如何提高编译速度?
问: 如何提高编译速度? 答: 减少一次需要编译的代码量,目前想到的有两种思路: 1:修改解决方案的属性配置,取消勾选不常修改的项目的“生成”复选框. 2:采用插件化的架构,每一个插件弄一个解决方案, ...
- 关于面试总结10-selenium中隐藏元素如何定位?(hidden、display: none)
前言 面试题:selenium中隐藏元素如何定位?这个是很多面试官喜欢问的一个题,如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了 但是吧~~~很多面试官自己都搞不清楚啥 ...
- Vector HashMap List 存取数据速度
数组大小:40000List_List:0.0045List :0.0818List_HashMap:0.0072HashMap :0.0517List_Vector:0.0037Vector :0. ...
- SharePoint 2016 站点注册工作流服务报错
前言 安装完SharePoint 2016工作流环境,本来以为万事大吉了,结果给站点注册的时候报错了.搜了很多文章,发现后面要加上-Force参数. 错误截图 使用的为站点注册工作流服务的PowerS ...
- 完全定制UITabBarViewController
完全定制UITabBarViewController 效果 源码 https://github.com/YouXianMing/iOS-Project-Examples 中的 TotalCusto ...
- 怎样把vector和string数据传给旧的C API
通常情况下.旧的C API使用数组合char*指针来进行数据交换而不是vector或string对象. 这种API还将存在非常长的一段时间,假设我们想有效地使用STL.我们就必须与它们和平共处. ...
- [国际A类会议] 2018最最最顶级的人工智能国际峰会汇总!CCF推荐!
copy from : http://www.sohu.com/a/201860341_99975651 如果今年的辉煌我们没有赶上,那么我们可以提前为明年的大会做准备.现在,AI脑力波小编就为大家 ...
- Asp.Net Mvc控制器重名问题整理
一.关于控制器重名问题 1.没有区域的时候控制器不能重名 2.有区域的时候,外部控制器和区域中的控制器重名,访问外部控制器异常,访问区域控制器正常. 3.区域和区域之间的控制器重名,互不影响.区域从某 ...
- Verilog 加法器和减法器(5)
前面二进制加法运算,我们并没有提操作数是有符号数,还是无符号数.其实前面的二进制加法对于有符号数和无符号数都成立.比如前面的8位二进制加法运算,第一张图我们选radix是unsigned,表示无符号加 ...