Linux运维基础入门(一)网络基础知识梳理01
本链接转载自:https://www.cnblogs.com/chensiqiqi/p/9163005.html
仅供自学使用。
一,计算机网络参考模型
1.1 OSI七层模型
1)物理层
主要功能是完成相邻节点之间原始比特流的传输。(网卡等)
物理层协议关心的典型问题是使用什么样的物理信号来表示数据1和0;持续的时间有多长;数据传输是否可同时在两个方向上进行。物理层的设计还涉及通信工程领域内的一些问题。
2)数据链路层
主要负责将上层数据封装成固定格式的帧,在数据帧内封装发送和接收端的数据链路层地址(在以太网中为MAC地址,MAC地址是用来标识网卡的物理地址;在广域网中点到多点的连接情况下,可以是一个链路的标识)并且为了防止在数据传输过程中产生误码,要在帧尾部加上校验信息,发现数据错误时,可以重传数据帧。
3)网络层
主要功能是实现数据从源端到目的端的传输。
在网络层,使用逻辑地址来标识一个点,将上层数据封装成数据包,在包的头部封装源和目的端的逻辑地址。网络层根据数据包头部的逻辑地址选择最佳的路径,将数据送达目的端。
4)传输层
主要功能是实现网络中不同主机上用户进程之间的数据通信
网络层和数据链路层负责将数据送达目的端的主机,而这个数据需要什么用户进程去处理,就需要传输层帮忙了。
例如:QQ发送消息,网络层和数据链路层负责将消息转发到接收人的主机,而接收人应该用QQ程序来接收还是用IE浏览器来接收,就是在传输层进行标识。
传输层要决定对会话层用户(最终的网络用户)提供什么样的服务。因此,我们经常把1~3层的协议称为点到点的协议,而把4~7层的协议叫做端到端的协议。
由于绝大多数主机都支持多进程操作,因而机器上会同时有多个程序访问网络,这就意味着将有多条连接进出于这台主机,因此需要以某种方式区别报文属于哪条连接。识别这些连接的信息可以放在传输层的报文头中。除了将几个报文流多路复用到一条通道上,传输层还必须管理跨网连接的建立和拆除,这就需要某种命名机制,使机器内的进程能够说明它希望交谈的对象。
5)会话层
主要是允许不同机器上的用户之间建立会话关系。
会话层允许进行类似传输层的普通数据的传输,在某些场合还提供了一些有用的增强型服务;允许用户利用一次会话在远端的分时系统上登陆,或者在两台机器间传递文件。
6)表示层
主要用于完成某些特定功能,对这些功能人们常常希望找到普遍的解决方法,而不必由每个用户自己来实现。
表示层还涉及数据压缩解压,数据加密和解密等工作
7)应用层
联网的目的在于支持运行于不同计算机上的进程之间的通信,而这些进程则是为用户完成不同任务而设计的。
1.2 TCP/IP参考模型
1)物理层和数据链路层
在物理层和数据链路层,TCP/IP并没有定义任何特定的协议。它支持所有标准的和专用的协议,网络可以是局域网(如广泛使用的以太网),城域网或广域网。所以,TCP/IP实际上只有三个层次。
2)网络层
在网络层,TCP/IP定义了网络互联协议,而IP又由四个支撑协议组成;ARP(地址解析协议),RARP(逆地址解析协议),ICMP(网际控制报文协议)和IGMP(网际组管理协议)
3)传输层
传统上,TCP/IP有两个传输层协议;TCP(传输控制协议)和UDP(用户数据报协议)。TCP协议传输更加稳定可靠,UDP协议传输效率更高。
4)应用层
在应用层,TCP/IP定义了许多协议,如HTTP(超文本传输协议),FTP(文件传输协议),SMTP(简单邮件传输协议),DNS(域名系统)等
上述这些协议将在后续课程中具体讲解,这里大家只要明确协议与各层的对应关系即可。当我们研究具体协议的应用时,结合该协议所在层功能来理解和分析问题将事半功倍。
二,了解数据的传输过程
2.1 数据的封装和解封过程
下面我们将以TCP/IP五层结构为基础来学习数据在网络中传输的“真相”。由于这个过程比较抽象,我们可以类比给远在美国的朋友邮寄圣诞节礼物的过程。
(1)当我们给朋友写一封信时,一定会遵照一个约定俗成的信件格式去写信。例如,在开头写对收信人的称呼,接下来是问候语“你好”等,中间是信的内容,最后落款写自己的姓名,日期等。那么,这个书信格式以及通信采用的语言实际上就是和朋友之间的协议,只有遵照这个协议,对方才能读懂信。
(2)写好了信,要将信装在信封中。在信封上,要书写收信人的地址和姓名等。再将信交给邮局。邮局根据收信人的目的地址,将信件再次封装成大的包裹,通过运输部门发往目的城市。
(3)运输部门会将信件的包裹送达目的地的邮局。目的地邮局会将信件送达收信人手中。
在这个寄信的例子中,一封信的传输需要经过三个层次:
-
[x] :首先发信和收信的双方是这个过程中的最高层,位于下层的邮局和运输部门都是为了最高层之间的通信在服务。寄信人和收信人之间要有个协议,这个协议保证收信人能读懂寄信人的信件。
-
[x] :两地的邮局和运输部门之间也有约定,如包裹大小,地址的书写方式,运输到站的时间等
-
[x] :邮局是寄信人和收信人的下一层,为上一层提供服务,邮局为寄信人提供服务时,邮筒就是两个层之间的接口。
2.1.1 数据的封装过程
1)应用层传输过程
在应用层,数据被“翻译”为网络世界使用的语言---二进制编码数据(0和1组成)。大家可以试想以下,人们需要通过计算机传输的数据形式千变万化,各式各样,有字母,数字,汉字,图片,声音等。这些信息对于单一通过弱电流传输的计算机来说太过于“复杂”,因此这些人类方便识别的信息被应用层通过各种特殊的编码过程转换成二进制数据。这就是上面所描述的“翻译”过程,也是应用层在网络数据传输过程中最为核心的贡献。
2)传输层传输过程
在传输层,上面数据被分割成小的数据段,并为每个分段后的数据封装TCP报文头部。应用层将人们需要传输的信息转换成计算机能够识别的二进制数据后,这些数据往往都是海量的。例如:一张高清晰的图片转换成二进制数据可能会有几百万甚至几千万位,如此庞大的数据一次性传输的话,一旦网络出现问题而导致数据出错就要重新传输,数据量过大会加大出错的概率,最终可能会导致网络资源耗尽。因此,将数据先分割成小段再逐段传输,一旦出现数据传输错误只需重传这一小段数据即可。
在TCP头部有一个关键的字段信息---端口号,它用于标识上层的协议或应用程序,确保上层应用数据的正常通信。
3)网络层传输过程
在网络层,上层数据被封装上新的报文头部---IP头部。值得注意的是,这里所说的上层数据包括TCP头部,也就是说,这里的上层是指传输层。对于网络层而言,它是“看不懂”TCP包头中的内容的,在它看来,无论是应用层的应用数据,还是TCP头部信息都属于上层数据。
在IP头部中有一个关键的字段信息--IP地址,它是由一组32位的二进制数组成的,用于标识网络的逻辑地址。回想刚才寄信的例子,我们在信封上填写了对方的详细地址和本地的详细地址,以保证收件人能够顺利收到信件。在网络层的传输过程与其很类似,在IP头部中包含目标IP地址和源IP地址,在网络传输过程中的一些中间设备,如路由器,会根据目标IP地址来逻辑寻址,找到正确的路径将数据转发到目的端。如果中间的路由设备发现目标的IP地址根本是不可能到达的,它将会把该消息传回发送端主机,因此在网络层需要同时封装目标IP和源IP。
4)数据链路层传输过程
在数据链路层,上层数据被封装一个MAC头部,其内部有一个关键的字段信息--MAC地址,它由一组48位的二进制数组成。在目前阶段,我们先把它理解为固化在硬件设备中的物理地址,具有全球唯一性。例如,之前讲解的网卡就有属于自己的唯一的MAC地址。和IP头部类似,在MAC头部同时封装着目标MAC地址和源MAC地址。
5)物理层传输过程
无论在之前哪一层封装的报文头部还是上层数据信息都是由二进制数组成的,在物理层,将这些二进制数字组成的比特流转换成电信号在网络中传输。
2.1.2 数据的解封装过程
在物理层,首先将电信号转换成二进制数据,并将数据送至数据链路层。在数据链路层,将查看目标MAC地址,判断其是否与自己的MAC地址吻合,并据此完成后续处理。如果数据报文的目标MAC地址就是自己的MAC地址,数据的MAC头部将被“拆掉”,并将剩余的数据传送至上一层;如果目标MAC地址不是自己的MAC地址,对于终端设备来说,它将会丢弃数据。在网络层与在数据链路层类似,目标IP地址将被核实是否与自己的IP地址相同,从而确定是否送至上一层;到了传输层,首先要根据TCP头部判断数据段送往哪个应用层协议或应用程序。然后将之前被分组的数据段重组,再送往应用层;在应用层,这些二进制数据将经历复杂的解码过程,以还原发送者所传输的最原始的信息。
2.1.3 网络环境中的数据传输过程
如果网络世界中只有终端设备,那将不能称之为网络。正因为有很多中转设备才形成了今天如此复杂的Internet网络,只不过一贯作为网络用户的我们没有机会感知他们的存在,这都是传输层的“功劳”。由于传输层通过端口号辅助上层建立最终用户间的端到端会话,因此对于最终用户而言,数据的真实传输过程都被掩藏起来。
例如:通过QQ软件即使通信时,用户感觉好像在和对方面对面沟通,全然不知自己要说的内容经过了多少交换机和路由器才到达对方那里,但这些过程是真实发生的。
在实际的网络环境中,最终的发送方和接收方往往相隔千山万水,中间会有很多的硬件设备起到中转的作用。为了说明整个过程,我们假设了一种通信结构,如下图,在两台通信的计算机之间增加了两台交换机和路由器,发送主机的数据将会经过这些“中间设备”才能到达接收主机。
- 发送主机按照之前讲解的内容进行数据封装。
- 从发送主机物理网卡发出的电信号通过网线到达交换机,交换机将电信号转换成二进制数据送往交换机的数据链路层。因为交换机属于数据链路层的设备,所以它将可以查看数据帧头部的内容,但不会进行封装和解封装过程。当交换机发现数据帧头部封装的MAC地址不属于自己的MAC地址,他不会像终端设备那样将数据帧丢弃,而是根据该MAC地址将数据帧智能地转发到路由器设备,在转发前要重新将二进制数据转换成物理的电信号。
- 当路由器收到数据后,会拆掉数据链路层的MAC头部信息,将数据送达网络层,这样IP头部信息就“暴露”在最外面。路由器将检测数据包头部的目标IP地址信息,并根据该信息进行路由过程,智能地将数据报文转发到下一跳路由器上,在转发前要重新封装新的MAC头部信息,并将数据转换成二进制数。
- 之后的过程有点大同小异了....
从这个过程我们可以看出,数据在传输过程中不断的进行着封装和解封装的过程,中间设备属于哪一层就在哪一层对数据进行相关的处理,以实现设备的主要功能。也正因如此,我们称TCP/IP五层模型为“参考”模型,参考这五层模型可以帮助我们很好的研究网络中的设备以及设备工作过程中遵守的协议。
2.1.4 网络各层典型的硬件设备
层名称 | 应用层 | 传输层 | 网络层 | 数据链路层 | 物理层 |
---|---|---|---|---|---|
典型设备 | 计算机 | 防火墙 | 路由器 | 交换机 | 网卡 |
三,了解TCP和UDP协议
3.1 TCP协议的特点
- TCP是面向连接的,可靠的进程到进程通信的协议
- TCP提供全双工服务,即数据可在同一时间双向传输
- TCP将若干个字节构成一个分组,此分组称为报文段
3.2 TCP报文段的首部格式
格式 | 用途 |
---|---|
源端口号 | 发送方进程对应的端口号 |
目标端口号 | 接收端收到数据段后,根据这个端口号来确定把数据送给哪个应用程序的进程 |
序号 | 当TCP从进程接收数据字节时,就把他们存储在发送缓存中,并对每一个字节进行编号。当数据到达目的地后,接收端会按照这个序号把数据重新排列,保证数据的正确性 |
确认号 | 是对发送端的确认信息,用它来告诉发送端这个序号之前的数据段都已经收到,如确认号是X,就是表示前X-1个数据段都已经收到 |
首部长度 | 用它可以确定首部数据结构的字节长度。一般情况下TCP首部是20字节,但首部长度最大可以扩展为60字节 |
保留 | 这部分保留位作为今后扩展功能用 |
控制位 | 这六位有很重要的作用,TCP的连接,传输和断开都受这六个控制位的指挥 |
窗口值 | 说明本地可接收数据段的数目,这个值的大小是可变的,当网络通畅时将这个窗口值变大以加快传输速度,当网络不稳定时减小这个值可保证网络数据的可靠传输,TCP协议中的流量控制机制就是依靠变化窗口的大小实现的 |
校验和 | 用来做差错控制,TCP校验和的计算包括TCP首部,数据和其他填充字节。在发送TCP数据段时,由发送端计算校验和,当到达目的地时又进行一次校验和计算。若这两次的校验和一致,则说明数据基本是正确的,否则将认为该数据已被破坏,接收端将丢弃该数据 |
紧急指针 | 和URG配合使用 |
选项 | TCP首部可以有多达40字节的可选信息 |
3.3 TCP协议的三次握手和四次挥手
报文类型 | 含义 | 状态 |
---|---|---|
SYN | 发起一个新连接 | 1表示发起连接 |
FIN | 释放一个连接 | 1表示结束连接 |
ACK | 确认序号有效 | 1表示序号有效 |
seq | 随机序号 | 随机数 |
ack | 随机序号回复 | ack=seq+1 |
3.3.1 三次握手
1)第一次握手:Client将标志位SYN置为1,随机产生一个seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
3)第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
3.3.2 四次挥手
1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传输,同时发送一个seq=x的随机序号。Client进入FIN_wait_1状态
2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)Server进入CLOSE_WAIT状态。
3)第三次挥手:Server发送一个FIN,用来关闭Server到CLient的数据传输,同时发送一个seq=y的随机数,Server进入LAST_ACK状态
4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次回挥手
3.4 常用的TCP端口号及其功能
TCP在网络中的应用范围很广,主要用在对数据传输可靠性要求高的环境中,如网页浏览,它使用的HTTP协议就是依赖TCP协议提供可靠性的。
3.5 UDP协议
3.5.1 UDP协议的特点
- UDP是一个无连接,不保证可靠性的传输层协议,也就是说发送端不关心发送的数据是否到达目标主机,数据是否出错等,收到数据的主机也不会告诉发送方是否收到了数据,它的可靠性由上层协议来保障
- 既然UDP有这样的缺点,那为什么进程还愿意使用它呢?因为UDP也有优点,UDP的首部结构简单,在数据传输时能实现最小的开销,如果进程想发送很短的报文而不关心可靠性,就可以使用UDP
3.5.2 UDP的报文
格式 | 用途 |
---|---|
UDP长度 | 用来指出UDP的总长度,为首部加上数据 |
校验和 | 用来完成对UDP数据的差错检验,它的计算与TCP校验和类似。这是UDP协议提供的唯一可靠机制 |
3.5.3 常用的UDP端口号及其功能
UDP协议在实际工作中的应用也比较多,例如聊天工具QQ在处理发送短消息时就是使用了UDP的方式。不难想象,如果发送十几个字的短消息也使用TCP协议进行一系列的验证,将导致传输率大大下降。有谁愿意用一个“反应迟钝”的软件进行网络聊天呢?