1.TCP 是面向连接的运输层协议。
2.每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP
连接只能是点对点的(一对一)。
3.TCP 提供可靠交付的服务。
4.TCP
提供全双工通信。
5,.TCP是面向字节流。
6.首部最低20个字节。
TCP可靠传输的工作原理:停止等待协议(确认重传机制)
1.无差错:
1>:无差错: A发送分组M1,发送就暂停发送,等待B的确认,B收到M1就向A发送确认,A收到对M1的确认后再发送下
一个分组
2>:出现差错:
A只要超过一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,就重传前面发过的分组,叫超时重传。由重传
计时器实现。
而且:(1)A每次发送分组必须暂时保留分组副本;(2)分组和确认分组必须进行编号‘(3)超时计时器的重传时间
应当比数据在分组的平均往返时间更多一些。
3>:如果B收到重复的分组M1,不想上一层交付;而且,向A发送确认。
2.超时重传:
停止等待协议的优点是简单,但是信道利用率太低了。解决方法是采用连续ARQ协议,发送方维持发送窗口,每次连续发送几个分组,接收方采用累积确认,对按序到达的最后一个分组发送确认。缺点是不能向发送方反映出接收方已经正确收到的所有分组信息,例如丢失中间的分组。
TCP可靠传输的实现:
TCP 连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口。TCP 的可靠传输机制用字节的序号进行控制。TCP
所有的确认都是基于序号而不是基于报文段。
发送过的数据未收到确认之前必须保留,以便超时重传时使用。发送窗口不动(没收到确认)和前移(收到新的确认)
发送缓存用来暂时存放: 发送应用程序传送给发送方 TCP 准备发送的数据;TCP 已发送出但尚未收到确认的数据。
接收缓存用来暂时存放:按序到达的、但尚未被接收应用程序读取的数据; 不按序到达的数据。
必须强调三点:
1> A 的发送窗口并不总是和 B 的接收窗口一样大(因为有一定的时间滞后)。
2> TCP 标准没有规定对不按序到达的数据应如何处理。通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到
后,再按序交付上层的应用进程。
3> TCP 要求接收方必须有累积确认的功能,这样可以减小传输开销
TCP流量控制:
流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。利用滑动窗口机制可以很方便地在
TCP 连接上实现流量控制。
TCP 为每一个连接设有一个持续计时器。只要 TCP 连接的一方收到对方的零窗口通知,就启动持续计时器,发送一个零窗口探测报文段。
TCP的拥塞控制:
在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion)。出现资源拥塞的条件:对资源需求的总和 > 可用资源。
开环控制方法就是在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。
闭环控制是基于反馈环路的概念。属于闭环控制的有以下几种措施:监测网络系统以便检测到拥塞在何时、何处发生。将拥塞发生的信息传送到可采取行动的地方。调整网络系统的运行以解决出现的问题。
拥塞控制方法:
1.慢开始:在主机刚刚开始发送报文段时可先将拥塞窗口 cwnd 设置为一个最大报文段 MSS 的数值。在每收到一个对新的报文段的确认后,将拥塞窗口增加至多一个
MSS 的数值。用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。每经过一个传输轮回,拥塞窗口(发送端)就加倍。
2.拥塞避免:让拥塞窗口缓慢增大,每经过一个往返时间就加1,而不是加倍,按线性规律缓慢增长。拥塞窗口大于慢开始门限,就执行拥塞避免算法。“乘法减小”:指不论在慢开始还是拥塞避免阶段,只要出现超时重传就把慢开始门限值减半。"加分增大“:指执行拥塞避免算法后,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。合起来叫AIMD算法。
3.快重传算法:发送方只要一连收到三个重复确认就应当重传对方尚未收到的报文。而不必等到该分组的重传计时器到期。
4.快恢复算法:(1)当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限
ssthresh 减半。但接下去不执行慢开始算法。(2)由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口
cwnd 现在不设置为 1,而是设置为慢开始门限 ssthresh 减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大.
TCP的运输建立:
采用客户服务器方式,主动发起建立的是客户,被动等待连接建立的应用进程是服务器。
1.A
的 TCP
向 B
发出连接请求报文段,其首部中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是
x。
2.B
的 TCP
收到连接请求报文段后,如同意,则发回确认。 B
在确认报文段中应使 SYN = 1,使 ACK = 1,其确认号ack
= x + 1,自己选择的序号 seq = y。
3.A
收到此报文段后向 B
给出确认,其 ACK = 1, 确认号
ack = y + 1。A
的 TCP
通知上层应用进程,连接已经建立。
4.B
的 TCP
收到主机 A
的确认后,也通知其上层应用进程:TCP
连接已经建立
TCP的连接释放
1.数据传输结束后,通信的双方都可释放连接。现在 A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。A 把连接释放报文段首部的 FIN = 1,其序号seq = u,等待 B 的确认。
2.B 发出确认,确认号 ack = u + 1,而这个报文段自己的序号 seq = v。TCP 服务器进程通知高层应用进程。从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状态。B 若发送数据,A 仍要接收。
3.若 B 已经没有要向 A 发送的数据, 其应用进程就通知 TCP 释放连接, B到
A 这个方向的连接也释放了。
4.A 收到连接释放报文段后,必须发出确认,在确认报文段中 ACK = 1,确认号 ack = w + 1,自己的序号 seq = u + 1
5.TCP 连接必须经过时间 2MSL 后才真正释放掉。因为:为了保证 A 发送的最后一个 ACK 报文段能够到达 B;防止“已失效的连接请求报文段”出现在本连接中。A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL(时间等待计时器),就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。
有机状态图:
图中有三种不同的箭头。粗实线箭头表示对客户进程的正常变迁。粗虚线箭头表示对服务器进程的正常变迁。另一种细线箭头表示异常变迁。