07 2023 档案

摘要:1 问题现象 有一次并发情况下,多个线程共用一个 QueryWrapper 导致查询的结果异常,比如: 我们来看下执行的结果: 发现有两个的执行结果异常的,我们再看一下执行的SQL发现: 2 原因分析 我们思考的出发点就是为什么有的SQL后边是空的呢,我们看我们的SQL: 那我们看看 sqlSegm 阅读全文
posted @ 2023-07-26 06:17 酷酷- 阅读(495) 评论(0) 推荐(0) 编辑
摘要:1 问题现象 记一次,一个 Mapper接口,用了多个 QueryWrapper 导致查询的结果异常,比如: 我们直接看执行的SQL语句: 2 原因分析 遇到问题,我们要从现象中学会分析,发现第二个查询的参数取到第一个的了,串台了呀,那我们是不是要打印下每个 QueryWrapper 的SQL片段出 阅读全文
posted @ 2023-07-26 06:16 酷酷- 阅读(333) 评论(0) 推荐(0) 编辑
摘要:1 前言 我们接着上节来看看,我们都知道 SpinrgBoot背后有我们的Web服务器啊,那它是怎么停的呢?往下看。 2 SpringBoot应用的优雅停机 除了 微服务的无损下线,作为 SpringBoot应用, 还有 单体服务优雅停机的需求: 处理没有完成的请求,注意,不再接收新的请求 池化资源 阅读全文
posted @ 2023-07-25 07:23 酷酷- 阅读(3411) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看 SpringBoot 该怎么停机,怎么优雅的停机。 2 何为优雅关机 就是为确保应用关闭时,通知应用进程释放所占用的资源 线程池,shutdown(不接受新任务等待处理完)还是shutdownNow(调用Thread.interrupt进行中断) socket 链接,比如: 阅读全文
posted @ 2023-07-25 07:08 酷酷- 阅读(5923) 评论(1) 推荐(2) 编辑
摘要:1 前言 这节我们来看看 Rocket MQ的一个小东西,就是我们平时发消息,消息里边有个 messageId,它是全局唯一的,就好奇是谁生成的?什么时候生成的?怎么生成的?我们跟进源码看下。 我这里看的是云消息队列里的开发包哈。 2 源码分析 2.1 消息发送过程 Rocket MQ作为消息中间件 阅读全文
posted @ 2023-07-21 07:20 酷酷- 阅读(859) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看 IP 协议相关技术。 跟 IP 协议相关的技术也不少,接下来说说与 IP 协议相关的重要且常见的技术。 DNS 域名解析 ARP 与 RARP 协议 DHCP 动态获取 IP 地址 NAT 网络地址转换 ICMP 互联网控制报文协议 IGMP 因特网组管理协议 2 DNS 阅读全文
posted @ 2023-07-20 06:30 酷酷- 阅读(78) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看 IP的一些基础知识。 2 IP 基本认识 IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。 网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。 网络层与数据链路层有什么关系呢? 有的小伙伴分不清 IP(网络层) 和 MAC ( 阅读全文
posted @ 2023-07-20 06:30 酷酷- 阅读(193) 评论(0) 推荐(0) 编辑
摘要:1 前言 在日常生活或工作中,我们在判断与对方网络是否畅通,使用的最多的莫过于 ping 命令了。 那你知道 ping 是如何工作的吗?这节我们就来看看哈。 2 IP协议的助手 —— ICMP 协议 ping 是基于 ICMP 协议工作的,所以要明白 ping 的工作,首先我们先来熟悉 ICMP 协 阅读全文
posted @ 2023-07-19 06:12 酷酷- 阅读(120) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是 断网了,还能 ping 通 127.0.0.1 吗?如果把 127.0.0.1 换成 0.0.0.0 或 localhost 会怎么样呢?你知道这几个IP有什么区别吗? 话不多说,我们直接开车。拔掉网线,断网。 然后在控制台输入ping 127.0.0.1。 $ 阅读全文
posted @ 2023-07-19 06:12 酷酷- 阅读(81) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是 TCP 四次挥手,可以变成三次吗? 2 刨析 虽然我们在学习 TCP 挥手时,学到的是需要四次来完成 TCP 挥手,但是在一些情况下, TCP 四次挥手是可以变成 TCP 三次挥手的。 而且在用 wireshark 工具抓包的时候,我们也会常看到 TCP 挥手过程 阅读全文
posted @ 2023-07-18 06:13 酷酷- 阅读(125) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是 有 accept,能建立 TCP 连接吗? 2 刨析 下面这个动图,是我们平时客户端和服务端建立连接时的代码流程。 对应的是下面一段简化过的服务端伪代码。 int main() { /*Step 1: 创建服务器端监听socket描述符listen_fd*/ li 阅读全文
posted @ 2023-07-18 06:13 酷酷- 阅读(72) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是 服务端没有 listen,客户端发起连接建立,会发生什么? 为服务端没有调用 listen,客户端会 ping 不通服务器,如果你这么想那你就搞错了。 ping 使用的协议是 ICMP,属于网络层的事情,而问的方向是传输层的问题。 针对这个问题,服务端如果只 bi 阅读全文
posted @ 2023-07-17 06:20 酷酷- 阅读(101) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是 TCP 和 UDP 可以使用同一个端口吗? 关于端口的知识点,还是挺多可以讲的,比如还可以牵扯到这几个问题: 多个 TCP 服务进程可以同时绑定同一个端口吗? 重启 TCP 服务进程时,为什么会出现“Address in use”的报错信息?又该怎么避免? 客户端 阅读全文
posted @ 2023-07-17 06:19 酷酷- 阅读(466) 评论(0) 推荐(1) 编辑
摘要:1 前言 这节我们来看个问题,就是 TCP 协议有什么缺陷? 很多同学第一反应就会说把 TCP 可靠传输的特性(序列号、确认应答、超时重传、流量控制、拥塞控制)在应用层实现一遍。 实现的思路确实这样没错,但是有没有想过,既然 TCP 天然支持可靠传输,为什么还需要基于 UDP 实现可靠传输呢?这不是 阅读全文
posted @ 2023-07-16 12:31 酷酷- 阅读(260) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是 TCP 协议有什么缺陷? TCP 通过序列号、确认应答、超时重传、流量控制、拥塞控制等方式实现了可靠传输,看起来它很完美,事实真的是这样吗?TCP 就没什么缺陷吗? 所以,今天就跟大家聊聊,TCP 协议有哪些缺陷?主要有四个方面: 升级 TCP 的工作很困难; T 阅读全文
posted @ 2023-07-16 12:31 酷酷- 阅读(97) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是 TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗? 事实上,这两个完全是两样不同东西,实现的层面也不同: HTTP 的 Keep-Alive,是由应用层(用户态) 实现的,称为 HTTP 长连接; TCP 的 Keepalive,是由  阅读全文
posted @ 2023-07-16 12:30 酷酷- 阅读(48) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是 HTTPS 中 TLS 和 TCP 能同时握手吗? 通常情况下,HTTPS 建立连接的过程,先进行 TCP 三次握手,再进行 TLS 四次握手,比如,下面这个 TLSv1.2 的 基于 RSA 算法的四次握手过程: 不过 TLS 握手过程的次数还得看版本。 TLS 阅读全文
posted @ 2023-07-14 06:33 酷酷- 阅读(106) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是 拔掉网线后, 原本的 TCP 连接还存在吗? 可能有的同学会说,网线都被拔掉了,那说明物理层被断开了,那在上层的传输层理应也会断开,所以原本的 TCP 连接就不会存在的了。就好像, 我们拨打有线电话的时候,如果某一方的电话线被拔了,那么本次通话就彻底断了。 真的是 阅读全文
posted @ 2023-07-14 06:33 酷酷- 阅读(108) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是 TCP 连接,一端断电和进程崩溃有什么区别? 这个属于 TCP 异常断开连接的场景,这部分内容在我的「图解网络」还没有详细介绍过,这次就乘着这次机会补一补。 这个问题有几个关键词: 没有开启 keepalive; 一直没有数据交互; 进程崩溃; 主机崩溃; 我们先 阅读全文
posted @ 2023-07-13 07:40 酷酷- 阅读(126) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是 TIME_WAIT 状态持续时间过短或者没有,会有什么问题? 或者net.ipv4.tcp_tw_reuse 参数可以快速复用处于 TIME_WAIT 状态的 TCP 连接,那为什么 Linux 默认是关闭状态呢?也就是为什么要保留这个 TIME_WAIT 状态呢 阅读全文
posted @ 2023-07-13 07:28 酷酷- 阅读(126) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是在 TCP 正常挥手过程中,处于 TIME_WAIT 状态的连接,收到相同四元组的 SYN 后会发生什么? 问题现象如下图,左边是服务端,右边是客户端: 2 先说结论 在跟大家分析 TCP 源码前,我先跟大家直接说下结论。 针对这个问题,关键是要看 SYN 的「序列 阅读全文
posted @ 2023-07-13 07:27 酷酷- 阅读(69) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是四次挥手中收到乱序的 FIN 包会如何处理? 比如,如果 FIN 报文比数据包先抵达客户端,此时 FIN 报文其实是一个乱序的报文,此时客户端的 TCP 连接并不会从 FIN_WAIT_2 状态转换到 TIME_WAIT 状态。 因此,我们要关注到点是看「在 FIN 阅读全文
posted @ 2023-07-12 07:20 酷酷- 阅读(279) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是一个已经建立的 TCP 连接,客户端中途宕机了,而服务端此时也没有数据要发送,一直处于 Established 状态,客户端恢复后,向服务端建立连接,此时服务端会怎么处理? TCP 连接是由「四元组」唯一确认的。然后这个场景中,客户端的 IP、服务端 IP、目的端口 阅读全文
posted @ 2023-07-12 07:19 酷酷- 阅读(523) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是TCP 半连接队列和全连接队列满了会发生什么?又该如何应对? 2 什么是 TCP 半连接队列和全连接队列? 在 TCP 三次握手的时候,Linux 内核会维护两个队列,分别是: 半连接队列,也称 SYN 队列; 全连接队列,也称 accepet 队列; 服务端收到客 阅读全文
posted @ 2023-07-11 06:10 酷酷- 阅读(604) 评论(0) 推荐(1) 编辑
摘要:1 前言 这节我们来看个问题,就是SYN 报文什么时候情况下会被丢弃? 客户端向服务端发起了连接,但是连接并没有建立起来,通过抓包分析发现,服务端是收到 SYN 报文了,但是并没有回复 SYN+ACK(TCP 第二次握手),说明 SYN 报文被服务端忽略了,然后客户端就一直在超时重传 SYN 报文, 阅读全文
posted @ 2023-07-11 06:10 酷酷- 阅读(403) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题,就是为什么 TCP 每次建立连接时,初始化序列号都要不一样呢? 2 剖析 为什么 TCP 每次建立连接时,初始化序列号都要不一样呢? 主要原因是为了防止历史报文被下一个相同四元组的连接接收。 TCP 四次挥手中的 TIME_WAIT 状态不是会持续 2 MSL 时长,历 阅读全文
posted @ 2023-07-11 06:09 酷酷- 阅读(140) 评论(0) 推荐(0) 编辑
摘要:1 前言 看了一篇有意思的文章,我们来看看。 我们线上有一个 dubbo 的服务,出现大量的 CLOSE_WAIT 状态的连接,这些 CLOSE_WAIT 的连接出现以后不会消失,这就有点意思了,于是做了一下分析记录如下。 首先从 TCP 的角度看一下 CLOSE_WAIT CLOSE_WAIT 状 阅读全文
posted @ 2023-07-10 06:08 酷酷- 阅读(143) 评论(0) 推荐(0) 编辑
摘要:1 前言 TCP 性能的提升不仅考察 TCP 的理论知识,还考察了对于操作系统提供的内核参数的理解与应用。 TCP 协议是由操作系统实现,所以操作系统提供了不少调节 TCP 的参数。 如何正确有效的使用这些参数,来提高 TCP 性能是一个不那么简单事情。我们需要针对 TCP 每个阶段的问题来对症下药 阅读全文
posted @ 2023-07-10 06:08 酷酷- 阅读(808) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们通过抓包实际来看看丢包、乱序、超时重传、快速重传、选择性确认、流量控制等等 TCP 的特性。 2 显形“不可见”的网络包 网络世界中的数据包交互我们肉眼是看不见的,它们就好像隐形了一样,我们对着课本学习计算机网络的时候就会觉得非常的抽象,加大了学习的难度。 还别说,我自己在大学的时 阅读全文
posted @ 2023-07-10 06:07 酷酷- 阅读(1007) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看关于TCP 的重传机制、滑动窗口、流量控制、拥塞控制。 2 重传机制 TCP 实现可靠传输的方式之一,是通过序列号与确认应答。 在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息。 但在错综复杂的网络,并不一定能如上图那么顺利能正常 阅读全文
posted @ 2023-07-10 06:07 酷酷- 阅读(521) 评论(1) 推荐(0) 编辑
摘要:1 前言 这节我们来看看关于Sokcet编程的一些知识和问题。 2 针对 TCP 应该如何 Socket 编程? 服务端和客户端初始化 socket,得到文件描述符; 服务端调用 bind,将 socket 绑定在指定的 IP 地址和端口; 服务端调用 listen,进行监听; 服务端调用 acce 阅读全文
posted @ 2023-07-05 06:26 酷酷- 阅读(144) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示