tcp协议详解

1.报文格式
在这里插入图片描述
2.tcp三次握手、数据传输、四次挥手过程(图片来源于网络,侵删)图片来源于网络,侵删
3.tcp状态机
在这里插入图片描述
4.滑动窗口机制(window)
在没有滑动窗口机制情况下,每发送一个报文就需要等待对方回复ACK后才会发送下一个tcp报文;但在有滑动窗口的机制下,在未收ACK确认报文前,只有发送报文的数据大小不超过滑动窗口大小时,就可以继续发送;当发送的数据包达到滑动窗口大小时,就需要等待ACK确认报文。接收端如果开启滑动窗口机制,只需要对连续的seq值得最大值报文回复ack即可;也用于解决网络拥塞问题。

4.tcp定时器
A. connection-establishment timer 建立连接等待时间(linux默认5s)
在syn-sent或syn-received ,未收到syn-ack或ack报文的超时时间;重新连接次数为:net.ipv4.tcp_syn_retries或net.ipv4.tcp_synack_retries

B. retransmission time 重传计时器(linux默认20s)
在发送数据后,在重传计时器结束前未收到接收端发送的ack确认报文。tcp重传次数为:net.ipv4.tcp_retries2

C. delayed ACK timer 延迟应答定时器
在数据传输过程中,在收到server发送的数据后,不立即发送ack应答,而是在计时器结束前没有收到server再次发送后续数据时才发送ack确认报文;需要注意:延迟应答计时器(捎带计时器)< 重传计时器 - 数据传输和处理延迟时间

D. keepalive timer 保活计时器
目的:避免在客户端与服务器建立连接后,出现长时间的空闲期,没有数据传输,此时可能客户端出现故障,但服务器该连接一直处于保活,浪费服务器资源。
原理:在保活时间结束后,服务器每个一个周期keepalive_intvl向客户端发送tcp探测报文,总共发送tcp_keepalive_probes次。

E. FIN_WAIT_2 timer
主动关闭端发送FIN报文,且收到ACK报文后,在FIN_WAIT_2 timer计时器结束前未收到对方发送的后续报文,则关闭TCP连接。避免对方或网络出现故障,导致主动关闭方一直处于FIN_WAIT_2状态。

F. TIME_WAIT timer(2MSL timer)
主动关闭方在发送最后一个ACK后不会立即进入CLOSE状态,而时进入TIME_WAIT状态。因为对方可能没有收到ACK,需要在2MLS周期内,等待被动关闭方重新发送FIN报文,主动关闭方回复最后一个ACK;且在2MSL周期内之前的端口(源端口)不能被使用,避免新建的连接与之前建立连接迟到的报文冲突,且在任何迟到的报文会被丢弃。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值