tcp一些要点

三次握手建立

1、客户端向服务端发送syn。
2、服务端向客户端回复syn+ack。
3、客户端向服务端确认ack。
 
建立链接的阶段, 客户端/服务端会确认mss(maximum segment size)。
客户端发送mssA,服务器响应mssB。二者之间小的那个作为MSS。
建立的过程一边确认RTT
 

四次挥手断开

1、客户端向服务端发送fin。
2、服务端向客户端回复ack。
3、服务端关闭连接,并且发送fin给客户端。
4、客户端向服务端发送ack确认。
 
 

TCP传输要点

 
tcp是被设计为有状态的,有连接的通讯协议。
保证可靠性传输:校验和、序列号、确认应答、重发控制、连接管理、窗口控制等。
 
先假设是有源头、目标这2个点。
 
1、通过序列号与应答确保可靠性。
目标需要一定时间段内,响应需要的结果给源头。否则重发。(源头重发次数也不能太多,否则目标受不了^_^)
需要的结果用序号标记了。
 
2、重发控制——RTT(round trip time)
重发超时是指:重发数据之前,会等待的一段时间。
每次数据包往返,都会计算往返时间(RTT)
达到一定次数的重发,即表示异常。不再重发。
 
3、连接管理。
TCP是有连接的。数据传输之前做了通信两端的工作。3次握手建立,4次挥手断开。
建立:
源头请求syn
目标响应syn+ack
源头针对目标的syn响应ack。
断开:
源头请求fin
目标响应ack
目标向源头发出fin
源头响应ack
 
4、段、缓冲区、滑动窗口概念
是TCP传输的最小单位。建立TCP链接,3次握手的时候,双方确认发送数据包的大小,MSS。(max segment size)
 
(发送一个段就回复, 这样子太慢)以“窗口”大小表示无需等待应答就可以继续发送的数量。
在缓冲区中存放窗口数量的(假设窗口大小4。序号是1,2,3,4),这些都发出去了,根据响应可以得知哪一些段需要重发。(假设3的应答有了即使没有1、2的应答,那么只需要重传4)这就是滑动窗口
 
为了避免负荷过高。流量控制的机制,控制窗口大小。发送端不会发送大于窗口大小。发送端过了超时时间,则发送一个窗口探测的包。如果探测到接收端缓冲区满了(窗口放满),响应窗口需要调整。
 
5、拥塞控制
slow-start threshold(ssthresh):慢启动门限。
congestion-window (cwnd):拥塞控制窗口。
 
5.1慢启动
避免网络拥塞。
发送方在慢启动的基础上。有一个拥塞控制窗口(cwnd)。经过一个RTT,cwnd以2的次方变大,变大直到内核定义的ssthresh值为止。
 
5.2拥塞避免
 
减少网络拥塞。
当出现网络拥塞,比如丢包时,将SSTHRESH设为原先的一半,然后将cwnd设为1,执行慢开始算法。
 
5.3快重传
 
一旦接收方发现数据丢失,就对该丢失的包做重传请求;
发送方收到3次该包的重传请求,则重传该包;
ssthresh 值减半;
cwnd设置为减半后的ssthresh 值;
执行拥塞避免算法。
 
 
*1. cwnd < ssthresh, 继续使用慢开始算法;
*2. cwnd > ssthresh,停止使用慢开始算法,改用拥塞避免算法;
*3. cwnd = ssthresh,既可以使用慢开始算法,也可以使用拥塞避免算法;

 

TCP定时器&定时器的作用

重传计时器:Retransmission Timer
超时则重传

 
坚持计时器:Persistent Timer
零窗口通知

 
保活计时器:Keeplive Timer
服务器收到请求,则复位这个timmer(通常2个小时)
若服务器超过2小时还没有收到来自客户的信息,就发送探测报文段,若发送了10个探测报文段(没75秒发送一个)还没收到响应,则终止连接
 
 
时间等待计时器:Time_Wait Timer
处理重复fin请求。
 

TCP首部

SYN 表示建立连接,

FIN 表示关闭连接,

ACK 表示响应,

PSH 表示有 DATA数据传输,

RST 表示连接重置。

 
 
PS:RST出现表明网络不通、不太好。
TCP DUP xxx  传输的时候缺少了xxx
 
tcp协议是在ip协议之上的,所以tcp协议有端口,没有ip是说得过去的。

参考资料

滑动窗口协议
关键词:拥塞控制、滑动窗口、CWND、SSTHRESH
 
 
重传(tcp retransmission)
参考:
 
wiki的慢启动:
 
tcp定时器:
 
三次握手 四次挥手:
首部:

posted on 2015-06-03 21:14  Emmerich.Luang  阅读(472)  评论(0编辑  收藏  举报

导航