0
点赞
收藏
分享

微信扫一扫

计算机网络:从入门到放弃


前言

1977年,英国标准化协会向国际标准化组织(ISO)提议,为了定义分布处理之间的通信基础设施,需要一个标准的体系结构。于是在1979年,ISO发布了开放系统互联模型的最终版(OSI七层模型),目的是希望不同供应商的网络能够互相协同工作

计算机网络:从入门到放弃_应用层

虽然ISO组织定义了OSI网络模型,但是在实际使用中,人们把会话层和表示层归入应用层,分层少,简化了结构,更具灵活性。而由于传输层的TCP协议和网络层的IP协议是网络中两个最为重要的协议,所以用TCP/IP表示整个的网络结构

计算机网络:从入门到放弃_tcp/ip_02

OSI分层模型结构作为一种理论上的模型,起着导向的作用。TCP/IP协议才是计算机网络中使用的最广泛的协议

网络模型分层好处:

  • 各层独立,封装后只需提供向上或向下的接口即可
  • 结构灵活,易于维护
  • 易于标准制定

提到标准制定,在Internet整个发展过程中,所有思想和着重点都以一种称为 RFC(Request For Comments)的文档格式记录。针对每一种特定的TCP/IP应用,有相应的 RFC文档。所以,如果你想学习TCP/IP,阅读RFC文档不失为一种方法

网络

很多介绍计算机网络的书籍或文章中,开篇也是像上面这样,介绍OSI七层模型,然后从下往上,分别介绍物理层、数据链路层、网络层等各层的作用和包含的协议

但是这并不符合网络通信的数据传输流程,一条完整的网络报文是从应用层开始,从发送方的TCP/IP协议层层往下,通过该网络的路径,传送到对端的主机,然后从对端的TCP/IP协议层层往上,最终到达接收方的应用层

计算机网络:从入门到放弃_tcp/ip_03

想要回答什么是网络,我们必须要清楚网络的构成有哪些,以及这些构成元素是如何运作的,知道了这些,也就知道了什么是网络

网络构成

网络是由全世界范围内的设备互联在一起形成的一张巨大的“网”,包括传统的计算机设备(PC和服务器等)和非传统的智能设备(手机、手表、家用电器、眼镜、汽车等)。在计算机网络中,我们把这些设备称为主机

虽然这些主机或端设备有几十亿之多,但是它们并不是网络的全部。主机通过物理层链路和分组交换设备连接在一起。物理层链路包括:同轴电缆、光纤、无线电频谱等。分组交换设备包括:交换机路由器

当一台主机或端设备向另一台端设备发送数据时,发送端将数据从应用层层层封装,形成完整的网络报文,从网络接口卡进入通信链路,经由交换机和路由器选择适合的路径,最终发送到接收端主机

主机、交换机和路由器作为网络通信的参与者,它们遵循最基本的协议规则。这就像是两个不同国家的人用不同的语言进行对话,由于语言不同,对话也就不通

计算机网络:从入门到放弃_网络协议_04

网络运行

前面讨论了构成网络的主要元素,但是网络信息是由分布在主机系统中的应用程序发送和接收,这些应用程序处于网络模型的最上层:应用层。它们采用的协议就是应用层协议

应用程序如何才能向另一台主机上的应用发送信息呢?

在TCP/IP网络模型中,应用层往下是传输层,传输层有两个协议:TCP和UDP。应用程序在应用层形成的数据必须经过传输层,换句话说,必须使用TCP和UDP。同样地,传输层往下是网络层,网络层要么使用IPv4协议,要么使用IPv6协议,没有其他可选项

由此可以看出,应用层由于应用程序的不同,通信方式多样,具有多种协议。而且随着以后科技水平的发展,社会的进步,会出现更多繁杂的应用,制定更多符合应用程序功能的应用层协议。但是,它们只要使用TCP/IP网络模型传输数据,就会使用TCP/UDP、IPv4/IPv6…

相对于应用层协议的多样性,传输层以下(包括传输层)的协议更具确定性和标准性,我们可以把它们认为是基础协议层,它们的协议栈统称为网络协议栈

这样的话,应用层对着的就是一个标准的固定的协议栈。一般标准的固定的功能模块,既要让其他的功能能够访问,又不想在访问时影响自己的内部逻辑,通常会对外提供接口,由接口驱动调用

而TCP/IP协议栈的对外接口就是Socket套接字功能,它是由运行网络协议栈内核的系统提供,向上为应用层协议提供网络支撑

计算机网络:从入门到放弃_应用程序_05

上面是主机系统中应用程序所要经过的协议层和使用的协议,当然,列举的协议并不完全,更多的细节请参考下图

计算机网络:从入门到放弃_tcp/ip_06

数据从应用层发出,经过协议栈由网卡发送到物理层链路上后,经过交换式设备后,到达目的主机,最终报文被处理后交给接收端的应用程序,这一系列的操作如果想要实现,报文经过的设备必须使用相同的协议

网络协议

什么是协议?

如果拿人类生活中的例子比较,就像是两个人在互相说话交流,他们必须使用相同的语言才能沟通;如果是两个人书面通信,他们必须使用相同的文字

由此可见,协议是双方共同遵守的约定和规范,而为了使数据在网络上能够从源端到目的端,网络通信的参与方必须遵守相同的规则,这就是网络协议。网络协议最终体现为在网络上传输的数据包的格式和处理顺序。

掌握计算机网络领域知识的过程就是理解网络协议的构成、原理和工作方式的过程

应用层

我们说网络协议是通信的基础, 应用才是目的。如果没有应用程序,网络协议存在的意义在哪里!

应用程序的开发和人类的生活习惯息息相关,人类使用它直面它,却无法“拿走”它。作为实现在操作系统中的程序,为了标识它们,系统会给不同的程序分配唯一标识:进程id(pid)

通信中的主机为了能够把网络数据交给正确的应用程序,需要根据应用程序的进程id识别它。这就像是快递员想要把快递交给收件人,也需要问问你的名字一样

上面讨论过,应用程序所在的应用层发送数据时使用socket套接字驱动网络协议栈形成完整报文,接收端应用程序也是通过套接字接收数据,所以套接字如果想要把数据交给正确的应用程序,就必须知道进程id。套接字在创建时会绑定对应pid

socket-------------------pid

套接字作为连接应用层和协议栈的桥梁,协议栈是不是也应该知道数据要交给哪个socket?

TCP/IP协议在传输层定义了端口的概念,和网络层的IP地址还有传输层协议一起,与socket绑定,用来识别套接字

计算机网络:从入门到放弃_tcp/ip_07

应用程序数据在网络中的处理流程如图所示

计算机网络:从入门到放弃_应用程序_08

一些知名的应用层协议比如HTTP、DNS、DHCP等,在这里就不展开了。用到哪个功能,到时候针对性地学习就可以了

传输层

传输层有两协议一标志,两个协议分别是tcp和udp,一个标志是它的端口号

关于tcp和udp的区别,我们举例说明:

假设创世纪时亚当和夏娃没在一起,他们分隔两个山头,中间是一道无尽的深渊,他们经常互相投送食物,有两种方式

为了符合美国的政治正确,我们用黑人形象

  • 靠谱的,tcp传输

计算机网络:从入门到放弃_应用程序_09

  • 不靠谱的,udp传输

计算机网络:从入门到放弃_网络协议_10

可以看出:

靠谱的投送(tcp传输),在投送前(传输前),需要先打招呼确认彼此(连接确认,tcp三次握手

在投送的食物的过程中(传输数据),对方收到后会回复收到确认(ACK确认)。如果在规定的时间内没有回复收到(未回复ACK),会重新扔一个(重发丢失的数据)

彼此食物扔完后(数据传输完毕),会通知对方,最终离开(连接断开,tcp四次挥手

相比较而言,不靠谱的投送(udp传输),没有打招呼确认(连接确认),也不会回复收到(确认ACK),更不会互告离别(连接断开)

TCP与UDP协议的不同:

TCP协议

UDP协议

提供可靠性传输

不可靠传输

需要建立连接

无需连接

单播

单播、广播、组播

一些流行的应用使用的传输层协议:

计算机网络:从入门到放弃_网络协议_11

可以看出:

需要保证数据正确送达的选择tcp,强调实时性的选择udp

完整的TCP通信过程如下:

计算机网络:从入门到放弃_应用层_12

相比较TCP,UDP报文段的结构更简单,但是它们都有端口号

计算机网络:从入门到放弃_应用层_13

计算机网络:从入门到放弃_应用层_14

端口号是传输层协议tcp和udp里的一个字段,2个字节,最大值65535

网络层

网络层最重要的协议就是IPv4协议和IPv6协议,前者是目前全球主流的网络协议,采用IPv4地址格式通信。后者是未来的趋势,采用IPv6地址格式通信

IPv4

IPv4首部格式如下:

计算机网络:从入门到放弃_应用程序_15

从上图可以看出,IPv4地址有32比特,共4个字节。我们习惯的写法是:每个字节用十进制表示,中间用点号分隔开

192.168.10.1

IPv4地址由网络地址和主机地址组成,网络地址表示主机位于哪个局域网内,主机地址表示主机在这个局域网内的唯一标识

有两种表达方式:

  • 192.168.10.1/24
  • 192.168.10.1,子网掩码:255.255.255.0

根据网络地址和主机地址划分的不同,IPv4地址分为以下几类:

计算机网络:从入门到放弃_应用程序_16

IPv6

IPv6首部格式如下:

计算机网络:从入门到放弃_tcp/ip_17

从上图可以看出,IPv4地址有128比特,共16个字节。我们习惯的写法是:每两个用16进制表示,中间用冒号分隔开

AD80:0000:0000:0000:ABAA:0000:00C2:0002

如果中间连续有多个零,为了书写方便,可以用两个冒号表示

AD80::ABAA:0000:00C2:0002

当然,除了IP地址和首部格式不同外,一些其他处理逻辑也不同,比如根据IP地址寻址MAC采用的协议,分片方式等

目前我国正在推广从IPv4到IPv6迁移

数据链路层

为了将一个数据报从源主机传输到目的主机,数据报必须通过沿端到端路径上的各段链路传输。在通过特定的链路时,传输节点将数据报封装在链路层帧中,并将该帧传送到链路中

假如我想从上海去往昆明旅游,旅行社给我制定的最便利的方案是:自己开车先去往机场,然后坐飞机飞到昆明,到昆明机场后旅行社用大巴车接我去景点

这次旅行中有三段路,每段路都是直达的,虽然它们使用了不同的交通方式,但是它们都能把我送到相邻的地点

我就好比数据报,每个路段好比一条链路,每种运输方式好比一个链路层协议,而旅行社好比一个路由选择协议

由此可以看出,数据链路层实现的是相邻地点之间的数据传输

如何实现呢?采用数据链路层里的mac地址,它是识别局域网中主机的标识

mac地址,网络接口卡的硬件地址,也叫物理地址,有6个字节,每个字节用16进制表示,中间用冒号分隔开

08:00:20:0A:8C:6D

但是如果仔细回想下,从应用层发送数据时,并没有提供对方mac地址的信息。比如说浏览网站,知道的只有对方的网址(通过dns协议解析ip地址),也就是只知道对方的ip地址,而数据链路层又是如何获取的mac地址呢?

这里就需要一个重要的协议,ARP地址解析协议

顾名思义,根据ip地址解析它的mac地址。ARP协议工作原理如下:

计算机网络:从入门到放弃_应用层_18

主机A想要知道ip地址为128.1.2.15的主机的mac地址,于是发送一条arp request报文。由于它是一条广播报文,所以同网段内的所有主机都能收到,但是只有ip地址为128.1.2.15的主机E回复arp reply报文,报文里携带自己的mac地址

以太网

以太网技术在20世纪70年代中期由Bob Metcalfe和David Boggs发明,自从以太网发明以后,经过不断的演化和发展,几乎占领着现有的有线局域网市场。 今天,以太网是到目前为止最流行的有线局域网技术,而且到可能预见的将来它可能仍保持这一位置

以太网是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容

IEEE 802.3标准指定了统一的以太网的技术标准,不同的以太网制式有不同的名称缩写,比如:10BASE-T、10BASE-2、100BASE-T、100BASE-TX、1000BASE-LX等

  • BASE前面的数字指的是以太网的最大传输速率,10、100、1000代表10Mbps,100Mbps、1000Mbps(1Gbps)
  • BASE表示采用基带传输
  • 符号“-”后面的部分表示传输介质,T指的是双绞线,TX表示传输介质2对高质量的双绞线

车载以太网与传统以太网的区别

在汽车网络总线中,首先要考虑的是总线的稳定、安全和抗干扰的能力。所以传统以太网如果想迁移到汽车网络架构中,首先要解决的就是以太网总线的抗干扰的问题。

传统以太网线并不具备很强的抗干扰能力,怎么办呢?于是就有了两线制以太网,通过一对双绞线,实现以太网在汽车网络拓扑中的应用。

所以,传统以太网和车载以太网最大的不同,就是物理层的不同,相比较传统以太网采用2对双绞线即4根线,车载以太网只需要两根线,即两线制。

由此也就带来了网络接口的不同,传统以太网的网络接口是RJ45,而车载以太网是两线制接口。

这从它们的命名上可以看出,传统以太网称之为100base/1000base-Tx,车载以太网称之为100base/1000base-T1,这里的Tx和T1代表的就是传统以太网和车载以太网。

当然,物理层还有些细小的差异,了解的不多,这里就不再讨论。

二层,也就是物理链路层以上,包括TCP/IP协议栈,都是一样的,如果要说差别,也有,比如说车载以太网内节点的网卡IP地址通常是固定的,而传统以太网主机的IP地址一般都是DHCP动态分配的,其他还有比如直接广播地址由于会暴露内部IP地址禁止接收响应啊等等。

既然有这些不同,那么在把TCP/IP协议栈移植到到车内节点上使用时,就需要让以太网保持一致。因此,汽车整车和供应商成立了一个联盟,致力于推广以太网在汽车中的应用,这就是OPEN组织联盟,OPEN联盟又成立了很多技术委员会TC,每个委员会负责车载以太网中不同技术标准的制定,比如TC8就负责TCP/IP网络协议栈的一致性测试。


举报

相关推荐

0 条评论