0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样才能详细了解TCP/IP协议细节呢?

dyquk4xk2p3d 来源:车小胖谈网络 2023-01-03 11:40 次阅读

01

在Cisco平台上有一个很有用的Tracebacklog功能,实时记录当前Code运行到特定模块、特定函数,这样一旦系统崩溃、死机的时候,可以有效记录机器是在哪个模块、哪个函数里崩溃的。只要将此Traceback输入解析器,就可以定位是哪个模块出了问题,提交Bug的时候就可以Assign给负责此模块的Team,避免部门之间的推诿。

其实Traceback的原理也很简单,即每进入一个模块,就记录一下实时位置,类似于Debug。

TCP/IP协议如果也拥有类似的traceback日志信息,那么只要用packet触发一下,就可以实时看一个packet如何在TCP/IP内部函数流转,在packet被递交给网卡之前,打印出每一个函数的名称,然后进入TCP/IP源码,按照函数调用的先后次序(流水线)依次进入阅读,只有这样才能详细了解TCP/IP细节。

但是这样的学习门槛很高,源码也不是那么可以轻易看懂。对于大多数读者来说,更容易的方法是先易后难,在开始TCP/IP学习之前,先问自己一个问题,为什么要有TCP/IP协议?

02

计算机网络的标准件

TCP/IP是计算机网络世界的标准件,这些标准件类似于汽车界的标准轮胎、汽车稳定系统ESP,即使看似牛叉的Tesla汽车生产商,也不是所有汽车零部件都是自己生产。除了电池、外壳、软件是自己生产的除外,其他的标准件全部是采购而来。通过使用标准件,平均只要几分钟即可生产一辆汽车。如果不使用标准件而全部采用自研,那生产的周期要大大加长。

既然TCP/IP是标准件,是不是也要像汽车轮胎一样提供标准的接口?否则怎么安装呢? 是的,TCP/IP提供了诸多的标准接口,通过这些标准接口可以有效使用标准件,如DNS、TCP、UDP、IP、ICMP、IGMP、ARP、DHCP等等标准件。当然如果一一介绍这些标准件如何使用,这些标准件内部的工作原理是非常枯燥的,还是以小例子看看这些标准件是如何协作的。

03

一个小例子

在浏览里输入知乎的网址(zhihu.com),然后输入回车,浏览器使用的TCP/IP第一个标准件是什么呢?

读者说,浏览器与知乎服务器通信使用http,而http通常是使用标准件TCP的,那么第一个标准件应该是TCP,对吗? 不对。 TCP这个标准件,对于http来说身份是服务员,尽管TCP身份低微,但是却有鲜明个性。就是任何人差遣自己干活,必须使用IP地址。浏览器不能使用网址(zhihu.com)这个字符串来差遣自己,罢工。

04

标准件之DNS

所以,浏览器使用第一个TCP/IP标准件是DNS。DNS其实就是将知乎的网址(zhihu.com)解析成一个IP地址。有了知乎的IP地址,才能使用TCP这个标准件。

读者会说,DNS域名查询,会使用UDP这个标准件,UDP标准件会使用IP标准件,IP标准件直接会使用以太网卡标准件,对吗? 不对。 以太网卡标准件,作为IP标准件的服务员,尽管身份卑微,但是个性鲜明,凡是让自己干活的客人,必须提供接收方的MAC地址,否则恕不接待。所以IP标准件需要先使用ARP标准件,查询接收方的MAC地址。

读者又说,ARP这个标准件使用的也是以太网卡标准件,没有接收方的MAC地址,以太网卡不是恕不接待的嘛? 是的。 但是ARP使用广播MAC地址(FFFFFFFFFFFF)来查询啊,所以以太网卡不得不执行查询任务啊。 假设一切顺利,ARP得到了回复答案,将ARP答案返回IP标准件。

既然IP标准件拥有了接收方的MAC地址,就可以使用以太网卡标准件,将packet提交给以太网卡,packet的进一步处理就和TCP/IP没有关系了。 不一会DNS查询结果报文返回,按照时间先后次序进入网卡物理层、MAC层、IP标准件、UDP标准件、DNS标准件,由DNS标准件将查询结果告知浏览器。

以上的DNS查询过程,浏览器其实只直接使用了DNS标准件,并没有直接使用其它标准件,其他标准件的使用都是由DNS标准件(进程)间接触发使用。 有读者会说,DNS标准件、ARP标准件功能非常清晰也很有必要,多出来的那两个标准件IP、UDP看起来非常多余,为什么要有它们啊?

05

标准件之IP

问读者一个问题,浏览器查询得到知乎的IP地址,是留给自己看的吗?

很显然不是,IP地址肯定是给互联网看的,准确地说是给互联网上的IP路由器看的,IP路由器看了知乎的IP地址,才能将IP报文快递到知乎服务器,不是吗?

知乎的IP地址写在什么地方呢?

写在packet的IP报文头。

由谁来写

IP标准件,IP标准件所做的工作远不是在包裹的外层添加一个IP封装,并在外包装上写下知乎的IP地址(目的IP)、浏览器主机的IP地址(源IP)那么简单,还需要查询路由表,寻找合适的出口。否则一个主机有多个网卡,连接内网和互联网,主机怎么将访问知乎的packet发给连接互联网的网卡,而不是连接内网的网卡呢?

这就是IP标准件的另外一项主要工作。而要完成种种复杂的工作,最好的方式就是以一个实例instance形式(进程)存在。 至于UDP标准件,先不写,等写完TCP再写。

06

标准件之TCP

再返回第一个问题,浏览器拥有了知乎的IP地址,是否就可以将http request用TCP标准件发出了呢?

依然不行。 TCP这个怪癖狂,非常有个性,要想使用它必须遵守它的怪癖。这个怪癖是什么呢?

Create()

需要先要调用TCP标准件一个Create指定,该指令其实就是在本地内存创建一个结构体(内存),用于缓存TCP连接所有相关的变量、数据,最最重要的是这个结构体有一个全局唯一的ID,浏览器以后要与TCP标准件沟通,只能使用这个唯一的ID(FD)。 Okay,TCP结构体创建成功,是不是就可以发送http request了? 依然不行。

Connect()

TCP需要先建立连接,因为上文的结构体是空白的,需要建立连接将关键参数进行初始化,双方的ISN,MSS、Window Size、SACK、Scaling Window等等。 建立TCP连接,使用TCP标准件的connect接口,填入合适的参数,最重要的是知乎IP地址以及知乎端口,是80还是443,这将决定接下来是否需要使用TLS标准件,前者不需要,后者需要。

这就是大名鼎鼎的TCP三次握手,其实三次握手一点也不准确。真实的含义是三个packet完成连接,浏览器发2个packet,知乎服务器发1个packet。之所以一直就这样以讹传讹到现在也没有纠正,是因为英中翻译这样最顺口。 需要指出的是,TCP尽管有很多怪癖,但是connect环节以及之后的环节还是非常友好的。

你只要调用一次connect即可,至于浏览器是发2个packet连接成功,还是多次重传连接成功,这都是connect接口内部的实现,浏览器无需关心。Connect只会告知浏览器两个结果,成功或者失败。 读者有点急不可耐了,TCP连接建立成功,http request是否就可以发送出去了?

Send()

如果浏览器连接的是知乎TCP 端口80,是的,浏览器需要将httprequest数据通过调用TCP标准件send()接口发送出去,浏览器调用接口时需要携带FD唯一ID。 如果浏览器连接的是知乎TCP 端口443,即https服务,依然不能发送数据。浏览器需要使用TLS标准件,与知乎服务器完成TLS安全加密连接才能发送http request。

07

标准件之TLS

尽管TLS是一个标准件,但是它却工作于TCP之上,即TLS依赖于TCP为自己提供服务。所以TLS不是传统意义上的TCP/IP标准件。

TLS安全连接,使用上文创建的唯一文件标识符FD,使用TCP标准件的Send()、Receive()完成双向数据的收发,当浏览器认证知乎服务器数字证书合法双方协商出加密/解密参数,至此TLS标准件通知安全连接创建成功或者失败。

浏览器的http request终于可以发出了,先流经TLS标准件,添加TLS 报文头,数据加密+数据完整性保护。再流转到TCP标准件,添加TCP报文头并发出,等待对方确认,启动超时重传定时器。再流转到IP标准件,查路由找出口,添加IP报文头。

最后到达网卡,使用IP标准件提供的参数,完成以太网封装,进入发送队列。一旦轮到该报文,由物理层添加Preamble+ SFD + CRC将信号发送出去。 上文标准件调用的过程中,最值得研究的就是TCP,只有它对来自浏览器的http request进行了数据缓存,并启动了定时器。

假设第一次发出的http request在互联网被丢了,对该http request重传的,既不是浏览器、也不是TLS、也不是IP、更不是以太网卡,而是那个有诸多怪癖的TCP,通过多次重传以应对可能丢包对浏览器数据的影响,这也是TCP可靠性的真正含义。浏览器一梭子打出去之后就不管数据死活了,TCP接管数据的重传重任。

08

标准件之UDP

最后说到UDP,看了上文的TCP发数据的过程,是不是觉得很繁琐?是的,不光繁琐而且非常耗时,如果连DNS查询也要使用TCP传输,意味着用户需要等待更长的时间才能开始传输真正的数据,需要用户有更长久的延迟满足,很显然耐心不够的用户会直接放弃。

而有了UDP就没有那么繁琐了,用户使用UDP发送数据数据,无需等待、无需建立连接,直接嗖得一声,数据就UDP、IP、以太网走起,紧凑整洁,节省了用户大量时间。

比如基于IP的实时语音以及视频,为了良好的用户体验,通常需要50ms收发一个包裹,要到达这个低延迟,使用TCP很显然是无法完成的,剩下的唯一选择就是使用UDP来承载。

TCP/IP做为计算机网络标准件的集中营,每一个标准件都可以直接调用,而不全是上文的间接调用。比如用户可以直接使用IP标准件、ICMP标准件写程序,甚至直接调用以太网卡标准件,而不仅仅局限于TCP、UDP、DNS、TLS。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • DNS
    DNS
    +关注

    关注

    0

    文章

    218

    浏览量

    19871
  • DHCP
    +关注

    关注

    0

    文章

    105

    浏览量

    19731
  • TCPIP协议
    +关注

    关注

    0

    文章

    35

    浏览量

    11977

原文标题:如何能够看懂TCP/IP 协议细节?

文章出处:【微信号:良许Linux,微信公众号:良许Linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    怎样才能得到下载的积分

    怎样才能得到下载的积分
    发表于 08-19 20:52

    主流协议TCP/IP协议,对此你了解多少

    主流协议TCP/IP协议,对此你了解多少现在Internet(因特网)使用的主流协议族是
    发表于 08-27 16:13

    LabVIEW TCP/IP协议问量

    两台笔记本用网线直接相连,用TCP测试工具能够正常发送数据,可为什么用labview的“打开TCP连接”总是出现63的错误报警,两台电脑之间的本地连接IP需要怎样设置
    发表于 11-18 21:59

    tcp ip协议详解卷三 下载

    tcp ip协议详解卷三:第三卷的内容细节覆盖了当今TCP/IP编程人员和网络管理员必须熟练掌握
    发表于 05-19 11:52 437次下载
    <b class='flag-5'>tcp</b> <b class='flag-5'>ip</b><b class='flag-5'>协议</b>详解卷三 下载

    TCP/IP协议简介

    TCP/IP协议简介 TCP/IP传输层协议概揽 传输控制
    发表于 06-09 23:07 1430次阅读
    <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>协议</b>简介

    怎样才能使本本达到最优性能

    怎样才能使本本达到最优性能 问题:我是一个最近购本的菜鸟,请问怎样才能使本本达到最优的性能? 回
    发表于 01-25 14:39 525次阅读

    怎样才能实现电磁兼容(EMC)

    怎样才能实现电磁兼容(EMC) 这要从分析形成电磁干扰后果的基本要素出发。由电磁骚扰源发射的电磁能量,经过耦合途径传输到敏感设备,这个过程称为电磁干扰
    发表于 01-26 17:45 789次阅读

    TCP/IP协议,TCP/IP协议内容和作用是什么?

    TCP/IP协议,TCP/IP协议内容和作用是什么? TC
    发表于 03-19 13:55 5828次阅读

    tcp ip协议_什么是tcp ip协议

    什么是tcp ip协议tcp ip协议详解,深刻讲述了tc
    发表于 05-14 16:29 6051次阅读
    <b class='flag-5'>tcp</b> <b class='flag-5'>ip</b><b class='flag-5'>协议</b>_什么是<b class='flag-5'>tcp</b> <b class='flag-5'>ip</b><b class='flag-5'>协议</b>

    Microchip的TCPIP协议栈的详细中文资料免费下载

    。感兴趣的开发人员可以很容易找到许多 Microchip 产品的商业和非商业的 TCP/IP 实现方案。本应用笔记详细说明了 Microchip 公司自己免费提供的 TCP/
    发表于 06-15 08:27 35次下载
    Microchip的<b class='flag-5'>TCP</b>和<b class='flag-5'>IP</b><b class='flag-5'>协议</b>栈的<b class='flag-5'>详细</b>中文资料免费下载

    Microchip TCP/IP协议

    。感兴趣的开发人员可以很容易找到许多 Microchip 产品的商业和非商业的TCP/IP 实现方案。本应用笔记详细说明了 Microchip 公司自己免费提供的 TCP/
    发表于 04-02 14:28 22次下载
    Microchip <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>协议</b>栈

    你真的了解TCP/IP协议吗?

    TCP/IP(TransmissionControlProtocol/InternetProtocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的
    的头像 发表于 07-20 18:09 998次阅读
    你真的<b class='flag-5'>了解</b><b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>协议</b>吗?

    TCPIP协议详解

    此文档详细讲述了TCP-IP协议内容,有想了解的可以看看,丰富自己的知识。
    发表于 07-13 14:25 4次下载

    TCP/IP协议是什么?TCP/IP参考模型的结构是怎样的?

    TCP/IP协议组在OSI模型之前流行。最初的TCP/IP有四层,显然与OSI模型的层不匹配。当OSI模型被引入时,人们相信它将在商业上压倒
    的头像 发表于 08-11 15:26 2964次阅读
    <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>协议</b>是什么?<b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b>参考模型的结构是<b class='flag-5'>怎样</b>的?

    一文了解TCP/IP协议

    TCP/IP协议是现代计算机网络通信的基础,是互联网及局域网广泛使用的一套协议TCP/IP
    的头像 发表于 08-07 15:38 2158次阅读
    一文<b class='flag-5'>了解</b><b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>协议</b>