三次握手

三次握手

TCP在建立连接时采用了三次握手的方式

举个例子~
你去下馆子

你 :老板,来碗拉面!
老板:好,十块!
你 :好,给你。

这里的每一句话,粗略的可以看作一次握手。
第一句,算是你发给老板的请求(SYN)
第二句,老板“好”,算是答复(ACK),“十块”算是老板发给你的请求(SYN)
第三句,算是你给老板的答复(ACK)

每说一次答复都可以让对方知道,我方可以正确的接收到对方的信息。

过程

在这里插入图片描述
由上图可见,双方都是在接收到ACK之后,就建立连接成功。

  • client:
    第一次握手中,向server发送SYN+seq凭条。
    第二次握手中,收到server发送的ACK+seq凭条。
    以上两点,证明了server可以正确收到并回复client的信息。

  • server:
    第二次握手中,向client发送SYN+seq凭条。
    第三次握手中,收到client发送的ACK+seq凭条。
    以上同理可证client可以正确收到并回复server的信息。

以上,通过这种平等的双方证明,可以建立起稳定的连接,防止资源浪费。

为什么不两次握手

试想一下,如果是两次握手,那么情况就是:
在这里插入图片描述
这样子对两边来说是个什么情况呢?
对于client来说,好像还行,client可以知道对方读懂了我的意思。
对于server来说就有点懵逼了,收到个东西,然后回复,然后就没有然后了。都不知道对方到底懂不懂自己的意思。
更可怕的是什么呢?
如果server仅凭一个SYN就建立连接,那么如果这个SYN是过期的,那么就会造成server的单相思,也就是资源的浪费。

为什么不四次握手

三次握手就能解决的问题为啥要多一次嘞~(ˉ▽ˉ;)(我太菜了,我没深究)

重传机制

举个例子~
还是下馆子

如果你喊话老板没反应,你就会继续喊:“(#`O′)老板!这里要买东西嘞!
如果老板后来听到了,交易就可以继续

如果老板后来没听到,你喊多了就累了:“算了,今天不买了。

如果老板把说好,报了价钱,但是这时你上厕所去了,无法回应
这时老板就会继续喊:“(#`O′)哎,你还买不买啊!
如果你马上提了裤子就出来回话,交易就可以继续

如果一直没回应,老板做拉面出来没人给他钱,他会亏本的

以上的继续喊这个动作,就是重传机制。
当发送一个SYN请求之后,内核就会将这个SYN的复制版本放到一个专门的队列里,每隔一段时间,就去查看是否收到了相应的ACK包,如果没有收到,那么就会再发一次,默认会重新发五次。

四次挥手

举个例子~
还是下馆子

老板:您好,我们要打烊了
你 :要关门了是吧,让我检查一下我有没有落下东西
过了一会儿
你 :我完事了,我这就走,再见
老板:慢走

四次挥手其实也是在让双方确认对方的信息,只不过把三次握手的第二次拆开,使得被呼叫关闭的一方有时间来整理资源,不会造成损失。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值