TCP传输控制协议-个人总结

TCP介绍

TCP(Transmission Control Protocol)传输控制协议:属于传输层协议,是一种基于IP的协议,TCP提供一种面向连接可靠字节流服务;

TCP三次握手

Client Server SYN X SYN-Send SYN Y,ACK X+1 SYN-Rcvd ACK Y+1 Estalished Estalished Client Server
  1. 第一次握手客户(Client)主动(Active Open)去连接服务端(Server),发送SYN=1,序列号为X。服务端为被动打开(Passive Open);
  2. 第二次握手服务端收到该SYN请求后,会发送一个SYN=1,序列号为Y,同时附上对客户的回应ACK,序列号为客户的SYN序列号+1;
  3. 第三次握手客户收到服务端的SYN后,同样回应ACK,序列号为服务端SYN序列号+1;
  4. TCP连接建立成功,接下来转发数据(同时序列号采用同上一样的规律);

(第三次握手是为了保证双方都能确定对方做好了准备,可以传输数据。防止连接建立失败导致数据丢失)

TCP四次挥手

Client Server FIN =1, seq=X FIN-Wait-1 ACK X+1 seq=Y Close-Wait FIN=1, seq=Z ACK X+1 Fin-Wait-2 ACK Z+1 seq=X+1 Last-ACK Closed Closed Client Server
  1. 第一次挥手客户端发出释放连接请求,之后进入Fin-Wait-1状态等待服务端回应;
  2. 第二次挥手服务端回应客户端的释放请求,进入Close-Wait状态。客户端进入FIN-Wait-2状态;
  3. 数据传输服务端继续将剩余的数据传输完成;
  4. 第三次挥手服务端数据传输完毕后,向客户端再次发起释放请求,服务端进入Last-ACK状态;
  5. 第四次挥手客户端回应服务端的释放请求,等待一段时间(2MSL)后释放连接,服务端收到回应后释放连接;

TCP数据包

在这里插入图片描述

TCP首部长度为:固定首部(20字节)+可选选项(0~40字节)
且长度固定为4的倍数

字段说明
序列号当前数据包的第一个字节序号
确认号希望接收的下一个数据包的第一个字节序号
偏移数据包头的长度
UURG,为1代表紧急指针有效,该数据包紧急优先,应尽快传送
AACK,为1代表确认号有效
PPSH,为1代表接收方应直接将报文段应直接交给应用层,无需等待缓存区装满
RRST,为1代表出现严重错误,需要重新建立TCP连接。或用来拒绝非法报文和连接
SSYN,为1代表建立连接请求
FFIN,为1代表释放连接请求

TCP常见端口号

TCP端口协议说明
20FTP-Data文本传输协议-数据端口
21FTP-Control文件传输协议-控制端口
22SSH安全壳协议
23Telnet远程签入协议
25SMTP简单邮件传输协议
53 / UDP-53DNS域名解析协议
80HTTP超文本传输协议
443HTTPS超文本传输安全协议

TCP流量控制

一、作用

双方的传输速率不一定一致,可能导致接受方处理不及时,便会将数据放在缓冲区中,此时若缓冲区已满,便会造成数据包的丢失,所以采用流量控制来控制发送方的发送速率,可通过滑动窗口来实现,主要由接收方反馈缓存情况来维护;

二、过程

  1. 窗口大小(receiver window 即 rwnd)在建立连接即TCP三次握手过程中,接收方便告诉了发送方自己的rwnd,之后发送方的数据大小不能超过该字段规定的大小;
  2. 举例

说明:

  1. 接收端不一定给发送方的每条数据都发送ACK,可能累积好几个后用一个ACK同时确认;
  2. 接收方的窗口大小根据应用层接收、链路状态而定;
  3. 只有最开始的序号数据包(按序)成功被应用层接收即收到ACK后,窗口才会右移即按顺序滑动;
  4. 发送方只有确认前面的数据已经被接收(ACK),才会右移发送窗口(发送窗口内的数据会进行重传);
  5. 如果前面的数据包没有收到ACK,那么后面的数据包如果不按序接收,可能会导致其它的片段重传(包括已接收的但乱序的片段);
  6. 发送方收到接收方rwnd为0的ACK后,会停止发送数据,直到收到接收方新的rwnd不为0的ACK;

转载图片

TCP拥塞控制

一、概念说明

拥塞:网络提供的资源不能够满足用户的需求(或者说用户对网络中某一资源的需求超过了所能提供的大小);

二、拥塞控制四种算法

在这里插入图片描述

  1. 慢启动Slow Start):在建立新的TCP连接后,拥塞窗口(cwnd)初始化为一个数据包MSS)大小,源端每收到一次ACK,cwnd的大小就翻倍,一直到16个数据包大小达到阀值(缺省16,必须是MSS的整数倍);
  2. 拥塞避免Congestion voidance):当cwnd大小到达慢启动的设置阀值(SSH)后,采用拥塞避免,以线性(每次+1)的规律增长。当出现网络拥塞时,则将阀值降低为当前窗口大小的一半,并且窗口大小置1,继续慢启动算法;

cwnd < ssthresh: 慢启动
cwnd = ssthresh: 慢启动或拥塞避免
cwnd > ssthresh: 拥塞避免
网络拥塞: ssthresh = MAX( cwnd / 2, 2MSS), cwnd = 1

在这里插入图片描述

  1. 快重传Fast Retransmit):当发送方连续收到3个相同ACK后,立即重传指定数据包,无需等待RTO时间后重传;
  2. 快恢复Fast Recovery):当发送方收到超过3个以上的相同ACK后,执行快恢复算法;

连续3个相同ACK: ssthresh = MAX( cwnd / 2, 2MSS)
超过3个相同ACK后每收到一个重复ACK: cwnd = cwnd + ssthresh
收到3个或以上相同ACK后收到新的ACK: cwnd = ssthresh + MSS

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值