<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>tcp on 当以读书通世事</title><link>https://www.sakaay.com/network/tcp/</link><description>Recent content in tcp on 当以读书通世事</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 23 Dec 2025 23:46:43 +0800</lastBuildDate><atom:link href="https://www.sakaay.com/network/tcp/index.xml" rel="self" type="application/rss+xml"/><item><title>4.5 如何优化 TCP?</title><link>https://www.sakaay.com/network/tcp_optimize/</link><pubDate>Tue, 23 Dec 2025 23:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_optimize/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="45-如何优化-tcp"&gt;4.5 如何优化 TCP?&lt;/h1&gt;&#10;&lt;p&gt;TCP 性能的提升不仅考察 TCP 的理论知识，还考察了对于操作系统提供的内核参数的理解与应用。&lt;/p&gt;&#10;&lt;p&gt;TCP 协议是由操作系统实现，所以操作系统提供了不少调节 TCP 的参数。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://cdn.xiaolincoding.com/gh/xiaolincoder/ImageHost/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/TCP-%E5%8F%82%E6%95%B0/2.jpg" alt="Linux TCP 参数"&gt;&lt;/p&gt;&#10;&lt;p&gt;如何正确有效的使用这些参数，来提高 TCP 性能是一个不那么简单事情。我们需要针对 TCP 每个阶段的问题来对症下药，而不是病急乱投医。&lt;/p&gt;</description></item><item><title>4.1 TCP 三次握手与四次挥手面试题</title><link>https://www.sakaay.com/network/tcp_interview/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_interview/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="41-tcp-三次握手与四次挥手面试题"&gt;4.1 TCP 三次握手与四次挥手面试题&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;任 TCP 虐我千百遍，我仍待 TCP 如初恋。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;巨巨巨巨长的提纲，发车！发车！&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://img-blog.csdnimg.cn/1310bf5ed78e4c8186481c47719e0793.png" alt=""&gt;&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;PS：本次文章不涉及 TCP 流量控制、拥塞控制、可靠性传输等方面知识，这些知识在这篇：&lt;a href="https://mp.weixin.qq.com/s/Tc09ovdNacOtnMOMeRc_uA" target="_blank" rel="noopener"&gt;你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗？看完图解就不愁了&lt;/a&gt;&#10;&lt;/p&gt;</description></item><item><title>4.10 四次挥手中收到乱序的 FIN 包会如何处理？</title><link>https://www.sakaay.com/network/out_of_order_fin/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/out_of_order_fin/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="410-四次挥手中收到乱序的-fin-包会如何处理"&gt;4.10 四次挥手中收到乱序的 FIN 包会如何处理？&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;收到个读者的问题，他在面试鹅厂的时候，被搞懵了，因为面试官问了他这么一个网络问题：&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://img-blog.csdnimg.cn/39f790ee7a45473587c8fe3e08e01ba4.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5p6XY29kaW5n,size_17,color_FFFFFF,t_70,g_se,x_16" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;不得不说，鹅厂真的很喜欢问网络问题，而且爱问异常情况下的网络问题，之前也有篇另外一个读者面试鹅厂的网络问题：「&lt;a href="https://blog.csdn.net/qq_34827674/article/details/117922761" target="_blank" rel="noopener"&gt;被鹅厂面怕了！&lt;/a&gt;&#10;」。&lt;/p&gt;</description></item><item><title>4.11 在 TIME_WAIT 状态的 TCP 连接，收到 SYN 后会发生什么？</title><link>https://www.sakaay.com/network/time_wait_recv_syn/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/time_wait_recv_syn/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="411-在-time_wait-状态的-tcp-连接收到-syn-后会发生什么"&gt;4.11 在 TIME_WAIT 状态的 TCP 连接，收到 SYN 后会发生什么？&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;周末跟朋友讨论了一些 TCP 的问题，在查阅《Linux 服务器高性能编程》这本书的时候，发现书上写了这么一句话：&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://img-blog.csdnimg.cn/img_convert/65739ee668999bda02aa9236aad6437f.png" alt="图片"&gt;&lt;/p&gt;&#10;&lt;p&gt;书上说，处于 TIME_WAIT 状态的连接，在收到相同四元组的 SYN 后，会回 RST 报文，对方收到后就会断开连接。&lt;/p&gt;</description></item><item><title>4.12 TCP 连接，一端断电和进程崩溃有什么区别？</title><link>https://www.sakaay.com/network/tcp_down_and_crash/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_down_and_crash/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="412-tcp-连接一端断电和进程崩溃有什么区别"&gt;4.12 TCP 连接，一端断电和进程崩溃有什么区别？&lt;/h1&gt;&#10;&lt;p&gt;有位读者找我说，他在面试腾讯的时候，遇到了这么个问题：&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://img-blog.csdnimg.cn/2021061513401120.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0ODI3Njc0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"&gt;&lt;/p&gt;&#10;&lt;p&gt;这个属于 &lt;strong&gt;TCP 异常断开连接&lt;/strong&gt;的场景，这部分内容在我的「图解网络」还没有详细介绍过，这次就乘着这次机会补一补。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://img-blog.csdnimg.cn/20210615134020994.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0ODI3Njc0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"&gt;&lt;/p&gt;&#10;&lt;p&gt;这个问题有几个关键词：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;没有开启 keepalive；&lt;/li&gt;&#10;&lt;li&gt;一直没有数据交互；&lt;/li&gt;&#10;&lt;li&gt;进程崩溃；&lt;/li&gt;&#10;&lt;li&gt;主机崩溃；&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;我们先来认识认识什么是 TCP keepalive 呢？&lt;/p&gt;</description></item><item><title>4.13 拔掉网线后，原本的 TCP 连接还存在吗？</title><link>https://www.sakaay.com/network/tcp_unplug_the_network_cable/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_unplug_the_network_cable/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="413-拔掉网线后原本的-tcp-连接还存在吗"&gt;4.13 拔掉网线后，原本的 TCP 连接还存在吗？&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;今天，聊一个有趣的问题：&lt;strong&gt;拔掉网线几秒，再插回去，原本的 TCP 连接还存在吗？&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;可能有的同学会说，网线都被拔掉了，那说明物理层被断开了，那在上层的传输层理应也会断开，所以原本的 TCP 连接就不会存在的了。就好像，我们拨打有线电话的时候，如果某一方的电话线被拔了，那么本次通话就彻底断了。&lt;/p&gt;</description></item><item><title>4.14 HTTPS 中 TLS 和 TCP 能同时握手吗？</title><link>https://www.sakaay.com/network/tcp_tls/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_tls/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="414-https-中-tls-和-tcp-能同时握手吗"&gt;4.14 HTTPS 中 TLS 和 TCP 能同时握手吗？&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;有位读者在面试的时候，碰到这么个问题：&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://img-blog.csdnimg.cn/img_convert/4d07f1ab714bb4b3efefbf5655b2f81e.png" alt="图片"&gt;&lt;/p&gt;&#10;&lt;p&gt;面试官跟他说 &lt;strong&gt;HTTPS 中的 TLS 握手过程可以同时进行三次握手&lt;/strong&gt;，然后读者之前看我的文章是说「&lt;em&gt;先进行 TCP 三次握手，再进行 TLS 四次握手&lt;/em&gt;」，他跟面试官说了这个，面试官说他不对，他就感到很困惑。&lt;/p&gt;</description></item><item><title>4.14 tcp_tw_reuse 为什么默认是关闭的？</title><link>https://www.sakaay.com/network/tcp_tw_reuse_close/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_tw_reuse_close/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="414-tcp_tw_reuse-为什么默认是关闭的"&gt;4.14 tcp_tw_reuse 为什么默认是关闭的？&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;上周有个读者在面试微信的时候，&lt;strong&gt;被问到既然打开 net.ipv4.tcp_tw_reuse 参数可以快速复用处于 TIME_WAIT 状态的 TCP 连接，那为什么 Linux 默认是关闭状态呢？&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://img-blog.csdnimg.cn/img_convert/23f1aea82a0b7c37f1031524600626f1.png" alt="图片"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://img-blog.csdnimg.cn/img_convert/076e60b984028bf3ad762eb2bd7ed0f3.png" alt="图片"&gt;&lt;/p&gt;&#10;&lt;p&gt;好家伙，真的问好细节！&lt;/p&gt;&#10;&lt;p&gt;当时看到读者这个问题的时候，我也是一脸懵逼的，经过我的一番思考后，终于知道怎么回答这题了。&lt;/p&gt;</description></item><item><title>4.15 TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗？</title><link>https://www.sakaay.com/network/tcp_http_keepalive/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_http_keepalive/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="415-tcp-keepalive-和-http-keep-alive-是一个东西吗"&gt;4.15 TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗？&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;之前有读者问了我这么个问题：&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://img-blog.csdnimg.cn/20210715090027883.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0ODI3Njc0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"&gt;&lt;/p&gt;&#10;&lt;p&gt;大致问题是，&lt;strong&gt;TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗？&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;这是个好问题，应该有不少人都会搞混，因为这两个东西看上去太像了，很容易误以为是同一个东西。&lt;/p&gt;&#10;&lt;p&gt;事实上，&lt;strong&gt;这两个完全是两样不同东西&lt;/strong&gt;，实现的层面也不同：&lt;/p&gt;</description></item><item><title>4.16 TCP 协议有什么缺陷？</title><link>https://www.sakaay.com/network/tcp_problem/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_problem/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="416-tcp-协议有什么缺陷"&gt;4.16 TCP 协议有什么缺陷？&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;写的多了后，忽然思考一个问题，TCP 通过序列号、确认应答、超时重传、流量控制、拥塞控制等方式实现了可靠传输，看起来它很完美，事实真的是这样吗？TCP 就没什么缺陷吗？&lt;/p&gt;&#10;&lt;p&gt;所以，今天就跟大家聊聊，TCP 协议有哪些缺陷？主要有四个方面：&lt;/p&gt;</description></item><item><title>4.17 如何基于 UDP 协议实现可靠传输？</title><link>https://www.sakaay.com/network/quic/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/quic/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="417-如何基于-udp-协议实现可靠传输"&gt;4.17 如何基于 UDP 协议实现可靠传输？&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;我记得之前在群里看到，有位读者字节一面的时候被问到：「&lt;strong&gt;如何基于 UDP 协议实现可靠传输？&lt;/strong&gt;」&lt;/p&gt;&#10;&lt;p&gt;很多同学第一反应就会说把 TCP 可靠传输的特性（序列号、确认应答、超时重传、流量控制、拥塞控制）在应用层实现一遍。&lt;/p&gt;</description></item><item><title>4.18 TCP 和 UDP 可以使用同一个端口吗？</title><link>https://www.sakaay.com/network/port/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/port/</guid><description>&lt;h1 id="418-tcp-和-udp-可以使用同一个端口吗"&gt;4.18 TCP 和 UDP 可以使用同一个端口吗？&lt;/h1&gt;&#10;&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;之前有读者在字节面试的时候，被问到：&lt;strong&gt;TCP 和 UDP 可以同时监听相同的端口吗？&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://cdn.xiaolincoding.com/gh/xiaolincoder/network/port/%E6%8F%90%E9%97%AE.png" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;关于端口的知识点，还是挺多可以讲的，比如还可以牵扯到这几个问题：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;多个 TCP 服务进程可以同时绑定同一个端口吗？&lt;/li&gt;&#10;&lt;li&gt;重启 TCP 服务进程时，为什么会出现“Address in use”的报错信息？又该怎么避免？&lt;/li&gt;&#10;&lt;li&gt;客户端的端口可以重复使用吗？&lt;/li&gt;&#10;&lt;li&gt;客户端 TCP 连接 TIME_WAIT 状态过多，会导致端口资源耗尽而无法建立新的连接吗？&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;所以，这次就跟大家盘一盘这些问题。&lt;/p&gt;</description></item><item><title>4.19 服务端没有 listen，客户端发起连接建立，会发生什么？</title><link>https://www.sakaay.com/network/tcp_no_listen/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_no_listen/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="419-服务端没有-listen客户端发起连接建立会发生什么"&gt;4.19 服务端没有 listen，客户端发起连接建立，会发生什么？&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;早上看到一个读者说面字节三面的时候，问了这个问题：&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://img-blog.csdnimg.cn/img_convert/5f5b9c96c86580e3f14978d5c10c7721.jpeg" alt="图片"&gt;&lt;/p&gt;&#10;&lt;p&gt;这位读者的角度是以为服务端没有调用 listen，客户端会 ping 不通服务器，很明显，搞错了。&lt;/p&gt;&#10;&lt;p&gt;ping 使用的协议是 ICMP，属于网络层的事情，而面试官问的是传输层的问题。&lt;/p&gt;</description></item><item><title>4.2 TCP 重传、滑动窗口、流量控制、拥塞控制</title><link>https://www.sakaay.com/network/tcp_feature/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_feature/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="42-tcp-重传滑动窗口流量控制拥塞控制"&gt;4.2 TCP 重传、滑动窗口、流量控制、拥塞控制&lt;/h1&gt;&#10;&lt;p&gt;TCP &lt;strong&gt;巨复杂&lt;/strong&gt;，它为了保证可靠性，用了巨多的机制来保证，真是个「伟大」的协议，写着写着发现这水太深了。。。&lt;/p&gt;&#10;&lt;p&gt;本文的全部图片都是小林绘画的，非常的辛苦且累，不废话了，直接进入正文，Go！&lt;/p&gt;&#10;&lt;p&gt;相信大家都知道 TCP 是一个可靠传输的协议，那它是如何保证可靠的呢？&lt;/p&gt;</description></item><item><title>4.20 没有 accept，能建立 TCP 连接吗？</title><link>https://www.sakaay.com/network/tcp_no_accpet/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_no_accpet/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="420-没有-accept能建立-tcp-连接吗"&gt;4.20 没有 accept，能建立 TCP 连接吗？&lt;/h1&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;来源：公众号@小白 debug&#10;原文地址：&lt;a href="https://mp.weixin.qq.com/s/oPX_JoZUaLn6sW54yppfvA" target="_blank" rel="noopener"&gt;阿里二面：没有 accept，能建立 TCP 连接吗？&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;这次，我们来讨论一下，&lt;strong&gt;没有 accept，能建立 TCP 连接吗？&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;下面这个动图，是我们平时客户端和服务端建立连接时的代码流程。&lt;/p&gt;</description></item><item><title>4.21 用了 TCP 协议，数据一定不会丢吗？</title><link>https://www.sakaay.com/network/tcp_drop/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_drop/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="421-用了-tcp-协议数据一定不会丢吗"&gt;4.21 用了 TCP 协议，数据一定不会丢吗？&lt;/h1&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;来源：公众号@小白 debug&lt;/p&gt;&#10;&lt;p&gt;原文地址：&lt;a href="https://mp.weixin.qq.com/s/XNJoaVnYT1SxHsdNWeAaUw" target="_blank" rel="noopener"&gt;用了 TCP 协议，数据一定不会丢吗？&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;大家后，我是小林。&lt;/p&gt;&#10;&lt;p&gt;问大家一句：TCP 是一个可靠的传输协议，那它一定能保证数据不丢失吗？&lt;/p&gt;&#10;&lt;p&gt;这次，就跟大家探讨这个问题。&lt;/p&gt;&#10;&lt;h2 id="数据包的发送流程"&gt;数据包的发送流程&lt;/h2&gt;&#10;&lt;p&gt;首先，我们两个手机的绿皮聊天软件客户端，要通信，中间会通过它们家服务器。大概长这样。&lt;/p&gt;</description></item><item><title>4.22 TCP 四次挥手，可以变成三次吗？</title><link>https://www.sakaay.com/network/tcp_three_fin/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_three_fin/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="422-tcp-四次挥手可以变成三次吗"&gt;4.22 TCP 四次挥手，可以变成三次吗？&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;有位读者面美团时，被问到：&lt;strong&gt;TCP 四次挥手中，能不能把第二次的 ACK 报文，放到第三次 FIN 报文一起发送？&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://img-blog.csdnimg.cn/6e02477ccea24facbf7eada108158bc2.png" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;虽然我们在学习 TCP 挥手时，学到的是需要四次来完成 TCP 挥手，但是&lt;strong&gt;在一些情况下，TCP 四次挥手是可以变成 TCP 三次挥手的&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>4.3 TCP 实战抓包分析</title><link>https://www.sakaay.com/network/tcp_tcpdump/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_tcpdump/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="43-tcp-实战抓包分析"&gt;4.3 TCP 实战抓包分析&lt;/h1&gt;&#10;&lt;p&gt;为了让大家更容易「看得见」TCP，我搭建不少测试环境，并且数据包抓很多次，花费了不少时间，才抓到比较容易分析的数据包。&lt;/p&gt;&#10;&lt;p&gt;接下来丢包、乱序、超时重传、快速重传、选择性确认、流量控制等等 TCP 的特性，都能「一览无余」。&lt;/p&gt;&#10;&lt;p&gt;没错，我把 TCP 的&amp;quot;衣服扒光&amp;quot;了，就为了给大家看的清楚，嘻嘻。&lt;/p&gt;</description></item><item><title>4.4 TCP 半连接队列和全连接队列</title><link>https://www.sakaay.com/network/tcp_queue/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_queue/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="44-tcp-半连接队列和全连接队列"&gt;4.4 TCP 半连接队列和全连接队列&lt;/h1&gt;&#10;&lt;p&gt;网上许多博客针对增大 TCP 半连接队列和全连接队列的方式如下：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;增大 TCP 半连接队列的方式是增大 /proc/sys/net/ipv4/tcp_max_syn_backlog；&lt;/li&gt;&#10;&lt;li&gt;增大 TCP 全连接队列的方式是增大 listen() 函数中的 backlog；&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;这里先跟大家说下，&lt;strong&gt;上面的方式都是不准确的。&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>4.6 如何理解是 TCP 面向字节流协议？</title><link>https://www.sakaay.com/network/tcp_stream/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/tcp_stream/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="46-如何理解是-tcp-面向字节流协议"&gt;4.6 如何理解是 TCP 面向字节流协议？&lt;/h1&gt;&#10;&lt;p&gt;有个读者问我，这么个问题：&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;TCP 是面向字节流的协议，UDP 是面向报文的协议？这里的「面向字节流」和「面向报文」该如何理解。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="如何理解字节流"&gt;如何理解字节流？&lt;/h2&gt;&#10;&lt;p&gt;之所以会说 TCP 是面向字节流的协议，UDP 是面向报文的协议，是因为操作系统对 TCP 和 UDP 协议的&lt;strong&gt;发送方的机制不同&lt;/strong&gt;，也就是问题原因在发送方。&lt;/p&gt;</description></item><item><title>4.7 为什么 TCP 每次建立连接时，初始化序列号都要不一样呢？</title><link>https://www.sakaay.com/network/isn_deff/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/isn_deff/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="47-为什么-tcp-每次建立连接时初始化序列号都要不一样呢"&gt;4.7 为什么 TCP 每次建立连接时，初始化序列号都要不一样呢？&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;为什么 TCP 每次建立连接时，初始化序列号都要不一样呢？&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;接下来，我一步一步给大家讲明白，我觉得应该有不少人会有类似的问题，所以今天再肝一篇！&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;为什么 TCP 每次建立连接时，初始化序列号都要不一样呢？&lt;/p&gt;</description></item><item><title>4.8 SYN 报文什么时候情况下会被丢弃？</title><link>https://www.sakaay.com/network/syn_drop/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/syn_drop/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="48-syn-报文什么时候情况下会被丢弃"&gt;4.8 SYN 报文什么时候情况下会被丢弃？&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;之前有个读者在秋招面试的时候，被问了这么一个问题：SYN 报文什么时候情况下会被丢弃？&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://img-blog.csdnimg.cn/img_convert/d4df0c85e08f66f6a2aa2038af73adcc.png" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;好家伙，现在面试都问那么细节了吗？&lt;/p&gt;&#10;&lt;p&gt;不过话说回来，这个问题跟工作上也是有关系的，因为我就在工作中碰到这么奇怪的时候，客户端向服务端发起了连接，但是连接并没有建立起来，通过抓包分析发现，服务端是收到 SYN 报文了，但是并没有回复 SYN+ACK（TCP 第二次握手），说明 SYN 报文被服务端忽略了，然后客户端就一直在超时重传 SYN 报文，直到达到最大的重传次数。&lt;/p&gt;</description></item><item><title>4.9 已建立连接的 TCP，收到 SYN 会发生什么？</title><link>https://www.sakaay.com/network/challenge_ack/</link><pubDate>Tue, 23 Dec 2025 15:46:43 +0800</pubDate><guid>https://www.sakaay.com/network/challenge_ack/</guid><description>&lt;div class="ad-block"&gt;&#10;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2897720906666216" data-ad-slot="2668661755" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&#10;&lt;/div&gt;&#10;&lt;h1 id="49-已建立连接的-tcp收到-syn-会发生什么"&gt;4.9 已建立连接的 TCP，收到 SYN 会发生什么？&lt;/h1&gt;&#10;&lt;p&gt;大家好，我是小林。&lt;/p&gt;&#10;&lt;p&gt;昨晚有位读者问了我这么个问题：&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://img-blog.csdnimg.cn/ea1c6e0165f04232ab02046132e63d0f.jpg" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;大概意思是，一个已经建立的 TCP 连接，客户端中途宕机了，而服务端此时也没有数据要发送，一直处于 Established 状态，客户端恢复后，向服务端建立连接，此时服务端会怎么处理？&lt;/p&gt;</description></item></channel></rss>