传输层协议

TCP

 

 

 

TCP是一种面向连接的传输层协议,可提供可靠的传输服务

UDP是一种面像无连接的传输层协议,提供不可靠的传输服务

TCP端口号

 

知名端口号:0-1024 已经被服务占用的端口号

PC使用的端口号 1025-65535

TCP头部

TCP连接的建立

1、SYN 表明想和对面建立TCP连接

1、seq(序列号) 建立可靠连接

2、SYN,ACK 通过seq a+1表示收到你想要和我建立连接的消息

2、通过序列号b,表明我也想和你建立连接

3、seq为对方的ack,我的ack为对方的seq+1表明完成TCP建立

三次握手超时机制

SYN第一次发送等待2^0=1s,没有收到ACK重传

SYN第一次发送等待2^1=2s,没有收到ACK重传

SYN第一次发送等待2^2=4s,没有收到ACK重传

SYN第一次发送等待2^3=8s,没有收到ACK重传

SYN第一次发送等待2^4=16s,没有收到ACK重传

SYN第一次发送等待2^5=32s,没有收到ACK重传

SYN第一次发送等待2^6=64s,没有收到ACK重传

尝试7次,一共127s,建立TCP失败,从头开始建立

TCP连接的拆除

 

 

FIN 我想和你关闭TCP连接,发送序列号seq=p给主机B(如果带ACK表示确认数据传输完成),主机B收到主机A的seq后,发送ack给主机A做确认并且发送序列号q给主机A,主机A收到序列号q之后发送ack给主机B,并且关闭TCP连接,主机B收到A的ACK后也关闭TCP连接。

TCP传输确认

 

 

 

 

TCP采用窗口传输机制来传输数据;窗口传输机制会自动协商一次性传输多少字节之后来进行确认。比如主机A传输8192子节的数据给主机B,这时候窗口传输机制通过算法算出一次性传4096个数据给主机B之后进行确认。第一个数据的序列号(seq)是三次握手中最后一次握手的序列号。之后的序列号(seq)都是上一个len+seq。第一个窗口4096子节传输完毕之后,主机B会给主机A发送一个确认ack=最后一个数据的seq+len。第一个窗口传输完毕之后,会进行第二个窗口传输,第一个数据的序列号是上一个ACK的值,之后就是以此类推。

TCP超时重传

 

 

 

 

 

1、如果DATA(seq=1025,len=1024)数据丢失,主机B就会发送ACK=1025给主机A,主机A等待一个RTO时间,如果还未收到正常的ACK计时器超时就会重传。

2、最后一个数据包为结束的标致,如果主机B没收到最后一个数据包,主机B不会发送ACK消息,主机A等待一个RTO(重传超时)时间,如果还没收到RTB的ACK消息,则会重新传输数据。如果第一次重传失败,接下来的重传时间为2^1*RTO,第三次重传时间为2^2*RTO,一般重传三次;如果重传三次都失败,TCP就会重新三次握手建立连接。

3、如果重传数据段之后,又收到了之前丢失的数据段(收到重复的数据段)。如果该数据段未被上层协议处理,后面的收到的数据段覆盖前面的数据段。如果数据段已经被上层协议处理,丢弃后面的数据段。

Windows最多重传5次

Linux最多重传15次

RTO(重传超时)=RTT+4*RTT

RTT(往返时延)=传播时间(往返链路的时间)+排队时间(路由器、交换机等待处理数据的时间)+数据处理时间(应用,封装)

 

TCP轻微失序&TCP严重失序

 

 

轻微失序

数据段在传输过程中会出现阻塞情况,图中(seq=4,len=10)数据段出现阻塞,下面的数据提前发给对面,这时被发送方会回复发送方一个阻塞数据段的ACK,如果说阻塞的那个数据段恢复了正常,被发送方会发送正常的ACK。如果阻塞的数据段迟迟没有发送,超过了超时时间,发送方就会超时重传。

严重失序

数据段在传输过程中会出现阻塞情况,图中(seq=4,len=10)数据段出现阻塞,下面的数据提前发给对面,这时被发送方会回复发送方一个阻塞数据段的ACK,此时收到3个重复的ACK,如果重复的ACK出现3次以内,直接忽略。达到三次,称之为严重失序,出发TCP快速重传机制,如果说阻塞的那个数据段恢复了正常,被发送方会发送正常的ACK。

快速重传机制:停止发送即将发送的数据段,只发送丢失的数据段。

UDP

 

 

UDP头部

 

 

UDP传输过程

  • UDP不提供重传机制,占用资源小,处理效率高
  •   一些时延敏感流量,如语音,视频等,通常使用UDP作为传输层协议
posted @ 2021-02-24 13:50  chen_hao0501  阅读(142)  评论(0编辑  收藏  举报