一,计算机网络参考模型

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软件即使通信时,用户感觉好像在和对方面对面沟通,全然不知自己要说的内容经过了多少交换机和路由器才到达对方那里,但这些过程是真实发生的。

在实际的网络环境中,最终的发送方和接收方往往相隔千山万水,中间会有很多的硬件设备起到中转的作用。为了说明整个过程,我们假设了一种通信结构,如下图,在两台通信的计算机之间增加了两台交换机和路由器,发送主机的数据将会经过这些“中间设备”才能到达接收主机。

  1. 发送主机按照之前讲解的内容进行数据封装。
  2. 从发送主机物理网卡发出的电信号通过网线到达交换机,交换机将电信号转换成二进制数据送往交换机的数据链路层。因为交换机属于数据链路层的设备,所以它将可以查看数据帧头部的内容,但不会进行封装和解封装过程。当交换机发现数据帧头部封装的MAC地址不属于自己的MAC地址,他不会像终端设备那样将数据帧丢弃,而是根据该MAC地址将数据帧智能地转发到路由器设备,在转发前要重新将二进制数据转换成物理的电信号。
  3. 当路由器收到数据后,会拆掉数据链路层的MAC头部信息,将数据送达网络层,这样IP头部信息就“暴露”在最外面。路由器将检测数据包头部的目标IP地址信息,并根据该信息进行路由过程,智能地将数据报文转发到下一跳路由器上,在转发前要重新封装新的MAC头部信息,并将数据转换成二进制数。
  4. 之后的过程有点大同小异了....

从这个过程我们可以看出,数据在传输过程中不断的进行着封装和解封装的过程,中间设备属于哪一层就在哪一层对数据进行相关的处理,以实现设备的主要功能。也正因如此,我们称TCP/IP五层模型为“参考”模型,参考这五层模型可以帮助我们很好的研究网络中的设备以及设备工作过程中遵守的协议。

2.1.4 网络各层典型的硬件设备

层名称 应用层 传输层 网络层 数据链路层 物理层
典型设备 计算机 防火墙 路由器 交换机 网卡

三,了解TCP和UDP协议

3.1 TCP协议的特点

  1. TCP是面向连接的,可靠的进程到进程通信的协议
  2. TCP提供全双工服务,即数据可在同一时间双向传输
  3. 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协议的特点

  1. UDP是一个无连接,不保证可靠性的传输层协议,也就是说发送端不关心发送的数据是否到达目标主机,数据是否出错等,收到数据的主机也不会告诉发送方是否收到了数据,它的可靠性由上层协议来保障
  2. 既然UDP有这样的缺点,那为什么进程还愿意使用它呢?因为UDP也有优点,UDP的首部结构简单,在数据传输时能实现最小的开销,如果进程想发送很短的报文而不关心可靠性,就可以使用UDP

3.5.2 UDP的报文

格式 用途
UDP长度 用来指出UDP的总长度,为首部加上数据
校验和 用来完成对UDP数据的差错检验,它的计算与TCP校验和类似。这是UDP协议提供的唯一可靠机制

3.5.3 常用的UDP端口号及其功能

UDP协议在实际工作中的应用也比较多,例如聊天工具QQ在处理发送短消息时就是使用了UDP的方式。不难想象,如果发送十几个字的短消息也使用TCP协议进行一系列的验证,将导致传输率大大下降。有谁愿意用一个“反应迟钝”的软件进行网络聊天呢?

Linux运维基础入门(一)网络基础知识梳理01的更多相关文章

  1. 面试 Linux 运维工作至少需要知道哪些知识?

    前言 我们已经发过不少 Linux 面试题,但是单独的面试题总感觉会过于零碎,没有体系化内容给人的帮助大. 知乎上有这样一个问题:一个新手面试 Linux 运维工作至少需要知道哪些知识?其中有一个答案 ...

  2. Linux运维工程师必须掌握的基础技能有哪些?

    这个问题挺好的,回答这个问题也是对自身的审查,看看自己还欠缺哪些.(所以我估计得好好思考下,也许下一刻我就会突然惊醒,发现我还是战⑤渣) 首先限定在Linux运维工程师上 回答仅代表我想到,不代表我都 ...

  3. Linux运维工程师入门的10大实用工具

    说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具. 我就大概列出这几方面,这样入门就基本没问题了. 工具如下: 1.Linux系统基础 这个不用说了,是基础中的基础,连这 ...

  4. Linux运维工程师入门须掌握的10个技术点

    本人是linux运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧 说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具. 我就大概列出这几方面,这样入门就基本没问 ...

  5. Linux运维工作中需要掌握的知识

    说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具.我就大概列出这几方面,这样入门就基本没问题了.linux系统如果是学习可以选用redhat或centos,特别是cent ...

  6. Linux运维人员-服务器组成硬件基础

    第1章 1.1关于运维人员 1.1.1 运维的职责 数据不能丢 网站7*24小时运行 保证用户体验(用户体验要好) 1.1.2 运维原则 简单.易用.高效  === 简单.粗暴 1.2 服务器 1.2 ...

  7. 【Linux 运维】Centos7初始化网络配置

    设置网络 (1)动态获取一个IP地址 #dhclient        系统自动自动获取一个IP地址#ip addr         查看获取的ip地址(2)查看网关,子网掩码 虚拟机编辑>虚拟 ...

  8. Linux运维技术之NFS网络文件系统

    NFS:网络文件系统,只能工作在Unix/linux之间,不能与windows之间交互. NFS文件系系统只能基于ip来认证! RPC:远程过程调用,简化分布式应用程序的开发, 对Linux系统而言, ...

  9. linux运维之路配置网络

    前言裸机上装操作系统,想和物理机通信需要设置IP 开机以后: 第一步:setup命令  ——>  NetWork configguation  ---->Device configurat ...

  10. Linux运维学习笔记-通配符及正则表达式知识总结

    通配符: * 代表所有   ? 任意一个字符   : 两个命令的分隔符   # 注释   | 管道,将|前命令的执行结果作为|后命令的输入   ~ 用户的家目录   - 上一次的目录   $ 变量前面 ...

随机推荐

  1. 解决js代码中加入alert()就成功执行,不加就不对的问题!

    问题: jquery中的$(document).ready(function(){})中调用两个方法(1)利用ajax请求去后台查图书类别的方法(2)当页面上利用图书类别去查询图书返回页面,让图书类别 ...

  2. Python中实现远程调用(RPC、RMI)简单例子

    说白了,远程调用就是将对象名.函数名.参数等传递给远程服务器,服务器将处理结果返回给客户端   远程调用使得调用远程服务器的对象.方法的方式就和调用本地对象.方法的方式差不多,因为我们通过网络编程把这 ...

  3. Helm Charts

    Use this repository to submit official Charts for Kubernetes Helm. Charts are curated application de ...

  4. python list 列表

    1. 什么是列表 列表是一个可变的数据类型 列表由[]来表示, 每一项元素使用逗号隔开. 列表什么都能装. 能装对象的对象. 列表可以装大量的数据 2. 列表的索引和切片 列表和字符串一样. 也有索引 ...

  5. python中break continue exit() pass区别

    1.break break是终止本次循环,比如你很多个while循环,你在其中一个while循环里写了一个break,满足条件,只会终止这个while里面的循环,程序会跳到上一层while循环继续往下 ...

  6. 【学步者日记】实现破碎效果 Fracturing & Destruction 插件使用

    全文见原始链接:http://note.youdao.com/noteshare?id=ef5ef90b71da4e960e5bc0da4f3f17ec 下面是预览 示例工程链接:https://pa ...

  7. 【BZOJ】1878: [SDOI2009]HH的项链 (主席树)

    题目 传送门:QWQ 分析 莫队也能做,但我想练练主席树. 求k-th一样维护第i个时候的线段树,线段树来维护区间不同数. 然后查询时可以通过上下界小优化一波. 但是我的代码丑陋无比,常数巨大(捂脸 ...

  8. 灾难恢复:RPO与RTO

    许多企事业单位虽然已经认识到信息安全的重要性,却迟迟没有行动.其中的原因是多方面的,最主要的一个原因就是在如何建立容灾系统的问题上存在种种疑惑.容灾设计指标主要与容灾系统的数据恢复能力有关,最常见的设 ...

  9. OrhtoMCL 使用方法

    OrthoMCL的使用分13步进行,如下: 1. 安装和配置数据库 Orthomcl可以使用Oracle和Mysql数据库,而在这里只介绍使用Mysql数据库.修改配置文件/etc/my.cnf,对M ...

  10. xargs的i参数

    xargs与find经常结合来进行文件操作,平时删日志的时候只是习惯的去删除,比如 # find . -type f -name "*.log" | xargs rm -rf * ...