Java:吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题


Java:吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
本文插图
作者 | 小林coding
来源 | 小林coding(ID:CodingLin)
不管面试 Java 、C/C++、Python 等开发岗位 ,TCP 的知识点可以说是的必问的了 。
任 TCP 虐我千百遍 , 我仍待 TCP 如初恋 。
遥想小林当年校招时常因 TCP 面试题被刷 , 真是又爱又狠….
过去不会没关系 , 今天就让我们来消除这份恐惧 , 微笑着勇敢的面对它吧!
所以小林整理了关于 TCP 三次握手和四次挥手的面试题型 , 跟大家一起探讨探讨 。
1、TCP 基本认识
Java:吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
本文插图
2、TCP 连接建立
Java:吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
本文插图
3、TCP 连接断开
Java:吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
本文插图
4、Socket 编程
Java:吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
本文插图
PS:本次文章不涉及 TCP 流量控制、拥塞控制、可靠性传输等方面知识 , 这些留在下篇哈!
Java:吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
本文插图
TCP 基本认识瞧瞧 TCP 头格式
我们先来看看 TCP 头的格式 , 标注颜色的表示与本文关联比较大的字段 , 其他字段不做详细阐述 。
Java:吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
本文插图
TCP 头格式
序列号:在建立连接时由计算机生成的随机数作为其初始值 , 通过 SYN 包传给接收端主机 , 每发送一次数据 , 就「累加」一次该「数据字节数」的大小 。 用来解决网络包乱序问题 。
确认应答号:指下一次「期望」收到的数据的序列号 , 发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收 。 用来解决不丢包的问题 。
控制位:

  • ACK:该位为 1 时 , 「确认应答」的字段变为有效 , TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1。
  • RST:该位为 1 时 , 表示 TCP 连接中出现异常必须强制断开连接 。
  • SYC:该位为 1 时 , 表示希望建立连 , 并在其「序列号」的字段进行序列号初始值的设定 。
  • FIN:该位为 1 时 , 表示今后不会再有数据发送 , 希望断开连接 。 当通信结束希望断开连接时 , 通信双方的主机之间就可以相互交换 FIN 位置为 1 的 TCP 段 。
为什么需要 TCP 协议?TCP 工作在哪一层?
IP 层是「不可靠」的 , 它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性 。
Java:吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
本文插图
OSI 参考模型与 TCP/IP 的关系
如果需要保障网络数据包的可靠性 , 那么就需要由上层(传输层)的 TCP 协议来负责 。
因为 TCP 是一个工作在传输层的可靠数据传输的服务 , 它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的 。
什么是 TCP ?
TCP 是面向连接的、可靠的、基于字节流的传输层通信协议 。
Java:吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
本文插图