【计算机网络】TCP-2

TCP连接管理

建立的是虚连接(抽象出来的连接),不是物理连接

unix 为例

// SOCK_STREAM标志为TCP
SOCKET* socket = socket(AF_INTF, SOCK_STREAM);
// connect、bind...

连接建立的过程

第一步

客户端发送SYN置1,seq=client_isn(随机产生的序号)。
无数据消耗序号

第二步

服务端返回一个SYN置1,seq=server_isn(随机产生序号),ack=client_isn + 1(期望接受的下一个byte的序号)
无数据,消耗序号。

第三步

客户端发送SYN置0,seq=client_isn + 1,ack=server_isn + 1(期望服务器发给下一个byte的序号)。
可以包含数据,不消耗序号

连接关闭

第一步

客户端发送FIN置1的包,seq=x

第二步

服务器发送1个ACK置1,seq=x + 1的确认包,服务器关闭连接,并发送FIN=1,seq=y包。

第三步

客户端收到FIN,回复ACK=y+1。

端口探测

TCP,发送包端口不存在地址不存在,发送RST。
UDP,ICMP。

如何知道端口上有进程占用:可以使用nmap

三个标志位的意义

SYN: 初始化一个TCP连接。

FIN:client或者server关闭TCP连接。

RST:端口上没有进程监听。

拥塞控制

congestion: 拥塞(top 10 problem)

拥塞表现:

  • 很长的延时。(数据包在节点排队)
  • 丢包。(缓存溢出)

流程控制:端到端的控制,接收方的缓冲区没有额外空间。
拥塞控制:整个网络的带宽不足,指网络上的router。

三种场景

无重传、无流控、无拥控

output link capacity: R
original data: λ i n \lambda_{in} λin
through put: λ o u t \lambda_{out} λout

最大的预计输出量: R 2 \frac {R} {2} 2R

发生拥塞的预计输出量: l i m λ i n → ∞ = R 2 lim_{\lambda_{in} \to \infin} = \frac {R} {2} limλin=2R

存在重传

重传数据 + 原始数据: λ i n ′ \lambda_{in}' λin

理想情况: λ i n = λ i n ′ \lambda_{in} = \lambda_{in}' λin=λin λ i n ′ = λ o u t \lambda_{in}' = \lambda_{out} λin=λout

分组迟到(冗余情况)

假设每个分组都发送了2次, λ i n ′ = R 2 \lambda_{in}' = \frac {R} {2} λin=2R λ o u t = R 4 \lambda_{out} = \frac {R} {4} λout=4R

有两个主机共享一个router

router中存在两个输入两个输出:

  • 主机一: λ i n 1 , λ o u t 1 \lambda_{in_1}, \lambda_{out_1} λin1,λout1
  • 主机二: λ i n 2 , λ o u t 2 \lambda_{in_2},\lambda_{out_2} λin2,λout2

λ i n 1 → ∞ \lambda_{in_1} \to \infin λin1 λ o u t 2 → 0 \lambda_{out_2} \to 0 λout20

控制方法

  • 端到端的拥塞控制(没有明确的反馈)
  • 基于网络的拥塞控制(有直接反馈信息)

基于网络的拥塞控制

当网络中的router发生拥塞时,这个router直接会反馈给发送方**“I am congested!”**

到达端后也会反馈给发送方。

ATM—异步传输网络

Asynchronous Transfer Mode,面向虚电路的方式处理包交换。

ABR:available bit rate。

分组固定53bytes。

RM cells

RM cells: 资源管理信元,发送方产生,一定比例夹杂在数据信元中。

  • NI bit: 不是很大的拥塞。
  • CI bit: 较大拥塞。

两个bytes的ER(explicit rate 显示速率),表示发送方可以支持的最大速率。

one-bit EFCI(显示转发拥塞指示)in data cells(CI bit will be put)

TCP的拥塞控制

端到端的拥塞控制,基于IP层不支持基于网络的拥塞控制。

没感知到拥塞,适当增加发送速率。
感知到拥塞就适当降低。

如何限制发送速度

定义cwnd为拥塞窗口。

L a s t B y t e S e n t − L a s t B y t e A c k e d ≤ c w n d LastByteSent - LastByteAcked \leq cwnd LastByteSentLastByteAckedcwnd

发送方发送的数据量 λ = m i n ( c w n d , r w n d ) \lambda = min(cwnd, rwnd) λ=min(cwnd,rwnd)

cwnd是动态的,由判断拥塞的函数随时改变。

速率: r a t e = c w n d R T T rate = \frac {cwnd} {RTT} rate=RTTcwnd bytes/sec

如何判断网络拥塞

  • 丢包
    • 发送方收到三个冗余确认认为丢包
    • 超时

TCP时自记时,收到确认,窗口会扩大。

何种算法改变发送速率

有以下三种规则:

  • 丢包指示拥塞(lost)
  • 应答指示无拥塞(ACK)
  • 试探性感知带宽:适当增加速率,直到产生丢包事件。

TCP拥塞控制方法

慢启动

特点:从一个很小的cwnd开始,指数级增加发送速率,直到产生丢包事件。

最开始:cwnd =1 MSS

过程:每一轮(一个RTT)增加一倍的报文段数量。
each ACK recieved,cwnd = cwnd + 1 (MSS)

何时结束

  • 丢包事件, s s t h r e s h = c w n d 2 ssthresh = \frac {cwnd} {2} ssthresh=2cwnd,cwnd = 1 (MSS)开始消耗网络中的拥塞,回到慢启动的状态。
  • 当window达到 s s t h r e s h ssthresh ssthresh时,进入拥塞避免状态
  • 收到三个冗余ACK, s s t h r e s h = c w n d 2 ssthresh = \frac {cwnd} {2} ssthresh=2cwnd c w n d = s s t h r e s h + 3 ( M S S ) cwnd = ssthresh + 3 (MSS) cwnd=ssthresh+3(MSS),开始快速重传和快速回复。

拥塞避免状态

一轮(1 RTT)增长1 MSS,cwnd增涨 M S S 2 c w n d \frac {MSS^2} {cwnd} cwndMSS2

  • 丢包
    • s s t h r e s h = c w n d 2 ssthresh = \frac {cwnd} {2} ssthresh=2cwnd
    • c w n d = 1 cwnd = 1 cwnd=1 (MSS)
    • 开始慢启动
快速重传

当发生冗余ACK,立即重新传送这个包。

快速回复

每收到一个冗余ACK,cwnd增加一个MSS。

以下两种情况:

  • 超时
    • s s t h r e s h = c w n d 2 ssthresh = \frac {cwnd} {2} ssthresh=2cwnd
    • c w n d = 1 cwnd = 1 cwnd=1 (MSS)
    • 开始慢启动
  • 新的ACK(说明快速重传已经到达接收方)(每产生拥塞)
    • c w n d = s s t h r e s h cwnd = ssthresh cwnd=ssthresh
    • 降低cwnd后进入拥塞避免状态

3个冗余ACK,一般使用的标准(Reno):

s s t h r e t h = c w n d 2 c w n d = s s t h r e t h + 3 M S S ssthreth = \frac {cwnd} {2} \\ cwnd = ssthreth + 3 MSS ssthreth=2cwndcwnd=ssthreth+3MSS
拥塞控制总结

TCP—“long, fat pipes”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值