TCP 协议

T'CP协议----传输控制协议,面向链接的可靠传输协议

特点:

  • 面向链接的虚传输层协议
  • 每一条 tcp建立只能有两个端点,每一条 tcp只能是点对点

全双工通信---同一时间同时收发信息,通信双方设有缓存,用来存储数据

        缓存:

                发送方:将要发送的信息

                              已发送但未收到确认的信息

                接收方:还未被处理的信息

                               无序信息

  • 面向字节流:整个tcp协议中都是对字节的处理,协议中对所有数据都当做是一系列字节来处理

tcp报文

                          

                                        源端口                                        目标端口

                                                                序列号

                                                              确认序列号

   头部长度  服务质量   urg紧急位   psh推送位   syn链接请求  fin断开请求  ret复位  窗口大小

                                       tcp校验                                        指针

                                                                选项

                                                                数据

urg:置为1,表示该字节需要紧急发送,将不在等待率先发送

psh:置为1,若发送端收到的tcp报文包含psh,立即将缓冲区内所有数据推送给应用进程

rst:置为1,表明tcp链接出现严重错误,立即将链接断开

校验和:检验首部和数据两部分

指针:urg置为1时才有意义

可靠性(四种机制):

  • 流控:滑动窗口,缓冲区内有空余时,剩余数据依次填充,类似于一个窗口向后滑动

窗口值大小:在tcp建立时双方设置一个缓冲区,窗口值大小等于缓冲区,之后在每次确认报文内告知对方缓冲区剩余大小

d650fa81dc564db1ac3c95d9ff03ccd9.webp

  • 排序:根据序号排序
  • 确认:累积确认,发送方通过发送一段报文,接收方一次性确认
  • 重传:在累积确认中,某个数据接收失败,发送发会重传所有未被确认的数据。为提高通信效率,会修改确认机制---选择确认,接收方在回复确认报文时会在选项字段添加未收到的数据,发送方根据确认报文选择发送
  • 重传超时:当时间超过RTO未收到确认报文时,发送端会重新发送,当发送完第二个报文后在归定RTO时间还未收到确认报文,相应的RTO时间会加倍

RTT:往返时间,发送方将数据发送后到接收确认报文所用时间

RTO:超时重传时间,略大于 RTT,动态变化过程,会进行超时间隔加倍

f89f595586b94ea889193e436e96614a.png

  • 快速重传:某段时间因网络拥堵导致RTT,RTO过大,之后网络恢复,实际RTO小于之前RTO,但依据RTO时间未到,发送方不会发送数据。因此接收方会主动请求数据,当发送方收到3个ack报文(冗余ack),会立即发送数据

面向连接:

连接建立:

  1. 套接字--------源ip,源mac/目标ip,目标mac
  2. 参数协商-----mss,窗口大小,确认机制。。。。。
  3. 资源分配
  • 三次握手:

797583d97bb74e4c92a4ca5c736be4b8.jpeg

  1.  最初两设备处于closed状态,A先向B发送链接请求,因此A主动打开链接,B为被动打开链接
  2. B首先创建TCB传输控制块,并处于listen(收听状态)
  3. A创建TCB传输控制块,并向B发送链接请求报文,SYN置为1,选则一个初始序列号x,A进入SYN-SENT(同步已发送)状态。当SYN为1时,该报文不能携带数据,但要消耗一个序列号
  4. B收到SYN报文后,如果同意建立链接,则回复确认。回复报文中SYN和ACK都置为1,并随机选择一个序列号y,ack为x+1,同样不携带数据,B进入SYN-RECVD(同步已接收)状态
  5. A收到确认后还要向B发送确认,ACK=1,ack=y+1,seq=x+1,可以携带数据。如果不携带数据,则不消耗序列号,那么下一个数据段报文序号仍是x+1,链接建立,A进入ESTABLISHED(链接已建立)状态
  6. B收到A的确认后,进入ESTABLISHED(链接已建立)状态

TCB:存储tcp链接表,指向收发双方缓存指针,指向重传队列的指针,接受和发送序号。。。

最后A为什么还要向B确认:

如果因网络堵塞导致A发送的SYN报文段滞留,在连接释放后才到达B,B则会认为A又再一次想要建立连接,B会一直等待A发送的数据,但A并不会理睬B,导致资源浪费。在三次握手中,B未收到A的确认,所以连接不会建立

  • 四次断开:

89c28273c7294f998ba1df3432641b07.webp

  1. A首先向tcp发送tcp释放连接,FIN=1,seq=u(前面已传送的数据的最后一个字节加1),可以携带数据,即使不携带数据,此报文也消耗一个序列号。A进入FIN-WAIT-1(终止等待1)状态
  2. B收到A的报文后,向A发送确认,seq=v(B之前传送的最后一个数据加1)ack=u+1,B进入CLOSE-WAIT(关闭等待)状态。此时整个tcp进程中,A对B的连接以关闭,但B对A仍有数据需要传送,整个tcp处于half-close(半关闭)状态
  3. A收到B的确认报文后,进入TIME-WAIT-2(终止等待2)状态,等待B向A发送的断开请求
  4. B向A,发送断开请求,FIN=1,ACK=1,seq=w(可能有数据传送),ack=u+1,B进入LAST-ACK(最后确认)状态。
  5. A向B发送最后确认,ACK=1,ack=w+1,aeq=u+1。此时tcp连接还未释放,必须经过时间等待计时器(TINE-WAIT  timer)设置的2MSL后,A进入closed状态
  6. 当A撤销相应的TCB后,tcp连接断开

MSL最长报文段寿命,MSL=2min

  • 保活计时器:接收方每收到发送方发送的数据,就会启动一次保活计时器,每75s发送一次报文,确认发送方是否存在问题,用来选择还需不需要维持链接,如果连续发送10次都未得到应答,则接收方会认为发送方出现异常,终止连接。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值