三次握手,四次挥手【好的,我可以休息两年了】

这个问题困扰我许久,我也不明白为啥,明明就这么点东西,但是我死活弄不好。
今天我就花点时间,把我想要的总结一下然后再去理解记忆。
(好吧,其实我上次就打算花一下午的时间来做这个事,但是不知道怎么开始。)


1、理解三次握手,四次挥手。

三次握手(你可以理解成两个人打电话)

A:喂,你能听到嘛?
B:我听到了,你能听到嘛?
A:我听的到

经过上面三个步骤后,A和B就可以开始说这次打电话的目的了。

四次挥手(同样理解成打电话)

A:我妈回来了,我不能说了
B:好吧,我知道了
B:我爱你噢
A:爱你么么哒!

经过上面四个步骤,A和B才可以挂了电话。


当然如果你厌倦了你的女朋友你完全可以这样。

A:我妈回来了,我不能说了
A:嘟嘟嘟…(B当场挂掉电话)


2、和面试官谈三次握手,四次挥手。

三次握手: 客户端发送SYN数据包到服务端请求连接,服务端返回SYN/ACK数据包。客户端再次发送ACK数据包。经过三次只会客户端和服务器都可以确定自己接收发送正常,对方接收发送正常,这时就可以进行通信了。

四次挥手: 任何一端都可以主动提出终止连接,然后另外一端确认。但是另外一端可能还有数据没有发送完,这时候等到发送完毕后告诉对方可以关闭了。对方这时候才进行关闭。(提出关闭的一方发送FIN数据包,另一方确认收到回复ack,等待数据发送完毕,再发送FIN,这时提出关闭的一方回复ack完成关闭。)


3、手绘三次握手,四次挥手。

手绘之前,我们需要搞懂它里面的字符都是什么意思,记下来了就简单了
mmp,我以前能手绘的,过了一段时间没想到忘记的透透的…

字符 意义
序列号seq 占4个字节,用来标记数据段的顺序
确认号ack 占4个字节,期待收到对方下一个报文段的第一个数据字节的序号
确认ACK 占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效
同步SYN 连接建立时用于同步序号
终止FIN 用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接

ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。


三次握手图

在这里插入图片描述


四次挥手图

在这里插入图片描述


4、相关的问题


Q:为什么必须三次连接两次行不行?

    A:不行,因为TCP是安全的传输,必须保证每一个数据包都不丢失。所以必须保持客户端和服务端都接收、发送正常。


Q:为什么必须四次挥手关闭?

    A:因为被动关闭的一方,可能存在没有发完的数据,等它发送完毕后还需要再次告诉一下关闭方,这样关闭方才可以进行确认关闭。


Q:为什么必须四次挥手关闭?

    A:客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。



如果对你有帮助可以关注我的公众号噢,一个胡扯的公众号:小道仙97
在这里插入图片描述

发布了306 篇原创文章 · 获赞 133 · 访问量 54万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览