TCP协议的三次握手

##TCP UDP协议
由于传输的时候可能出现掉包,顺序不一致,速度慢等情况,在不同的需求下使用不同的协议进行传输。

  • 对于掉包和顺序等可靠性要求高的情况下
    TCP
    当使用可靠性能比较高的TCP协议,为什么TCP协议是可靠性高的协议先看看原理

  • tcp报文头

在这里插入图片描述

TCP Flags
      UAG:紧急指针标志
      ACK:确认序号标志
      PSH:PUSH标志
      RST:重置连接标志
      SYN:同步序号,用于建立连接过程
      FIN:finish标志,用于释放连接

一次完整的TCP通讯包括:建立连接、数据传输、关闭连接

  • 建立连接 三次握手

第一次握手
客户端通过向服务器端发送一个SYN(Reserved 中的 SYN)=1,seq(sequence number)=x来建立一个主动打开。
第二次握手
服务器端应当为一个合法的SYN回送一个SYN/ACK=1,seq=y,ack=x+1。
第三次握手
最后,客户端再发送一个ACK=1,seq=x+1,ack=y+1。这样就完成了三路握手,并进入了连接建立状态。

在这里插入图片描述

三次握手的意义:TCP通过三次握手建立可靠的(确保收到)的全双工通信,并且同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。

安全隐患
SYN攻击 服务器接收到连接请求(syn=x),将此信息加入未连接队列,并发送请求包给客户(syn=y,ack=x+1),
此时进入SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时
(linux默认重发6次总共63秒), 才将此条目从未连接队列删除。引起网络堵塞甚至系统瘫痪。 针对SYN Flood防范
SYN队列满后,通过tcp_syncookies参数回发SYN cookie 若为正常连接client会回发SYN
cookie,建立连接

  • 断开连接 四次挥手
    在这里插入图片描述

第一次挥手:
client向server发送一个FIN,用来关闭client到server的数据传送,client进入fin_wait_1状态
第二次挥手
server收到FIN后,发送一个ACK给client,确认序号为收到的序号+1,server进入close_wait 状态
第三次挥手
server发送一个FIN,用来关闭server到client的数据传送,server进入last_ack状态
第四次挥手
client收到FIN后,client进入TIME_WAIT状态,接着发送一个ACK给server,确认序号为收到序号+1
server进入closed状态,完成四次挥手,
client端需要再等待2MSL保证对方收到发送后closed

出现大量CLOSE_WAIT状态,服务器忙于读写,没有及时关闭连接
代码,释放资源代码
配置,处理请求的线程配置

  • RTT/RTO

    RTT: 发送一个数据包到收到对应的ACK,所花费的时间
    RTO: 重传时间间隔(发送超时的时间间隔)

  • 滑动窗口

保证TCP的可靠性
保证TCP的流控特性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值