IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 面试记录:F**K You TCP -> 正文阅读

[网络协议]面试记录:F**K You TCP

问问问天天就知道逮着个计网问

首先肯定要知道tcp是个什么玩意

是一种面向连接的、可靠的、基于字节流的传输层通信协议
TCP/IP 协议有四层

  • 应用层
  • 传输层
  • 网络层
  • 网络接口层.
    TCP 工作在传输层
    TCP 面向了连接,仅支持一对一的连接方式。
    TCP 的消息有序没有边界,保证数据传输大小不受限制,且保证数据完整可靠

TCP 的头部结构

  • 源端口号|目标端口号
  • 序列号、确认应答号
  • 首部长度、控制位、窗口大小
  • 校验和、紧急指针
  • 选项、数据

序列号和确认应答号:
建立连接时生成随机数作为序列号初始值,通过syn包进行传输,每发送一次就累加一次此数大小,用来保证网络包有序。确认应答号代表期望下次收到的数据序列号,发送端收到这个确认应答就可以认为这个序号之前的数据都已正常接收。保证网络不丢包

主要的控制位:
控制位为1时生效。

  • ACK(确认应答)
  • RST(强制断开连接)
  • SYN(建立连接,这个会设定序列号初始值)
  • FIN(不再有数据发送,希望断开连接)。

就喜欢问的三次握手四次挥手

三次握手建立连接,四次挥手断开连接

三次握手

  1. 客户端发送到服务端 SYN 包。此时会生成一个初始的序列号
  2. 服务端回应客户端 SYN+ACK 包,生成一个初始序列号和确认应答号(之前收到的序列号+1)
  3. 客户端再回传一个 ACK 包。发送确认应答号,连接确立

为什么是三次

tcp 建立连接要保证客户端、服务端双方的发送、接受功能正常,三次握手的过程中恰好完成了这几项的验证。
第一次握手验证了客户端发送正常
第二次握手验证了服务端接受、发送正常
第三次握手验证了客户端接受正常

以上,如果握手次数少于三次,则不能保证双端的功能正常。
服务端第二次握手回应的报文中同时包含了 SYN 和 ACK 控制位,理论上第二次握手是可以拆开的,但是没必要,一次能解决就不用多耗费发两次的资源。

四次挥手

  1. 客户端发送给服务器端 FIN 包,进入 FIN-WAIT-1 状态
  2. 服务端接受到客户端的 FIN 包后,返回一个 ACK 应答,进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。
  3. 服务端返回一个 FIN 报文,请求关闭连接,进入 LAST-ACK 状态。
  4. 客户端 发送 ACK ,并开始等待,服务端在接受到应答后关闭连接。客户端再等待 2 MSL(报文最大生存时间)后关闭。

为什么四次

跟握手为什么三次类似,四次挥手要保证双端都能够正常关闭连接
在四次挥手时,正常关闭连接的流程是:可以关闭连接、关闭连接
注意在一端确认自己可以关闭连接后不能立即关闭连接,因为要保证对方也可以关闭连接才能真正的关闭连接
按照这个思路,就会有很有趣的解释:

  • 第一次挥手:为客户端可以关闭连接,客户端不确认客户端可以关闭连接
  • 第二、三次挥手:服务端已得知客户端可以关闭连接,并让自己可以关闭连接。
  • 第四次挥手:客户端发送了 ACK 包则为,客户端确认了双方都可以关闭连接(注意是可以),开始等待,服务端接收到了 ACK 意味服务端也确认了双方都可以关闭连接,此时由服务端首先关闭连接,此时客户端在等待完成后就确认了对方已经关闭连接,此时自己也真正的关闭了连接。
第二三次为什么不能像握手一样合并

第二次挥手时可能服务端还有要发送的数据没有发完,所以不能确认可以关闭连接,要保证服务端没有数据要发送了在确认可以关闭连接,防止出错。

第四次挥手后为什么客户端要等待 2MSL 才关闭

首先是为什么要等:最后发出的ACK包可能不会传递到服务端,导致服务端迟迟接受不到回应,这时服务端就会重发 FIN 包来确认关闭连接,如果客户端不等待的话在这种情况就会导致服务端迟迟不能正常关闭,相当于服务端不能确认 客户端确认服务端可以关闭
然后是为什么要等待 2MSL :比较合理的解释是:,网络中可能存在来自发送方的数据包,当这些发
送方的数据包被接收方处理后又会向对方发送响应,所以一来一回需要等待 2 倍的时间。

非正常关闭

很多事情并不会是一帆风顺的,连接也是,总会有那么点特殊情况,比如拉电闸,遇到这种情况怎么办呢?

TCP 保活机制

定义一个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP 保活机制会开始作用,每隔一个时间间隔,发送一个探测报文,该探测报文包含的数据非常少,如果连续几个探测报文都没有得到响应,则认为当前的 TCP 连接已经死亡,系统内核将错误信息通知给上层应用程序。
这个机制保证了 TCP 一端非正常关闭能让另一端不会持续维持连接。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 21:14:47  更:2022-10-08 21:16:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:27:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码