tcp概述
1点对点,只有一个发送方,一个接收方。
2可靠的,按序的字节流
3流水线的机制:TCP拥塞控制和流量控制机制,设置窗口尺寸.缓存在接收方和发送方都有
4全双工
5面向连接:通信双方在发数据之前必须建立连接
连接状态猪在连接的两端中维护,沿途节点并不维护
6拥塞控制
TCP段结构
序列号指的是segment中第一个字节的编号,而不是segment的编号,不是几个的个数。建立TCp连接的时候,双方随机选择序列号
ACKs是希望接收到的下一个字节的序列号,tcp当中的ACK是累积确认机制,GBN是累计确认。这个序列号之前的所有字节均已被正确接收到了。
接收方如何处理路按序到达的segment?
TCP中没有规定,自行做出决策
TCP可靠数据传输
如何合理的设置定时器的超时时间:
大于RTT,但是RTT是个变量根据网络情况。管段,不必要的重传,过长,对于段丢失时间反应慢。
如何估计RTT:
进行测量,SampleRTT:测量从段发出去到收到ACK的时间。测量多个SampleRTT,求平均值,形成估计值,指数加权移动平均。
TCP发送方事件
创建segment,序列号是segment第一个字节的编号,开启计时器设置超时时间TimeOutInterval。
超市会重传引起超时的Segment,重启定时器。
收到ACk,如果确认此前未确认的Segment,更新sendbase,如果窗口中海鸥未被确认的分组,重新启动定时器。tcp里面使用一个定时器。
主机发了一个段,序号92
,8字节数据。B发送一个确认ACK100,丢了,timeout事件触发,重传,第二次收到了,发送了ACK100也收到了,主机更新序列号100
主机发了92编号,第二次编号100。接收方发送ACK。92段超时。。。。真滴烦。。
快速重传机制
由于流水线机制,发送方会重复发那个丢的ACK
TCP流量控制机制
接收方为TCP连接分配buffer
上层应用可能处理buffer中数据的速度较慢。控制发送方,不要传输的太多,以至于淹没接收方(buffer溢出)
本质上就是一种速度匹配的机制