明白三次握手,以及为什么tcp安全,首先得明白上面4个字母含义
- SYN: 等于1 表示申请建立连接
- ACK: 是否已成功接收,等于0 表示没有成功接收, 等于1 表示已成功接收,TCP以后每次成功接收都要发送ACK = 1
- seq: 序列号,首次随机生成,这是确保TCP及其重要的参数,后面详说
- ack:与ACK不同,是表示应该发给我的下个数据包的编号
详细说下:
PS:以下的1001表示x,2001表示y。因为x和y都是随机生成的
第一次握手:
- 客户端发起连接申请,所以SYN = 1
- 但是现客户端没有收到信息,所以ACK = 0
- 第一个数据包的编号随机生成为x = 1001,所以seq = 1001
- 整合起来就是 SYN = 1,ACK = 0,seq = 1001
第二次握手:
- 服务器接收到了数据包,申请请求 ACK = 1
- 服务器申请和客户端建立请求,SYN = 1
- 服务器端第一个数据包的编号随机生成为2001,所以seq = 2001
- 告诉客户端我已经成功接收到你的第一次握手请求,编号为1001的数据包下一次不用发这个了,从数据包1002开始发,ack = 1002
- 整合起来就是 SYN = 1, ACK = 1, seq = 2001, ack = 1002
第三次握手:
- 我已经成功接收数据包2001,ACK = 1
- 我发送的包编号是1002,你拿去拼好,看之前的丢失没,丢失发我信号我重发。seq = 1002
- 下次发我2002号的数据包,ack = 2002