Java:吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
本文插图
作者 | 小林coding
来源 | 小林coding(ID:CodingLin)
不管面试 Java 、C/C++、Python 等开发岗位 ,TCP 的知识点可以说是的必问的了 。
任 TCP 虐我千百遍 , 我仍待 TCP 如初恋 。
遥想小林当年校招时常因 TCP 面试题被刷 , 真是又爱又狠….
过去不会没关系 , 今天就让我们来消除这份恐惧 , 微笑着勇敢的面对它吧!
所以小林整理了关于 TCP 三次握手和四次挥手的面试题型 , 跟大家一起探讨探讨 。
1、TCP 基本认识
本文插图
2、TCP 连接建立
本文插图
3、TCP 连接断开
本文插图
4、Socket 编程
本文插图
PS:本次文章不涉及 TCP 流量控制、拥塞控制、可靠性传输等方面知识 , 这些留在下篇哈!
本文插图
TCP 基本认识瞧瞧 TCP 头格式
我们先来看看 TCP 头的格式 , 标注颜色的表示与本文关联比较大的字段 , 其他字段不做详细阐述 。
本文插图
TCP 头格式
序列号:在建立连接时由计算机生成的随机数作为其初始值 , 通过 SYN 包传给接收端主机 , 每发送一次数据 , 就「累加」一次该「数据字节数」的大小 。 用来解决网络包乱序问题 。
确认应答号:指下一次「期望」收到的数据的序列号 , 发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收 。 用来解决不丢包的问题 。
控制位:
- ACK:该位为 1 时 , 「确认应答」的字段变为有效 , TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1。
- RST:该位为 1 时 , 表示 TCP 连接中出现异常必须强制断开连接 。
- SYC:该位为 1 时 , 表示希望建立连 , 并在其「序列号」的字段进行序列号初始值的设定 。
- FIN:该位为 1 时 , 表示今后不会再有数据发送 , 希望断开连接 。 当通信结束希望断开连接时 , 通信双方的主机之间就可以相互交换 FIN 位置为 1 的 TCP 段 。
IP 层是「不可靠」的 , 它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性 。
本文插图
OSI 参考模型与 TCP/IP 的关系
如果需要保障网络数据包的可靠性 , 那么就需要由上层(传输层)的 TCP 协议来负责 。
因为 TCP 是一个工作在传输层的可靠数据传输的服务 , 它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的 。
什么是 TCP ?
TCP 是面向连接的、可靠的、基于字节流的传输层通信协议 。
本文插图
- 面向连接:一定是「一对一」才能连接 , 不能像 UDP 协议 可以一个主机同时向多个主机发送消息 , 也就是一对多是无法做到的;
推荐阅读
- 『Java』java数据结构系列——什么是数据结构
- 『Java』马云:成功人跟普通人差不多,但这三点我一定要分享给所有年轻人
- 小谢娱乐哦引来广大网友狂点赞,直呼炸天,程序员用Java实现扫雷小游戏
- 「客户端」学习网络编程,不了解TCP协议?难怪面试被刷下去,还不来学习!
- 体坛焦点全场吊打对手,上港苦主独造三球,4-0狂胜!申花亚冠劲敌踢疯了
- #Java#java线程到底有多少种状态?
- 【皇室战争】皇室战争:狂暴模式被吊打?学会这套卡组,轻松连胜拿奖励
- Muster电竞单挑省级马超惨遭吊打,网友:真香,国服瑶妹打脸梦泪失败
- 星空游戏精选小羊火龙溢出严重,法师吊打满配物理队?明日方舟高台输出太强
- #智能手表#1、初识java-1
