<?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://xiaoyu-25p.pages.dev/tags/tcp%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B/</link>
        <description>Recent content in Tcp三次握手 on 小雨</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language><atom:link href="https://xiaoyu-25p.pages.dev/tags/tcp%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>一文看懂 TCP/IP：用生活场景理解网络协议</title>
            <link>https://xiaoyu-25p.pages.dev/p/%E4%B8%80%E6%96%87%E7%9C%8B%E6%87%82-tcp/ip%E7%94%A8%E7%94%9F%E6%B4%BB%E5%9C%BA%E6%99%AF%E7%90%86%E8%A7%A3%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/</link>
            <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
            <guid>https://xiaoyu-25p.pages.dev/p/%E4%B8%80%E6%96%87%E7%9C%8B%E6%87%82-tcp/ip%E7%94%A8%E7%94%9F%E6%B4%BB%E5%9C%BA%E6%99%AF%E7%90%86%E8%A7%A3%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/</guid>
            <description>&lt;h3 id=&#34;1引入&#34;&gt;1、引入&#xA;&lt;/h3&gt;&lt;p&gt;你可以把网络协议 想象成人与人之间的礼仪行为，不同的场合有不同的礼仪行为，人是实施不同礼仪行为的主体。&lt;/p&gt;&#xA;&lt;p&gt;同样，网络设备是实施网络协议的主体，网络设备通过运行网络协议与其他的网络设备进行交流。同样的道理，你的电脑想要与网络设备交流，也要与网络设备一样运行网络协议，网络协议也是一个软件，是以系统组件的方式安装在你的电脑的操作系统里的。想象一下，你想在你的电脑上通过QQ与朋友聊天的前提是不是你的电脑和朋友的电脑上都安装有QQ这个软件？&#xA;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;328px&#34; data-flex-grow=&#34;137&#34; height=&#34;254&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://img.xiaoyuwell.top/PicGo/20260519174405167.png&#34; width=&#34;348&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;2以信件为例拆解-tcpip-的核心逻辑&#34;&gt;2、以信件为例：拆解 TCP/IP 的核心逻辑&#xA;&lt;/h3&gt;&lt;p&gt;在日常生活中，我们要传递信息，以前最常用的手段是邮寄信件，想象一下你写信寄信的过程，写信产生数据，寄信传递数据，标准的信件格式是要在信封上写“&lt;strong&gt;收信人地址”和“寄信人地址”（由此引入IP地址）&lt;/strong&gt;，&lt;/p&gt;&#xA;&lt;p&gt;“&lt;strong&gt;收信人地址&lt;/strong&gt;”对应数据包里IP头部中的“&lt;strong&gt;目的ip地址&lt;/strong&gt;”，&lt;/p&gt;&#xA;&lt;p&gt;“&lt;strong&gt;寄信人地址&lt;/strong&gt;”对应数据包里IP头部中的“&lt;strong&gt;源ip地址&lt;/strong&gt;”，&lt;/p&gt;&#xA;&lt;p&gt;写上寄信、收信两个地址就可以保证信件可以邮寄到目的地了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;561px&#34; data-flex-grow=&#34;233&#34; height=&#34;228&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://img.xiaoyuwell.top/PicGo/20260519174539917.png&#34; width=&#34;533&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;但是问题来了，信件邮寄到目的地址后由谁来收？你把信寄到xx地址，这里有着n个人，那你这封信邮寄给谁？收信人不明确，邮局就算帮你把信件送到这个地址，也没办法帮你投递到具体的收信人。&lt;/p&gt;&#xA;&lt;p&gt;第二步：明确 “交给谁”—— 端口号的作用&lt;/p&gt;&#xA;&lt;p&gt;所以信件需要补充 “收件人姓名” 和 “寄件人姓名”，精准定位到具体接收人。这对应 TCP 协议里的 “端口号”。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;426px&#34; data-flex-grow=&#34;177&#34; height=&#34;388&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://img.xiaoyuwell.top/PicGo/20260519174606005.png&#34; width=&#34;690&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;收件人姓名 → TCP 头部的 “目的端口号”（告诉设备 “要交给哪个应用”）&lt;/p&gt;&#xA;&lt;p&gt;寄件人姓名 → TCP 头部的 “源端口号”（告诉对方 “信息来自哪个应用”）&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;端口：&lt;/strong&gt;&#xA;所以我们要在信件上添加收信人姓名和寄信人姓名（由此引入端口号），&lt;/p&gt;&#xA;&lt;p&gt;这个时候收件人姓名就对应数据包里TCP协议头部中的目的端口号，&lt;/p&gt;&#xA;&lt;p&gt;寄信人姓名对应数据包里TCP协议头部中的源端口号。&lt;/p&gt;&#xA;&lt;h3 id=&#34;3我们再来对比传递信件与传递数据包的过程&#34;&gt;3、我们再来对比传递信件与传递数据包的过程：&#xA;&lt;/h3&gt;&lt;p&gt;3.1.首先是位于XXX的小明给YYY的小红通过QQ发送了一条消息，李小明的电脑将此消息打包成TCP数据包发送到计算机网络中，计算机网络通过数据包中的目的IP地址把该数据包准确传递到小红的电脑。&lt;/p&gt;&#xA;&lt;p&gt;3.2.小红的电脑收到了小明的电脑发送过来的数据包，但是小红的电脑上同时运行有多个程序（例如图中的QQ和微信），虽然小红的电脑知道这个数据包是传输给它的，但是它不知道该把这个数据包中的数据交给那个程序&lt;/p&gt;&#xA;&lt;p&gt;3.3.针对以上的问题。如果我们使用数据包结构中的源端口号和目的端口号，根据不同的程序使用不同的端口号来发送和接受数据，这样数据包就能像邮寄信件一样准确投递到具体的电脑上指定的程序了。例如我们指定QQ和微信使用的端口号分别是8000和8080，那么只要你的电脑接收的数据包里目的端口号是8000，那这个数据包就是传输给QQ的&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;数据包传递全过程：像寄信一样精准投递&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;场景：小明（XXX 地址）通过 QQ 给小红（YYY 地址）发消息&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;小明的电脑将消息打包成 TCP 数据包，包中包含：&lt;/p&gt;&#xA;&lt;p&gt;IP 头部：目的 IP（小红电脑 IP）、源 IP（小明电脑 IP）&lt;/p&gt;&#xA;&lt;p&gt;TCP 头部：目的端口（QQ 专属端口 8000）、源端口（小明电脑 QQ 的临时端口）&lt;/p&gt;&#xA;&lt;p&gt;应用数据：聊天消息内容&#xA;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;426px&#34; data-flex-grow=&#34;177&#34; height=&#34;388&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://img.xiaoyuwell.top/PicGo/20260519174832173.png&#34; width=&#34;690&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;4为什么需要网络协议我们看下图的简单类比&#34;&gt;4、为什么需要网络协议，我们看下图的简单类比：&#xA;&lt;/h3&gt;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;415px&#34; data-flex-grow=&#34;173&#34; height=&#34;400&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://img.xiaoyuwell.top/PicGo/20260519174935116.png&#34; width=&#34;693&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;从上图可以看出，我们邮寄信件只是想要把我们写在信纸信息传递 出去，对于我们来说，邮寄信件需要购买信封和邮票，这对于我们来说是没有意义的，甚至我们会觉得连信纸都是多余的，因为还要购买信纸，我们只是想传递信息而已，信封、邮票和信纸对于我们来说是传递信息的额外花销，但是没有这些花销，你的信息就无法通过邮局传递。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;426px&#34; data-flex-grow=&#34;177&#34; height=&#34;388&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://img.xiaoyuwell.top/PicGo/20260519175001876.png&#34; width=&#34;690&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;同理，在计算机网络里也是一样的，我们的通过计算机网络传递信息也需要额外的花销，这些花销体现在计算机网络里就是TCP/IP的各种协议数据包的头部（除去应用层数据之外的其他信息）。&lt;/p&gt;&#xA;&lt;p&gt;你要知道计算机网络里的数据交换都是像我们日常邮寄信件一样通过各种的数据包来传递的，理解了数据包的作用之后你就应该开始学习计算机网络是如何把数据包传输到目的地的？例如我们的电脑在生成数据包时是怎么知道对方电脑的ip地址的，（由此引入DNS）？我们的信件是最开始是通过邮局帮我们邮寄的，那么我们的电脑的数据包应该由谁来帮我们传输呢？（由此引入网关），网关又是如何帮我们把数据包传输到目的地的？（由此引入各种路由协议）。&lt;/p&gt;&#xA;&lt;p&gt;所以，在学习网络协议，就要先把一些基本的协议的作用和工作过程搞清楚，网络设备还没智能到人脑的程度，它是由人类创造出来的，它的工作过程肯定是符合人类的交流习惯，按照人类的交流习惯来设计的。所以要以人类的思维方式去理解这些协议。&lt;/p&gt;&#xA;&lt;p&gt;例如：&lt;/p&gt;&#xA;&lt;p&gt;你给别人打电话，不可能电话一接通你就啪啦啪啦地说一大通，万一对方接通电话后因为有事还没来得及倾听呢？这不太符合正常人类的交流习惯。一般是电话接通后，双方一般会有个交互的过程，一般是你说一声“你好”，然后对方也回复一声“你好”，双方通过各自一句“你好”明确对方的注意力都放在了电话沟通上，然后你们双方就可以开始交流了，这才是正常的人类交流方式，这个过程体现在计算机网络里就是网络协议！我们通过TCP协议在两台电脑建立网络连接之前要先发数据包进行沟通，沟通后再建立连接，然后才是信息的传输。而UDP协议就类似于我们的校园广播，广播内容已经通过广播站播放出去了，你能不能听到，那就与广播站无关了，正常情况下，不可能你说没注意听然后再让广播站再播放一次广播内容。&#xA;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;426px&#34; data-flex-grow=&#34;177&#34; height=&#34;388&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://img.xiaoyuwell.top/PicGo/20260519175026459.png&#34; width=&#34;690&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;网络广播：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;对于某一个网络的网络广播，只要发送一个网络广播包，这个子网里的所有电脑都能收到这些广播包，这是一个很方便的通知机制，但是会增加对广播数据不感兴趣主机的处理负荷。类似我们的校园广播，校园广播一开启播放，校园里的所有人都能听到，但是不是所有人都对广播内容感兴趣，有些人选择倾听，有些人选择忽略。但不管你是倾听还是忽略，广播的声音都会传到你的耳边。&#xA;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;426px&#34; data-flex-grow=&#34;177&#34; height=&#34;388&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://img.xiaoyuwell.top/PicGo/20260519175052716.png&#34; width=&#34;690&#34;&gt;&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
