TCP的三次握手与四次挥手

TCP报头

6位标志位 :

URG : 紧急指针是否有效,需配合16位紧急指针使用
ACK : 确认号是否有效
PSH : 提示接收端应用程序立刻从 TCP 缓冲区把数据读走
RST : 对方要求重新建立连接
SYN : 请求建立连接
FIN : 通知对方 , 本端要关闭了

TCP通讯流程 

三次握手

第一次握手:client端将报头的SYN标志位设置为1,产生一个序号值X,将X存入32位序号中,将该数据发送给server。

第二次握手:server端将报头的SYN标志位设位1,ACK的标志位设置为1,将X+1存入32位确认序号(表示X和X之前的数据都已经收到了,下次请求序号应该为X+1),如果server端也发送消息,就将其产生的序号值Y,存入32位序号,将该数据发送给client

第三次握手:将ACK标志位设为1,将Y+1存入32位确认序号,将该数据发送给server。

连接建立

四次挥手

第一次挥手:将FIN标志位设为1,将序号值X存入32位序号(client端发送数据到序号X就结束了,且之后也不会在有数据),将该数据发送给server。

第二次挥手:将ACK标志位设为1,将序号值X+1存入32位确认序号,将该数据发送给client。

第三次挥手:将FIN将FIN标志位设为1,将序号值Y存入32位序号(server端发送的最后一个字节的序号为Y),将该数据发送给client。

第四次挥手:将ACK标志位设为1,将序号值Y+1存入32位确认序号,将该数据发送给server。

断开连接

为什么是三次握手 ?

第一次握手表明client端具有发送数据的能力,第二次握手表明server端具有接受数据和发送数据的能力,第三次握手表明client端具有接受数据的能力。

所以三次握手是可以验证client端和server端的接受和发送能力的最小握手次数。

如果只有一次握手,那么client端无法确认server端是否收到了消息,因此client端可能会多次发送报文。同样,如果只有两次握手,那么server端无法确认client端是否收到报文,从而使server端多次发送报文。(造成SYN洪水)

如果进行三次以上的握手就会造成资源的浪费。

为什么是四次挥手?

断开链接的本质:双方达成断开链接的共识

client:我要断开链接了
server:好的
//等到server处理完client最后的数据后
server:我要断开链接了
client:好的

如果不返回ACK信息,那么那么server/client端不知道对方是否收到了要断开链接的消息。只有返回ACk确保双方收到了消息,才能保证链接的安全性。

有无状态

协议的状态是指下一次传输数据的时候能考虑到这次传输信息的状态。 也有是说有状态协议以前的请求导致协议所处的状态会影响后续的状态,协议会根据上一个状态创建上下文。无状态服务是指把每个请求都作为与之前请求无关独立的事务来处理

因为TCP协议需要三次握手,所以TCP是有状态的协议。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值