Tcp常用知识点归纳

来源:互联网 发布:js localhost 服务器 编辑:程序博客网 时间:2024/06/11 10:00

http://blog.csdn.net/lostyears/article/details/7104349 。此篇博客中详细讲解了TCP连接和断开方式 和其中存在的一些问题。我在此简要整理一遍。

一.TCP连接

 TCP连接基于三次握手,使得客户端和服务器都进入数据发送就绪状态。其与UDP同为传输层协议。

1. 客户端先服务器发送一个包。包结构主要为: 发送序列(假设为200),同步标识(SYN=1)。然后进入等待状态,等待服务器的确认帧

2. 服务器收到客户端的包后向客户端发送确认包。包结构为:发送序列(假设为500),确认序列201(客户端发送序列+1), 同步标识(SYN=1), 确认标识(ACK=1)。然后进入等待状态,等待客户端的确认帧。

3. 客户端收到服务器的确认包后,向服务器回复确认包:确认序号501(服务器发送序号+1),确认标识(ACK=1)

三次握手完毕后服务器和客户端变为连接established状态可以开始发送数据。


相关问题:

(1). 为什么要采用3次而不采用2次

    因为服务器和客户端要对初始序列进行协商。而二次握手容易产生死锁:客户端向服务器发送包后,服务器向客户端返回确认帧并直接进入数据发送状态。 如果服务器的确认帧丢失了,则客户端一直等待确认帧而忽略服务器发来的数据,而服务器由于数据未收到确认帧一直进行超时重传,从而产生了死锁。


二.TCP断开

    TCP断开采用4次握手,先保证双方都不再发送数据,然后才进入close状态

1. 客户端先向服务器发送FIN包(表示数据发送终止) 包结构为: 发送序列200, 确认序列500,两个标识ACK=1, FIN=1。 然后等待接受确认帧,此时客户端仍然可以接受服务器的数据。

2. 服务器接受到FIN包后,先向服务器发送确认帧:发送序列500, 确认序列201,确认标识ACK=1. 此时如果服务器还有数据发送,则可以继续发送数据。

3. 服务器数据发送完毕后向客户端发送FIN包: 发送序列501,ACK=1, FIN=1。然后等待客户端的确认帧。

4. 客户端收到服务器的FIN包后向服务器发送确认帧:发送序列201,ACK=1。客户端等待2倍的最大网络延迟(2msl)后关闭。


相关问题

(1) 断开为什么要采用4次握手

    因为断开的时候服务器可能仍然有数据要发送,所以不能在发送确认帧的同时发送FIN包。

(2) 客户端发送完确认帧后为什么要等待2msl

    因为客户端发送的确认帧可能在网络中丢失,所以预留一点时间进行超时重传。


三. TCP拥塞机制

http://blog.csdn.net/sicofield/article/details/9708383 此篇博客中详细讲解了TCP的拥塞机制 和其中存在的一些问题。我在此简要整理一遍。

1. 拥塞的定义

    计算机网络中的带宽,交换节点中的缓存处理机等都是网络的资源,在某一段时间内,网络中对某一资源的请求超过了该资源可用部分从而网络性能变坏称为拥塞。


2. 慢开始

    发送方维持一个拥塞窗口,拥塞窗口的大小由小到大自动增长,发送窗口的大小小于等于拥塞窗口(考虑到接受方的接受能力)

    慢开始算法:一开始将拥塞窗口设置为一个很小的值,每发送数据收到一次确认帧后就增加拥塞窗口大小,增加值为收到确认帧的个数。所以其正则是指数型的。


3. 拥塞避免

    为了防止拥塞窗口过大,设置一个正则门限值ssthresh, 当窗口小于门限值时使用慢开始算法,当大于门限值时使用拥塞避免算法。

    拥塞避免算法:每当经过一个往返时间RRT就将拥塞窗口加1而不是加倍。所以窗口增长缓慢。


无论是慢开始阶段还是拥塞避免阶段,只要判断为网络拥塞(没有收到确认报文)就将门限值设置为发送窗口大小的一般,然后拥塞窗口大小重置为开始时候的字节.。


3. 快重传

    发送方只要一收到三个重复确认,就直接重传对方未收到的报文段,而不必等待设置的重传计时器到期。 客户端收到一个失序的报文后立即发送回一个重传确认报文。


4. 快恢复

    当发送方收到三个重复确认时,就执行乘法减小算法,将ssthresh减小为一半,但是并不执行慢开始算法,而将拥塞窗口设置为阈值的大小,然后执行拥塞避免算法。


路由器的丢弃策略对拥塞的影响

    路由器采用先进先出的方式转发分组,当路由器缓存装不下新到来的分组时候就丢弃分组,使得许多的TCP连接进入拥塞,从而启动慢开始算法,使得网络通信量突然降低许多,而网络恢复后又突然增加许多。这称为全局同步。


随机检测RED算法

    路由器设定一个队列的最小门限 和 最大门限 并计算队列的长度。

 1.如果新来的分组使得队列长度小于最小门限则直接加入到队列中

 2. 如果大于最小门限,小于最大门限则队列中以某一概率将此分组丢弃。

 3. 如果大于最大门限,则直接丢弃。

此算法使得网络中报文数据增长变得平缓,从而增加了网络通信量。




0 0
原创粉丝点击