TCP三次握手

-----------------白话理解---------------------------------

1. 第一次握手,客户端问服务器:喂,你听得到吗?

2 第二次握手,服务器向客户端回复:听得到,你听得到我的嘛?

3 第三次握手,客户端回应服务端,听到了,咱们可以说话啦~

---------------------分割线--------------以下是正经程序员叙述:-------------------------------------------------------

    序列号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小写的单词表示序号。
 

第一次握手:最初客户端 TCP进程是CLOSE状态,建立连接时,客户端发送SYN包(连接建立请求报文),随机生成序号seq=x(x不能等于0) 到服务器,此时客户端进入SYN-SEND(准备发送)状态。

第二次握手:服务器收到SYN包,若同意建立连接,确认客户的SYN(确认号 ack=x+1),同时自己发送一个SYN(随机生成序号seq=y),即SYN+ACK包,此时服务器进入SYN_RECV(准备接受)状态。

第三次握手:客户端收到服务器端的ACK+SYN包,向服务器发送确认包ACK(ack=y+1),包的序号仍为seq=x+1,此包发送完毕,客户端和服务器进入ESTABLISHED(已建立连接)状态,完成三次握手。

 

为什么需要三次握手才能建立连接?

   为了初始化Sequence Number的初始值

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值