Socket
想要知道什么叫 Socket 我想我们有必要从一个故事开始说起。
话说有一天,你突然间很想吃鱼,你就来到你家附近的,五星级
菜市场卖鱼。
你来的一个卖鱼的摊位面前,大声的说了句
你:老板来我来条鱼。(SYN)
老板:好的靓仔,要哪一条自己抓。(SYN + ACK)
你:老板我知道了。(ACK)

上面三句话,就完成了你和老板之间的买鱼连接。这个就是大名鼎鼎的 Socket 的三次握手。
但是,你想你一下,这个里面为什么会需要三次握手,而不是 四次,也不是两次呢?
因为是这个样子的,你在告诉老板你需要买鱼的时候,这个时候老板是背对着你的,给你回了句要鱼自己抓,这个时候,就会出现两种情况
1,是你还在
2,是你已经走了
那么老板为了防止你已经走了,他必须听见你在次给他的回应,他才确定你是在的,才会转过头来。这个就是为什么还需要发送一个ACK的目的,
也是为什么会是三次而不是两次或者四次。只要双方都确认在了,那么就可以开始接下来的事情了。
这样也变向的说明了 TCP 是什么
答:是面向连接的,可靠的。
那么你有没有想过这样一个问题,可靠是可靠了,我们两个人都在,这个连接又是什么东西呢?
因为在上面呢我们已经交代过了,老板说“好的靓仔,要哪一条自己抓”那么自己抓鱼是不是需要
有抓鱼的工具呢,是的需要渔网,老板肯定也需要一个渔网来,接纳我装的这条鱼,那么你和
老板手里面的渔网这个就叫连接(也就是 Socket 客户端和服务端,同时都需要开辟一块内存,而这个内存快是在内核空间(理解成渔网))
渔网都有了(链接已经建立了)
那么这个时候你就需要开始抓鱼了,(发送数据),你把鱼装进了你的渔网,放到了传送带上(内核),老板在用他的渔网把这条鱼给接住。
这样老板在杀完其他鱼的时候,就会捞起你的鱼给你(从内核中的内存中取数据),把你的鱼给你处理好。最后交给你。

最后放鱼的过程就不画了,大家脑补一下。
齐活。一次愉快的买鱼体验,你愉快了吗?
一句话,风浪越大,鱼越贵。鱼越贵才能记得住。
本文通过买鱼的故事阐述Socket的三次握手过程,解释TCP的面向连接和可靠性,以及连接在数据传输中的角色。

1727

被折叠的 条评论
为什么被折叠?



