tcp三次握手_TCP 三次握手总结

TCP特点概述

  • 点对点的传输 point to point
  • 可靠的,按序的字节流传输 reliable, in-order byte stream
  • 流水线机制:有助于拥塞控制和流量控制 pipelined
  • 全双工 full deplux data 数据双向流动
  • 面向连接connection oriented
    • 连接状态只在两端进行维护,并在数据交互之前就通过handshaking建立

TCP Segment Structure 段结构

130b5eb2955805949ac92f109a0da932.png
TCP Segment Structure
  • receive window 即愿意接受的字节数,用于流量控制flow control
  • acknowledgement number 用来确认ACK号是否启用有效
  • SYN是三次握手建立连接用到,FIN在四次挥手用到

TCP 连接的建立 3-Way Handshake 三次握手

  • Step1: client host sends TCP SYN segment to server 发送SYN报文段
    • 客户端发送的SYN置1
    • 设定初始序列号seq(一般随机,即第一个字节的编号)
    • 无任何data
  • Step2: server host receives SYN, replie with SYN ACK segment 答复SYN ACK报文段
    • server allocates buffers服务器分配缓存
    • 设定server的初始序列号seq(也是随机,第一个字节的编号)
    • 确认收到客户机的请求
  • Step3: client receives SYNACK, replies with ACK segment, which may contain data
    • 表示"我已经收到了你同意建立连接"
    • 这一步也有Seq,按照下图即应该是Seq=x+1(但是ppt没写出来)
  • 总结:
    • 三次握手的思想是要互相完成确认acknowledgement,ack即是指期待对方的下一个报文段的序列号,因此是对方上次发过来的报文段的序列号seq+1(回忆一下TCP是顺序传输的,逆序传输情况是由应用自己负责)
    • 序列号seq:占4个字节,即第一个字节的编号,由本地随机产生
    • 确认号ack:占4个字节,即是指期待对方的下一个报文段的序列号,因此是对方上次发过来的报文段的序列号seq+1
    • Syn bit和ACK bit都是确认位,SYN代表请求建立连接,建立连接则置1。而ACK代表确认号是否有效。

8d4cb249e491b38c5ed47aaf8d503769.png
三次握手
  1. 问题:为什么要握手?
  • UDP就不需要握手,直接发数据,但是TCP 是可靠通信协议,要保证接收方收到的数据是完整, 有序, 无差错的。

2. 问题:握手是怎样保证数据可靠的呢?

  • 通过seq序列号和ack确认号,ack即是指期待对方的下一个报文段的序列号,因此是对方上次发过来的报文段的序列号seq+1,从而保证连接传输是可靠的。当然checksum等机制在这里就不全列叙了,这部分回答只是针对tcp握手这部分的。

8041ce0f2a1b0c2cee13aa9f4cea56a6.png
形象的漫画

3. 问题:为什么需要三次握手,两次握手不行吗

  • 正如上文所描述的,为了实现可靠传输,发送方和接收方始终需要同步( SYNchronize )序列号seq。 需要注意的是, 序号seq并不是从 0 开始的,而是由发送方随机选择的初始序列号 ( Initial Sequence Number, ISN )开始,是第一个字节的编号。由于 TCP 是一个双向通信协议,通信双方都有能力发送信息,并接收响应。因此,通信双方都需要各自随机产生一个初始的序列号,并且把这个起始值告诉对方,所以要三次握手。
  • 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认

4. 问题:如果很多台计算机同时发送很多SYN请求,但攻击者无意完成三次握手过程,即已完成SYN,SYN-ACK但尚未得到最终ACK的连接呢?

  • 这被称为SYN-Flooding攻击,是DoS攻击的一种,攻击者要么使用欺骗性的假的IP地址,要么不要继续完成整个三次握手过程。通过这种攻击,攻击者可以淹没用于半连接的受害者队列,当这个队列已满时,受害者不能再进行任何连接。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值