TCP的三次握手详解

TCP是一种面向连接、可靠的传输层协议,其三次握手过程确保了连接的建立。第一次握手客户端发送SYN,第二次握手服务器回复SYN+ACK,第三次握手客户端回应ACK。三次握手的目的是初始化序列号,防止SYN超时攻击。为抵御SYNFlood攻击,服务器可能启用SYN队列和SYNcookie。此外,TCP还设有保活机制,当一方无响应时,会发送探测报文尝试维持连接。
摘要由CSDN通过智能技术生成

TCP的三次握手

传输控制协议TCP简介:
1.面向连接的、可靠的、基于字节流的传输层通信协议
2.将应用层的数据流分割成报文段并发送给目标节点的TCP层
3.数据包都有序号,对方收到则发送ACK确认(即是确认字符),未收到则重传
4.使用奇偶校验和函数检验数据在传输过程中是否有误

注意:TCP和UDP数据包都是不包含IP地址信息的,但是均有source port和destination(目的)port。IP地址可以唯一标示一个主机,TCP协议和端口号可以唯一表示主机中的一个进程。

TCP Flags
1.URG:紧急指针标志,为1时表示紧急指针有效
2.ACK:确认序号标志,为1时表示确认序号有效
3.PSH:push标志,为1表示带有push标志的数据,指示接收方在接收到该报文段以后应尽快将报文段交给应用程序,而不是在缓冲区排队
4.RST:重置连接标志,重置由于主机崩溃或其它原因的错误连接,或用于拒绝非法报文段
5.SYN:同步序号,用于建立连接过程
6.FIN:finish标志,用于释放连接,为1表示发送方已经没有数据发送了,关闭本方数据流

关于TCP的三次握手
握手是为了建立连接,流程图如下:
在这里插入图片描述
第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认
第二次握手:服务器收到SYN包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器端的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED( established/建立)状态,完成三次握手

为什么要三次握手才能建立连接?
为了初始化Sequence(序列) Number的初始值(TCP会用这个序号来拼接数据)

首次握手隐患(SYN超时)
问题分析:服务器端收到客户端的SYN,回复SYN-ACK的时候未收到ACK确认,服务器端不断重试直至超时,Linux默认等待63秒后断开连接

恶意服务器可能会发送SYN后下线,针对SYN Flood的防护措施如下
1.SYN队列满后,通过tcp_syncookies参数回发SYN cookie
2.若为正常连接则Client会回发SYN Cookie,直至建立连接
建立连接后,Client出现故障怎么办?
保活机制:向对方发送报货探测报文,如果未收到则继续发送,尝试次数达到保活探测数仍未收到响应则断开连接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值