三次握手

什么是三次握手

序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。
确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。
确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效
同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。
终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接
PS:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号
百度百科的解释是:
第一次握手:客户端发送syn包给服务器,这个时候syn=j,这个时候,客户端的状态进入SYN_SENT状态,需要等待服务器确认。(大白话说就是客户端发了个包给服务器,我客户端就处在发送状态了,但是不知道服务器有没有收到,我就需要服务就确认有没有收到,这个时候客户端处在SYN_SENT状态,sent是)

第二次握手:服务器收到syn包,确认了客户端的syn,ack=j+1,,同时服务器也给客户端发送一个syn包(syn=k),注意,服务器发给客户端的是SYN+ACK包,此时服务器进入SYN_RECV状态(大白话说就是,我服务器收到了你客户端发来的信息了,收到之后,ack值就要变为j+1,为了让你客户端知道我服务器收到了你的信息,我先回复你的SYN,然后我再加上我自己想对你说的话一起发送给你ACK,所以发送的是SYN_ACK包,然后我服务器就等着你客户端给我回应,就处在SYN_RECV状态)

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(established中文意思是已建立))

①TCP是一种精致的,可靠的字节流协议。
②在TCP编程中,三路握手一般由客户端(Client)调用Connent函数发起。
③TCP3次握手后数据收发通道即打开(即建立了连接)。

三次握手的过程

在这里插入图片描述

首先由Client(客户端)发出请求连接即 SYN=1 ACK=0 (请看头字段的介绍), TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此声明自己的序号是 seq=x
然后 Server 进行回复确认,即 SYN=1 ACK=1 seq=y, ack=x+1,
再然后 Client 再进行一次确认,但不用SYN 了,这时即为 ACK=1, seq=x+1, ack=y+1.然后连接建立。
有人会困惑为什么要进行三次握手呢(两次确认)?这主要是为了防止已失效的请求连接报文忽然又传送到了,从而产生错误。如何产生这种情况的呢?假定A向B发送一个连接请求,由于一些原因,导致A发出的连接请求在一个网络节点逗留了比较多的时间。此时A会将此连接请求作为无效处理又重新向B发起了一次新的连接请求,B正常收到此连接请求后建立了连接,数据传输完成后释放了连接。如果此时A发出的第一次请求又到达了B,B会以为A又发起了一次连接请求,如果是两次握手此时连接就建立了,B会一直等待A发送数据,从而白白浪费B的资源。三次握手的话,由于A没有发起连接请求,也就不会理会B的连接响应,B没有收到A的确认连接,就会关闭掉本次连接。
可能还有人困惑大写ACK和小写ack是有什么区别,为什么两个值还不一样。大写ACK是一种TCP协议规定的标识,小写ack是 acknowledge number 为确认号码,值是seq + 1。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值