2、来瞎说了,从互联网到TCP/IP协议栈
内容简介
2024-07-16
这一系列的主要内容
我们网上搜“FPGA以太网”就会搜到一堆介绍三速以太网和phy芯片的相关文章,还有UDP、ARP、ICMP的实现方法。这也是不少卖卡商家提供的教程。不少公司也确实这样用,之前我还写过。面试闻起来也是比较浮皮潦草的。其实也有更深层的用法,但大多都是中心、华为人家那边在搞,没有谁闲着跟他们强份额。但现在随时原型验证、DPU的兴起,玩智能网卡的人越来越多,所网络卸载、RDMA的也成了一个方向,所以FPGA在网络方面所能接触的也就越深了,例如100G以太网的PCS层实现,Vlan卸载等等。
这系列文章呢,就就介绍下网络协议,主要围绕TCP、UDP、交换、路由、socket函数以及网卡驱动相关。
参考资料包括:
1、《计算机网络-自顶向下的设计方法》
2、TCP-IP详解卷1:协议(第一版)
3、TCP-IP详解卷1:协议(第二版)
4、TCP-IP详解卷2:实现
5、图解TCP/IP(第五版)
6、Wireshark
上述资料均在网盘,回复“网络”可获取,或者在公众号点击“资料下载”弹出链接,包含所有资料内容。
何为互联网?
为何百度一下就能搜出一堆靠谱不靠谱的东西么?
为何我们打开视频app就能看到手机上原本没有的电视剧了么?
为何刷支付宝后你的钱是怎么跑到对方账户上去的么?
我也不知道具体的实现方案,但我知道这些是靠互联网实现的。互联网(internet),伟大的发明。
因为互联网,让我们可解相思之苦,饱口腹之欲,键盘间指点江山慷慨激昂,屏幕前掩灯夜战遨游九州。
多好,形形色色、林林总总,互联网构建起了李白都想不到的生活方式。
互联网是什么?“指的是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。——百度百科”
互联网是信息高速公路,好比我们的交通网,我们的家就是这样一个又一个的站点或者说节点,通过不同的交通工具和航道实现家家互联,你几乎可以去你想去的任何地方,当然,有些地方不是人人可去的。我们的手机、电脑这是终端就好比我们的一个又一个小家,连接在这个互联网上,就可以使用这个网的每一条交织的线,通过这些线,我们就可以共享网络资源了。其实仔细想想,网购和逛街购物是的方式是一样的,不过是被另一种方式给代劳了。
互联网为我们搭建起了一个信息交互网,和电网、水网、路网是一样的,只不过电网通的是电,水网通的是水,交通网通的是各种交通工具,那互联网呢?通的是数据。所以说,互联网是什么?就是一个巨大的网,我们的手机、电脑就是这网上的一个有一个节点,你可以与他人共享信息网络通道进行数据的交换,但前提你得知道那个人在哪。
区分几个互联网名词
关于互联网,我们会听到互联网、物联网、英特网、以太网、万维网、广域网、局域网、计算机网络和TCP/IP协议些词汇并对此傻傻的分不清。今天我们就来理一理给他们分分类,一边我们更好的理解接下来的内容。
在说上述词汇之前,我们先来解释一个常见词“网络”,网我们都见过,络,缠也。
什么是网络,就是由节点和连线构成的东西。
那么什么是计算机网络呢?把计算机连起就是计算机网络,简单粗暴吧?
我想肯定有人会反驳说胡扯,拿我几根绳子把计算机连在一块是不是也是计算机网络?
我觉得没问题,就是计算机网络,只不过这个网络是没有用处的,当初计算机网络的设想就是这样把计算机连起来但也能实现之间的数据交换。如下图所示,两台电脑用网线连在一起,设置个IP,就能PING通,就连上了,就是计算机网络了。所以计算机网络是什么?就是“连接分散计算机设备以实现信息传递的系统——百度百科”
互联网?凡是能彼此通信的设备组成的网络就叫互联网。所以,即使仅有两台机器,不论用何种技术使其彼此通信,也叫互联网。但要注意和计算机网络的区分。互联网侧重在网,计算机网络描述的是整个连接设备,即计算机网络>互联网,这也就是为什么我们学习的课本叫《计算机网络》而不是互联网了。
英特网?我们一般做这样的区分,英特网是Internet,互联网internet。也就是说英特网是一个专有名词,有时候我们认为这两者没什么区别,甚至说只不过是一个是英译一个是直译。但细分起来还是有区别的,英特网指的是最大的互联网,也称为环球网,所以我们可以认为互联网包含英特网。
万维网?就是WWW是World Wide Web的简称,它是软件协议,通过一种叫HTML的标记语言来实现我们在浏览器上看文字图片等。所以说,万维网是基于互联网架构的应用。
以太网描述的是咱们这个互联网织的一种方式。 IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容,也就是用以太网织网的规范。以太网是我们非常数据的一种网络连接形式,电脑的网口就是以太网连接的接口,其实它也是一种局域网技术,局域网就是局部地区计算机连接起来的一个封闭网络,
互联网的实现方式
互联网的实现包括两个部分,一是修路,二是定规则。
其实互联网是一个非常宽泛的概念,可以说他是由局域网、广域网组成,也可以说广域网、局域网都是互联网的子集。对于初学者来说,没有必要去理得清清楚楚,我们应该抓主放次,先把最关键的,最符合我们专业需求的学会了再扩展其他的。
开头就说了,互联网的实现需要干两件事,一修路二定规。修路就是织网,搭建数据交换的链路,从我们日常生活中也可以总结出来,就是电磁波、电缆、光缆等。这其中也涉及到了些电气标准,例如以太网技术、令牌环网技术、ATM网技术、帧中继技术,这些技术都是修路的技术标准。就好像我们的秦始皇“书同文,车同轨”一样,在什么样的场景要修什么样的路。
定规则就是定双方交流的规则,目的就是让互联网上的各个节点都能听懂其他节点说什么,不会出现我说吃饭了没,他回答刚从厕所出来这种情况。无规矩不成方圆嘛,鸡同鸭讲是无法构建起互联网的。这个规则呢?我们一般称之为协议。也就是我们注重要说的TCP/IP协议栈。
TCP/IP协议栈它不是一个协议,而是一堆协议,也就说为了实现网络个节点间的数据交换,我们要遵从一堆协议,有的书本称之为“簇”或者说“群”,如下图所示所示。
搭建知道TCP、IP分别是什么意思么?TCP(Transmission Control Protocol)传输控制协议,IP(Internet Protocol)网际互连协议,互联网我们也称之为英特网也就是Internet,是不是发现了什么?IP就是英特网的协议。
TCP/IP协议栈是什么
TCP/IP是什么?是互联网进行数据传输的规矩。
我们利用互联网看视频打游戏刷新闻、购物导航付款等等都是在规矩下进行的。其实无论我们利用互联网干什么,其实都是接收和发送数据,游戏、视频不过是传输数据内容和处理方式不同罢了,而数据传输内容的方式是不变的,就好像寄快递,把物品打包贴上收件地址交给快递小哥发出,或空运陆运甚至海运,到了目的地再分拣运输签收拆包装。我们可以寄任何合乎规定的东西也可以收任何物品,无外乎这个方式,或者说这个规矩,再或者说这个步骤,什么步骤?打包——贴签——运输——分拣——运输——签收——拆包装。互联网亦是如此,它为了满足我们干不同的事情(购物导航……),用不同的传输方式(以太网、WIFI……),也规定了数据传输的规矩,或者说方式,再或者更专业的说法,这个协议。这个协议像极了我们的物流行业,数据就是抽象的物品,也经过了一个抽象的“打包——贴签——运输——分拣——运输——签收——拆包装”过程,TCP/IP协议的作用就是对这个过程的每一步骤做了规定,就好像是物流法规一样。利用互联网进行的数据都要经过这样一个过程,这个过程我们称为分层传输(其实就是分步骤),分层(分步骤)有个标准或者说参考,这个参考我们称之为参考模型,这个模型就是我们熟知的7层模型或4层模型。每一层都有相应的规定,这个规定我们称之为协议,例如TCP、UDP、IP、ICMP等等,这些协议规定了具体的传输规范,以适用于不同场景和传输要求,这些互联网传输数据的协议(规则)我们统称为TCP/IP协议栈(簇)。这也就是为什么前文我们说TCP/IP是规矩(协议)的代表了。
上文我们用一个例子来对TCP/IP协议栈做了解释,接下来我们就从专业的方面说一下为什么要分层?
我们先说一个词——“耦合性”。耦合性不知道大家熟悉不,有时候也称之为耦合度,这是用来表示两个模块的关联程度的。我们做工程一般都要分好几个模块来做,这样便于维护和协作,只要每个模块的接口信号不变,模块内容爱怎么折腾就怎么折腾,这种低耦合度就特别利于维护和移植。如果几个模块混在一块纠缠不清,能牵一发动全身,那就不好办了,会挨骂的,当年刚工作时候,我就被批过,记忆犹新。
回过头来,我们再说互联网,全球以亿计的设备实现互连,那么必然需要一个低耦合度的模型来规范。就好像水管螺丝,只要尺寸合适,都可以往上怼。所以互联网也要这样,它是一个网,巨大的网,终端设备就是网交织的一个又一个节点,只要按照人家的要求“接”上去就是联网了。就比如我们连跟网线设个IP就能看电视一样。
所以说,TCP/IP体系采用分层的目的就是降低耦合性,理清数据解析打包的步骤,更利于维护和扩展。
下面我们就来看看TCP/IP协议栈的分层模型。我们一般会看到如图1-2所示的分层模型,这是从《图解TCP/IP》这本书里面截下来的,左边是OSI模型,右边是TCP/IP协议栈的参考模型。这样一类比,可以理解TCP/IP协议的参考模型是OSI模型的简化版,实际上也差不多是这样,OSI模型像是个理论基础,但不适用实际情况,所以设计人员们群策群力的搞出来这样一个四层模型以供应用。注意我说的是四层,但图明明是五层嘛,这是因为硬件这一层或者说物理层是开放的,留给各厂家自由发挥了,以满足不同应用场景的不同需求。
“利用分层的体系结构,我们可以讨论一个定义良好的、大而复杂系统的特定部分。这种简化本身由于提供模块化而具有很高价值,这使实现由层提供的服务易于改变。只要该层对其上面的层提供相同的服务,并且使用来自下面层次的相同服务,当某层的实现变化时,改系统的其余部分保持不变。对于大而复杂且需要不断更新的系统,改变服务的实现而不影响该系统其他组件是分层的另一个重要优点。——《计算机网络》”
牛掰,竟然看完了
快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~
有建议、有需求、有疑问、联系我