面试官问此问题的原因:
作为一个中高级,甚至是资深程序猿,大家在面试的过程中可能经常被面试官问到<HTTP的三次握手和四次挥手>这个问题,这个问题是网络基础中的经典问题,尤其作为面试官考察面试人员对HTTP协议的了解程度是非常有参考意义的,同时关于TCP/IP和HTTP协议这一类问题,由于初中级程序员在常规开发中不需要了解其中的原理也不影响相关开发,因此面试时问到此类问题是非常能够考察面试人员在平时中的知识积累和对技术的研究程度的。(写了一大段废话,让我们进入正题)
TCP的三次握手的目的是什么?
三次握手是为了建立TCP连接 四次挥手是为了断开TCP连接
三次握手后的结果是什么?
首先,HTTP三次握手的本质是为了确认客户端(client)与服务端(server)收发数据的能力,也就是说三次握手是为了确保数据能够到达指定目标。
简单描述一下三次握手的过程(简单易懂的语言描述)(由于作者刚看过大话设计模式,因此特别喜欢有"剧情"的讲解!)
就使用古时候吴签在大狱和网红通过飞鸽传书这个典故来介绍吧。
当网红能收到牙签:
此时由于网红收到牙签,因此网红知道吴签的发件能力没问题,网红的收件能力没问题
当吴签能收到网红回复的牙签:
此时吴签收到牙签,说明吴签知道网红的发件和收件能力没问题,同时也知道自己的发件和收件能力没问题。
当网红收到吴签的回复的牙签:
此时网红收到牙签,说明网红知道吴签的收件能力没问题,自己的发件能力也没问题
| 吴签的发件能力 | 吴谦的收件能力 | 网红的发件能力 | 网红的收件能力 |
---|
第一次握手 | 网红知道 | 未知 | 未知 | 网红知道 | 第二次握手 | 吴签知道 | 吴签知道 | 吴签知道 | 吴签知道 | 第三次握手 | 双方已知 | 网红知道 | 网红知道 | 双方已知 |
总结:双方都知道各自和对方的收件和发件能力,确保数据能够到达指定目标
三次握手中的专业术语
首先我们先了解一下三次握手中的一些名词定义:
关键名词 | 含义 |
---|
SYN | synchronous建立联机标志位 | SEQ(非TCP标志位) | Sequence number顺序号码,为了让上下游的命令串起来 | ACK | acknowledgement 确认 |
总结:SYN,ACK是TCP标志位,TCP标志位共有6种,具体6种的详情描述我会在后面的文章中特别描述,还望朋友们尽情期待。
三次握手交互图:
事先说明,如果你不是完全掌握三次握手流程,建议自己手画此交互图,这样在面试的时候你直接画出来,然后给面试官打趴下。
三次握手中客户端和服务端的状态都有哪些?
| 客户端 | 服务端 |
---|
Closed | 关闭状态 | 无 | Listen | 无 | 监听状态 | SYN_SENT | 请求连接状态 | 无 | SYN_RCVD | 无 | 服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态 | ESTABLISHED | 连接成功状态 | 连接成功状态 |
本文到这里就暂时结束了,其实我还想写一些关于三次握手的实际面试题,奈何面试次数太少,涉及这个知识点的面试题我了解的也不多,望请各位看官们把自己在面试中遇到的面试题留言在评论区,本人会根据面试题补充本文内容,还望看官们多多评论点赞,手打博客不易。 关于四次握手的详解,后续更新
|