三次握手(文科生也看得懂的)

包含了客户端与服务器建立连接的流程

前言

        三次握手、四次挥手协议是TCP建立和断开连接的重点,也是面向连接的体现,可以说是每年面试必问题之一。

(真正在建立连接时,三次握手,前两次是没有携带数据的,发送的只是一些确认报文,这个我们会详细介绍,现在只是帮助我们理解三次握手和四次挥手)


一、三次握手是什么?

我们把TCP建立连接的过程,想象成男女朋友之间建立关系的过程。

断开连接的过程,想象成男女朋友分手的过程。见:四次挥手

男生比作:客户端。女生比作:服务器。

这里我们就按一般情况分析下:大多数都是男生主动追求女生。女追男的那种情况那就是隔层纱了,我们把这种就当作是UDP建立连接的过程吧,再下一篇文章中进行讨论,喜欢这种方式的同学可以观看我们的TCP与UDP。

既然是男生追女生,那么直男一般都是怎么表达的呢?

首先男女生应该都是有想要社交这个准备的。(服务器、客户端socket的创建

前期准备:

①首先的加到女生VX吧。(知道对方的IP地址和端口号);

②这里我们VX的媒介比作(TCP连接时采用的流式套接字);

③当然女生也不能经常换手机和微信号吧,都有固定手机和VX号(bind:IP和端口绑定),老换男生也找不着不是;

④这时候男女生互相喜欢了,女生一般都比较期待男生给自己发消息或者表白什么的(listen监听),期待的同时女生一般也处于准备接受这个男生的阶段(accept接收连接);这也是我们一般建立连接时为什么要先打开服务器,再打开客户端的原因之一。

等差不多该建立关系了--------男生发消息了

  • 第一次握手:男生发消息了:我喜欢你->XXX♥♥♥做我女朋友吧!(客户端:connect)。
  • 第二次握手:女生一般比较委婉---收到消息后呢回复男生->要不我们先处处吧。
  • 第三次握手:男生这边收到消息的回复一下女生->嗯嗯,那我们处处,女生也收到答复了。

这个过程中成不成主要也得看女生的意愿了不是;(服务器:accept的返回值)成功:记住你VX号或者名字(通常>0一个描述符),失败:拉倒呗(返回-1),为什么不返回0:0是啥呀到底同意还是拒绝呢(其实0也是描述符之一已经被用了)

关系确立了:后面男女生之间就可以交往了。(send、recv)

这里有旁边的闺蜜就说了,这合适吗?那我们帮他们分析下。。。

1.2为什么要握三次?两次、四次呢?

两次:女生说->我们先处处,然后也一直等,一直等,一直等。。。。(等到海枯石烂?)也等不到男生的回复,这样的关系能建立起来吗,一般不太可能?

四次:那女生在说完我们先处处后再说点什么呢?其实我也喜欢你或者我其实不喜欢男的,男生还没回复呢,再说的话是不是有些多余!

所以说三次正正好!

详细介绍:

       TCP传输层协议中,客户端与服务器间建立连接,采用三次握手机制。

 我们先来认识下这些专有名词都是什么意思,以及他们的作用(一般面试不太问,大致过一遍就可以!):

标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等。

这里我们就只介绍下图中几个:

1)seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。(简单说就是客户端和服务器端各自发起时用来计数的!

 2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
这个就是接收方收到信号后确认用的,它的序号和发起序号有关的!接收到信号之后,先把ACK置1,才能产生小写的ack。不要将确认序号ack与标志位中的ACK搞混了。

SYN请求号标记位
ACK确认号标记位

 建立连接过程(三次握手的过程):

SYN:发起新链接,看图,一般就刚开始一端出现一个,后面只要不产生新的连接就不会再有了。
seq:他等于x是因为它的起始序列是随机的。但是再往后的客户方的起始序列都在它的基础上+1。服务器端的起始序列同理。
注意他俩的起始序列是两个不同的数值概念。
ACK:收到就标志为1,然后就把小写的ack确认序号根据发起方的序列号确定下来。不论发送接收都要考虑这次行动的序列号seq。
如果是新发起的记得标志位SYN。
有应答的时候记得把ACK和ack都写上。


总结

        我们通俗的说明了三次握手过程,便于我们对抽象概念的理解,又从相对专业的角度说明了TCP建立连接的三次握手过程,下一篇我们将分析断开连接时的四次挥手过程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值