一、概述 1、点对点:一个是发送方,一个是接收方 2、使用可靠的、按顺序的字节流传输,但是传输的报文段发送方与接收方可能不一致,没有报文边界 3、管道化(流水线):TCP拥塞控制和流量控制设置窗口大小 4、 (1)全双工数据:在同一连接数据流双向流动 (2)MSS:最大报文段 (3)MTU:最大传输单元(以太网:150字节) 在传输的报文中,会根据MSS分为若干个报文段,也就是若干个MSS,然后加上应用层的TCP头部传输到传输层,加上IP的头部,大小刚好是MTU 5、面向连接:在数据交换之前,通过握手(交换控制报文)初始化发送方、接收方的状态变量 6、有流量控制:发送方不会淹没接收方,会根据传输链路以及接收方的最大传输带宽控制传输速率
二、TCP报文段结构 1、序号:报文段首字节在字节流中的编号 2、确认号:期望从另一方收到的下一字节的序号 3、累计确认 4、接收方如何处理乱序?报文段没有规定 5、例子 三、如何设置TCP的往返延时(RTT)和超时计时器? 1、每个报文段的往返时间都是不一样的,时间设置太短,太早就超时,会引起不必要的重传,时间太长,对报文段的反应太慢,消极。 所以引出SimpleRTT ,SimpleRTT是测量从报文段发出到确认的时间,如果有重传,则忽略此次测量,然后对最近几次测量时间求平均 EstimatedRTT = (1-a)* EstimateedRTT + a * SampleRTT a:平均值SampleRTT的贡献值 超时时间相差的越大,平均值也就越大 2、超时设置 EstimatedRTT + 安全边界时间
四、TCP的可靠数据传输 1、TCP是流水线协议 ,是GBK和SR的混合体
2、TCP是在IP不可靠服务的基础上建立了rdt,设置了管道化的报文段,即发送方一次可以发送一个或多个分组
3、为什么说TCP是是GBK和SR的混合体? TCP建立了rdt,设置了管道化的报文段,超时定时器只设置了一个,且为累计确认(每次只传送一个),但是超时需要重传时,不需要将其他分组进行重传,只需要传输未确认的段
4、TCP简化版 :忽略的重复的确认,忽略了流量控制和拥塞控制 (1)发送方: a.只传送具有最小序号的未确认段,而不是全部重传 b.用nextsep创建报文段,序号nextsep为报文段首字节的字节流编号 c.定时器与最早未确认的报文段关联(过期间隔:TimeOutInterval) d.超时:重传后沿最老的报文段,并且重启定时器 e.收到未确认的报文段的确认(ACK):更新已被确认的序号,若还有未被确认的报文段,则重启定时器
接收方是累计确认,而且返回ACK字节是给予期待,也就是返回的是接收方未收到的最前沿报文段
5、快速重传 :发送方发送了报文段n后,返回ACKn+1,然后发送方发送了报文段n+1丢失了,丢失了之后同时又有其他报文段到接收方,而超时定时器还没开始倒计时,每段报文段都会返回ACKn+1,而发送方收到接收方的返回信息后,立刻传输了ACKn+1,而不是等到超时定时器触发超时重传,这种称为快速重传
五、TCP的流量控制 1、目的:防止发送方发送得太快,超过接收方的处理能力,太快以至于让接收方缓冲区溢出 2、如何控制:通过捎带,从数据的角度上,任何一方即是发送方又是接收方,接收方在收到报文段后需要返回ACK,然后又需要向发送方发送报文段,这时候将ACK及缓冲区大小附在报文段上告诉发送方,来做流量控制,这叫piggybacking 技术 3、缓冲区剩余大小 RcvWindow = RcvBuffer-[LastByteRcvd-LastByteRead]
六、TCP连接管理 1、在正式交换数据之前,发送方和接收方 握手 建立通信关系; 2、需要握手几次?两次行不行? (1)两次握手就意味着: ‘’’ A:嘿,准备好了吗 B:好了,来吧 ‘’’ 问题 : 这样子会造成什么? a.虚假连接 :假如A连接请求发送之后,B的同意连接信息没有丢失,但是已经造成超时,这时候A是不是会重新发一个请求,而在这个时候这个新的请求建立成功,在它们之间通信结束之后,这个超时的连接请求到达B,跟B请求连接,那B肯定会跟它建立连接,这时候就造成了 虚假连接 。 b.旧数据被当成新数据 :与上面类似,在第一次连接建立的时候,B的同意连接,这个同意连接滞留在传输过程中,然后发送了新的连接,连接建立成功之后,双方开始通信,A发送了报文段滞留在传输过程中,然后造成超时,A再次发送,双方都没有出现问题,愉快的通信,最后愉快的结束了通信。但是还有滞留的连接呀,这时候滞留的连接终于到了B方,B方同意连接建立之后,滞留的报文段又到达,这时候旧的数据便被当成新数据接收了.
问题 :需要几次握手? 答案 :三次 问题 :四次握手是什么? 答案 :其实就是将三次握手拆为两次,应该说是本来就是两次,但是前面说过piggybacking 技术,将回应与建立连接一起发送,那就是将上面三次握手:SYNbit=1,Seq=y,ACKbit=1,ACKnum=x+1分为:ACKbit=1,ACLnum=x+1和连接请求SYNbit=1,Seq=y。
七、关闭连接 1、客户端、服务器分别关闭它自己这一侧的连接,发送FIN bit = 1的TCP段 ,接收到用ACK回应,接到FIN,可以将自己的FIN同ACK一起发送 2、可以同时处理FIN交换 这是大概其的连接释放,TCP的连接释放并不完美
|