互联网TCP/IP五层模型(一)「建议收藏」

互联网TCP/IP五层模型(一)

大家好,又见面了,我是全栈君。

转载自:阮一峰

我们每天使用互联网。你是否想过,它是怎样实现的?

全世界几十亿台电脑,连接在一起,两两通信。

上海的某一块网卡送出信号,洛杉矶的还有一块网卡竟然就收到了。两者实际上根本不知道对方的物理位置。你不认为这是非常奇妙的事情吗?

互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Suite)。

它们对电脑怎样连接和组网,做出了详尽的规定。理解了这些协议,就理解了互联网的原理。

以下就是我的学习笔记。由于这些协议实在太复杂、太庞大,我想整理一个简洁的框架,帮助自己从整体上把握它们。为了保证简单易懂,我做了大量的简化,有些地方并不全面和精确,可是应该可以说清楚互联网的原理。

=================================================

互联网协议入门

作者:阮一峰

互联网TCP/IP五层模型(一)「建议收藏」

一、概述

1.1 五层模型

互联网的实现,分成好几层。

每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。

用户接触到的,仅仅是最上面的一层。根本没有感觉到以下的层。

要理解互联网,必须从最下层開始。自下而上理解每一层的功能。

怎样分层有不同的模型,有的模型分七层,有的分四层。我认为。把互联网分成五层,比較easy解释。

互联网TCP/IP五层模型(一)「建议收藏」

如上图所看到的。最底下的一层叫做”实体层”(Physical Layer),最上面的一层叫做”应用层”(Application Layer),中间的三层(自下而上)各自是”链接层”(Link Layer)、”网络层”(Network Layer)和”传输层”(Transport Layer)。越以下的层,越靠近硬件;越上面的层。越靠近用户。

它们叫什么名字,事实上并不重要。

仅仅须要知道,互联网分成若干层就能够了。

1.2 层与协议

每一层都是为了完毕一种功能。为了实现这些功能。就须要大家都遵守共同的规则。

大家都遵守的规则。就叫做”协议”(protocol)。

互联网的每一层,都定义了非常多协议。这些协议的总称。就叫做”互联网协议”(Internet Protocol Suite)。它们是互联网的核心,以下介绍每一层的功能。主要就是介绍每一层的主要协议。

二、实体层

我们从最底下的一层開始。

电脑要组网,第一件事要干什么?当然是先把电脑连起来,能够用光缆、电缆、双绞线、无线电波等方式。

互联网TCP/IP五层模型(一)「建议收藏」

这就叫做”实体层”,它就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。

三、链接层

3.1 定义

单纯的0和1没有不论什么意义,必须规定解读方式:多少个电信号算一组?每一个信号位有何意义?

这就是”链接层”的功能,它在”实体层”的上方,确定了0和1的分组方式。

3.2 以太网协议

早期的时候。每家公司都有自己的电信号分组方式。逐渐地,一种叫做“以太网”(Ethernet)的协议,占领了主导地位。

以太网规定。一组电信号构成一个数据包。叫做”帧”(Frame)。

每一帧分成两个部分:标头(Head)和数据(Data)。

互联网TCP/IP五层模型(一)「建议收藏」

“标头”包括数据包的一些说明项。比方发送者、接受者、数据类型等等。”数据”则是数据包的详细内容。

“标头”的长度。固定为18字节。

“数据”的长度。最短为46字节。最长为1500字节。因此,整个”帧”最短为64字节。最长为1518字节。假设数据非常长,就必须切割成多个帧进行发送。

3.3 MAC地址

上面提到。以太网数据包的”标头”,包括了发送者和接受者的信息。

那么。发送者和接受者是怎样标识呢?

以太网规定。连入网络的全部设备。都必须具有”网卡”接口。数据包必须是从一块网卡,传送到还有一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。

互联网TCP/IP五层模型(一)「建议收藏」

每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通经常使用12个十六进制数表示。

互联网TCP/IP五层模型(一)「建议收藏」

前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就能够定位网卡和数据包的路径了。

3.4 广播

定义地址仅仅是第一步,后面还有很多其它的步骤。

首先,一块网卡怎么会知道还有一块网卡的MAC地址?

回答是有一种ARP协议,能够解决问题。这个留到后面介绍,这里仅仅须要知道,以太网数据包必须知道接收方的MAC地址,然后才干发送。

其次,就算有了MAC地址。系统如何才干把数据包准确送到接收方?

回答是以太网採用了一种非常”原始”的方式。它不是把数据包准确送到接收方,而是向本网络内全部计算机发送,让每台计算机自己推断。是否为接收方。

互联网TCP/IP五层模型(一)「建议收藏」

上图中。1号计算机向2号计算机发送一个数据包,同一个子网络的3号、4号、5号计算机都会收到这个包。它们读取这个包的”标头”,找到接收方的MAC地址,然后与自身的MAC地址相比較,假设两者同样,就接受这个包,做进一步处理。否则就丢弃这个包。

这样的发送方式就叫做”广播”(broadcasting)。

有了数据包的定义、网卡的MAC地址、广播的发送方式,”链接层”就能够在多台计算机之间传送数据了。

四、网络层

4.1 网络层的由来

以太网协议,依靠MAC地址发送数据。

理论上,单单依靠MAC地址。上海的网卡就能够找到洛杉矶的网卡了。技术上是能够实现的。

可是,这样做有一个重大的缺点。

以太网採用广播方式发送数据包,全部成员人手一”包”。不仅效率低,并且局限在发送者所在的子网络。也就是说,假设两台计算机不在同一个子网络,广播是传只是去的。这样的设计是合理的。否则互联网上每一台计算机都会收到全部包,那会引起灾难。

互联网是无数子网络共同组成的一个巨型网络。非常像想象上海和洛杉矶的电脑会在同一个子网络,这差点儿是不可能的。

互联网TCP/IP五层模型(一)「建议收藏」

因此,必须找到一种方法。可以区分哪些MAC地址属于同一个子网络。哪些不是。假设是同一个子网络,就採用广播方式发送。否则就採用”路由”方式发送。

(”路由”的意思。就是指怎样向不同的子网络分发数据包。这是一个非常大的主题。本文不涉及。

)遗憾的是,MAC地址本身无法做到这一点。

它仅仅与厂商有关。与所处网络无关。

这就导致了”网络层”的诞生。它的作用是引进一套新的地址,使得我们可以区分不同的计算机是否属于同一个子网络。

这套地址就叫做”网络地址”,简称”网址”。

于是。”网络层”出现以后。每台计算机有了两种地址。一种是MAC地址,还有一种是网络地址。两种地址之间没有不论什么联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们仅仅是随机组合在一起。

网络地址帮助我们确定计算机所在的子网络。MAC地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上能够判断。必然是先处理网络地址。然后再处理MAC地址。

4.2 IP协议

规定网络地址的协议。叫做IP协议。它所定义的地址,就被称为IP地址。

眼下,广泛採用的是IP协议第四版。简称IPv4。

这个版本号规定,网络地址由32个二进制位组成。

互联网TCP/IP五层模型(一)「建议收藏」

习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。

互联网上的每一台计算机。都会分配到一个IP地址。

这个地址分成两个部分。前一部分代表网络。后一部分代表主机。

比方,IP地址172.16.254.1。这是一个32位的地址。假定它的网络部分是前24位(172.16.254)。那么主机部分就是后8位(最后的那个1)。

处于同一个子网络的电脑,它们IP地址的网络部分必然是同样的,也就是说172.16.254.2应该与172.16.254.1处在同一个子网络。

可是,问题在于单单从IP地址,我们无法推断网络部分。还是以172.16.254.1为例,它的网络部分。究竟是前24位,还是前16位,甚至前28位。从IP地址上是看不出来的。

那么,如何才干从IP地址。推断两台计算机是否属于同一个子网络呢?这就要用到还有一个參数”子网掩码”(subnet mask)。

所谓”子网掩码”,就是表示子网络特征的一个參数。

它在形式上等同于IP地址,也是一个32位二进制数字。它的网络部分所有为1,主机部分所有为0。

比方。IP地址172.16.254.1,假设已知网络部分是前24位。主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

知道”子网掩码”。我们就能推断,随意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0)。然后比較结果是否同样。假设是的话,就表明它们在同一个子网络中。否则就不是。

比方,已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0。请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算。结果都是172.16.254.0。因此它们在同一个子网络。

总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址。还有一个是确定哪些地址在同一个子网络。

4.3 IP数据包

依据IP协议发送的数据,就叫做IP数据包。不难想象。当中必然包含IP地址信息。

可是前面说过,以太网数据包仅仅包括MAC地址。并没有IP地址的栏位。

那么是否须要改动数据定义。再加入一个栏位呢?

回答是不须要。我们能够把IP数据包直接放进以太网数据包的”数据”部分。因此全然不用改动以太网的规格。

这就是互联网分层结构的优点:上层的变动全然不涉及下层的结构。

详细来说,IP数据包也分为”标头”和”数据”两个部分。

互联网TCP/IP五层模型(一)「建议收藏」

“标头”部分主要包含版本号、长度、IP地址等信息,”数据”部分则是IP数据包的详细内容。它放进以太网数据包后,以太网数据包就变成了以下这样。

互联网TCP/IP五层模型(一)「建议收藏」

IP数据包的”标头”部分的长度为20到60字节。整个数据包的总长度最大为65,535字节。因此,理论上。一个IP数据包的”数据”部分,最长为65,515字节。前面说过,以太网数据包的”数据”部分,最长仅仅有1500字节。因此,假设IP数据包超过了1500字节,它就须要切割成几个以太网数据包。分开发送了。

4.4 ARP协议

关于”网络层”。还有最后一点须要说明。

由于IP数据包是放在以太网数据包里发送的,所以我们必须同一时候知道两个地址,一个是对方的MAC地址,还有一个是对方的IP地址。

通常情况下。对方的IP地址是已知的(后文会解释),可是我们不知道它的MAC地址。

所以。我们须要一种机制。可以从IP地址得到MAC地址。

这里又能够分成两种情况。

第一种情况。假设两台主机不在同一个子网络,那么其实没有办法得到对方的MAC地址,仅仅能把数据包传送到两个子网络连接处的”网关”(gateway)。让网关去处理。

另外一种情况。假设两台主机在同一个子网络。那么我们能够用ARP协议,得到对方的MAC地址。

ARP协议也是发出一个数据包(包括在以太网数据包中),当中包括它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个”广播”地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址。与自身的IP地址进行比較。

假设两者同样,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。

总之,有了ARP协议之后,我们就能够得到同一个子网络内的主机MAC地址。能够把数据包发送到随意一台主机之上了。

五、传输层

5.1 传输层的由来

有了MAC地址和IP地址,我们已经能够在互联网上随意两台主机上建立通信。

接下来的问题是,同一台主机上有很多程序都须要用到网络。比方,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道。它是表示网页的内容。还是表示在线聊天的内容?

也就是说。我们还须要一个參数,表示这个数据包究竟供哪个程序(进程)使用。这个參数就叫做”port”(port),它事实上是每个使用网卡的程序的编号。每个数据包都发到主机的特定port。所以不同的程序就能取到自己所须要的数据。

“port”是0到65535之间的一个整数,正好16个二进制位。0到1023的port被系统占用。用户仅仅能选用大于1023的port。无论是浏览网页还是在线聊天。应用程序会随机选用一个port,然后与server的对应port联系。

“传输层”的功能,就是建立”port到port”的通信。

相比之下,”网络层”的功能是建立”主机到主机”的通信。仅仅要确定主机和port,我们就能实现程序之间的交流。

因此,Unix系统就把主机+port。叫做”套接字”(socket)。有了它,就能够进行网络应用程序开发了。

5.2 UDP协议

如今。我们必须在数据包中增加port信息,这就须要新的协议。最简单的实现叫做UDP协议,它的格式差点儿就是在数据前面。加上port号。

UDP数据包。也是由”标头”和”数据”两部分组成。

互联网TCP/IP五层模型(一)「建议收藏」

“标头”部分主要定义了发出port和接收port,”数据”部分就是详细的内容。然后,把整个UDP数据包放入IP数据包的”数据”部分,而前面说过,IP数据包又是放在以太网数据包之中的,所以整个以太网数据包如今变成了以下这样:

互联网TCP/IP五层模型(一)「建议收藏」

UDP数据包很easy。”标头”部分一共仅仅有8个字节,总长度不超过65,535字节。正好放进一个IP数据包。

5.3 TCP协议

UDP协议的长处是比較简单,easy实现。可是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。

为了解决问题,提高网络可靠性,TCP协议就诞生了。这个协议很复杂。但能够近似觉得,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。

假设有一个数据包遗失。就收不到确认,发出方就知道有必要重发这个数据包了。

因此,TCP协议可以确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。

TCP数据包和UDP数据包一样。都是内嵌在IP数据包的”数据”部分。

TCP数据包没有长度限制,理论上能够无限长,可是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度。以确保单个TCP数据包不必再切割。

六、应用层

应用程序收到”传输层”的数据,接下来就要进行解读。因为互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。

“应用层”的作用,就是规定应用程序的数据格式。

举例来说,TCP协议能够为各种各样的程序传递数据,比方Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。

这是最高的一层。直接面对用户。它的数据就放在TCP数据包的”数据”部分。因此,如今的以太网的数据包就变成以下这样。

互联网TCP/IP五层模型(一)「建议收藏」

至此,整个互联网的五层结构,自下而上所有讲完了。这是从系统的角度,解释互联网是怎样构成的。下一篇,我反过来,从用户的角度,自上而下看看这个结构是怎样发挥作用,完毕一次网络数据交换的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115642.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • springboot 获取错误信息 exception message

    springboot 获取错误信息 exception message

  • iscsiadm用法简介[通俗易懂]

    iscsiadm用法简介[通俗易懂]已知192.168.14.112节点,存在目标器 iqn.2015.06.cn.hrbyg.www.ygcs.c0a802b8:wzg,未设置CHAP,存在目标器 iqn.2015

  • 分布式日志传输系统Databus(一)–系统介绍「建议收藏」

    分布式日志传输系统Databus(一)–系统介绍「建议收藏」Databus系统是微博DIP团队开源的分布式日志传输系统。它是一个分布式、高可用的,用于采集和移动大量日志数据的服务。它基于流式数据的简单而灵活的架构,具备健壮性和容错性,具有故障转移与恢复机制。它

  • 为matlab GUI添加背景图片

    为matlab GUI添加背景图片为matlabGUI添加背景图片为GUI添加一个背景图片,不仅可以让我们的界面变得漂亮大气上档次,而且软件对与用户的交互更加友好。用C或者C++写过软件界面的人都知道,这件事情可以轻而易举的办到,那么问题来了,怎么为matlab的GUI添加一个背景图片呢?其实这个操作也很简单,但是如果是第一次做这个,可能需要折腾好久。在这里我希望跟大家分享一下这个小技巧,避免大家遇到同样的问题再走弯路。欢迎…

  • 什么是入门_初学板和专业板的区别

    什么是入门_初学板和专业板的区别1、Python,Pycharm,Anaconda区别与联系子曰:“工欲善其事,必先利其器”学习Python就需要有编译Python程序的软件,一般情况下,我们选择在Python官网下载对应版本的Python然后用记事本编写,再在终端进行编译运行即可。而在许多教程都推荐使用Anaconda和Pycharm,这到底是什么?对于小白来说,很懵逼。在学习Java时,正常情况选择安装JD…

  • 关于might_sleep的一点说明【转】

    关于might_sleep的一点说明【转】

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号