计算机系统是由三部分组成分别是硬件、操作系统、应用软件,一台计算机只能一个人玩比如小游戏单机之类的没法多人一起。
这个是你一个人玩着无聊了想要多人一起,就需要网络,也叫互联网!
互联网的核心就是由一堆协议组成,协议就是标准,比如全世界人通信的标准是英语
如此,就可以把计算机比作一个人,但你又想和其他国家的人沟通就需要一门通用的语言也就是现在的英语,反过来就是要计算机都学会了互联网协议,这个协议就好比我们的通用语言,所有计算机通一语言就可以交流。
人们按照分工不同把互联网协议从逻辑上划分了层级,
下面是常见的几种模型:
可以看到基本都是由OSI七层模型进行提炼的。下面时网上找到的一个比较关于OSI模型说明比较全的图
每一层都运行不同的协议。协议是干什么的,协议就是标准。
实际上还有人把它划成五层、四层。
七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
五层划分为:应用层、传输层、网络层、数据链路层、物理层。
四层划分为:应用层、传输层、网络层、网络接口层。
集线器是物理层设备,采用广播的形式来传输信息。
交换机就是用来进行报文交换的机器。多为链路层设备(二层交换机),能够进行地址学习,采用存储转发的形式来交换报文。
路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。选择通畅快捷的近路,能大大提高通信速度,减轻网络系统通信负荷,节约网络系统资源,提高网络系统畅通率。
物理层:
字面意思解释:物理传输、硬件、物理特性。在深圳的你与北京的朋友聊天,你的电脑必须要能上网,物理体现是什么?是不是接一根网线,插个路由器,北京的朋友那边是不是也有根网线,也得插个路由器。也就是说计算机与计算机之间的通信,必须要有底层物理层方面的连通,就类似于你打电话,中间是不是必须得连电话线。
中间的物理链接可以是光缆、电缆、双绞线、无线电波。中间传的是电信号,即010101...这些二进制位。
底层传输的010010101001...这些二级制位怎么才能让它有意义呢?
要让这些010010101001...有意思,人为的分组再适合不过了,8位一组,发送及接收都按照8位一组来划分。接收到8位为一组的话,那么就可以按照这8位数来做运算。如果没有分组,对方接收的计算机根本就不知道从哪一位开始来做计算,也解析不了收到的数据。我发了16位你就按照16位来做计算吗?我发100位你就按照100位做计算吗?没什么意义是吧。因此要想让底层的电信号有意义,必须要把底层的电信号做分组。我做好8位一组,那么我收到数据,我就知道这几个8位做一组,这几个8位做一组。那么每个8位就可以得到一个确定的数。分组是谁干的活呢?物理层干不了,这个是数据链路层干的。
数据链路层
早期的时候,数据链路层就是来对电信号来做分组的。以前每个公司都有自己的分组方式,非常的乱,后来形成了统一的标准(标准就是协议),即以太网协议Ethernet。
Ethernet规定
一组电信号称之为一个数据包,或者叫做一个“帧”
- 每一数据帧分成:报头head和数据data两部分
head包含:(固定18个字节)
- 发送者(源地址,6个字节)
- 接收者(目标地址,6个字节)
- 数据类型(6个字节)
data包含:(最短46字节,最长1500字节)
- 数据包的具体内容
head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送。
这就像写信,发送者的地址(源地址)就是你家的地址,接收者地址(目标地址)就是对方的收信地址,你家的路由器就相当于邮局。其实在计算机通信中的源地址和目标地址指的是mac地址。
Mac地址的由来:
head中包含的源和目标地址由来:Ethernet规定接入Internet的设备都必须具备网卡,发送端的和接收端的地址便是指网卡的地址,即Mac地址。
每块网卡出厂时都被烧录上一个实际上唯一的Mac地址,长度为48位2进制,通常由12位16进制数表示,(前六位是厂商编码,后六位是流水线号)
有了mac地址以后,计算机就可以通信了,假设一个教室就是一个局域网(隔离的网络),这个教室里面有几台计算机,计算机的通信和人的通信是一个道理,把教室里面的人都比作一个个计算机,假设教室里面的人都是瞎子,其实计算机就是瞎子的,计算机通信基本靠吼,现在我要找教室里面的飞哥要战狼2的片,然后我就吼一声,说我要找飞哥要战狼2的片,战狼2的片就属于我的数据,但是我在发的时候我是不是要标识我是谁,我要找谁,我是谁就是我的mac地址,我要找谁就是飞哥的mac地址,这两个地址做数据包的头部,再加上数据战狼2的片就构成了一个数据帧。
这个数据包封装好以后就往外发,到物理层以后就全部转成二级制,往外发是怎么发的呢?就是靠吼。即“我是Edison,我找飞哥要战狼2的片”。这么吼了一嗓子以后,全屋子的人都能听到,这就是广播。
计算机底层,只要在一个教室里(一个局域网),都是靠广播的方式,吼。
局域网的理解:什么是互联网,互联网就是由一个个局域网组成,局域网内的计算机不管是对内还是对外都是靠吼,这就是数据链路层的工作方式-----广播。
广播出去以后,所有人都听得见,所有人都会拆开这个包,读发送者是谁,接收者是谁,只要接收者不是自己就丢弃掉。对计算机来说,它会看自己的Mac地址,飞哥收到以后,他就会把片发给我,发送回来同样采用广播的方式了,靠吼。
同一个教室(同一个局域网)的计算机靠吼来通信,那不同教室的计算机又如何?
比如说局域网1的pc1与局域网2的pc10如何通信?你在教室1(局域网1)吼,教室2(局域网2)的人肯定是听不见的。这就是跨网络进行通信,数据链路层就解决不了这个问题了,这就得靠网络层出面了。
在讲网络层之前,其实基于广播的这种通信就可以实现全世界通信了,你吼一声,如果全世界是一个局域网,全世界的计算机肯定可以听得见,从理论上似乎行得通,如果全世界的计算机都在吼,你想一想,这是不是一个灾难。因此,全世界不能是一个局域网。于是就有了网络层。
网络层:
网络层定义了一个IP协议,
你想,我是这个教室的一个学生,我想找隔壁教室一个叫老王的学生,我也不认识老王,那怎么办,我吼?老王在另外一个教室肯定是听不到的。找教室的负责人,这个教室的负责人就负责和隔壁教室的负责人说话,说我们教室的有个学生要找你们教室的老王。往外传的东西交给负责人就可以了,内部的话上面已经提到,通过广播的方式,对外的东西广播失效。教室的负责人就是网关,网关即网络关口的意思。
Mac地址是用来标识你这个教室的某个位置,IP地址是用来标识你在哪个教室(哪个局域网)。你要跨网络发包你是不是要知道对方的IP地址,比如你要访问百度,你肯定得知道百度服务器的IP地址。计算机在发包前,会判断你在哪个教室,对方在哪个教室,如果在一个教室,基于mac地址的广播发包就OK了;如果不在一个教室,即跨网络发包,那么就会把你的包交给教室负责人(网关)来转发。Mac地址及IP地址唯一标识了你在互联网中的位置。
数据链路层中会把网络层的数据包封装到数数据链路层的数据位置,然后再添加上自己的包头,再发给物理层,物理层发给网关,网关再发给对方教室的网关,对方教室的网关收到后在那个教室做广播。
在数据链路层看,数据封装了两层,跟玩俄罗斯套娃有点类似,一层套了一层。
最终变成
现在来看另一个问题,在吼之前怎么知道对方的Mac地址?这就得靠ARP协议。
ARP协议的由来:在你找飞哥要片之前,你的先干一件事,想办法知道飞哥的Mac地址。即你的机器必须先发一个ARP包出去,ARP也是靠广播的方式发,ARP发送广播包的方式如下:
局域网中怎么获取对方的Mac地址:
肯定要知道对方的IP地址,这是最基本的,就像你要访问百度,肯定得知道百度的域名,域名就是百度的IP地址。自己的IP可以轻松获得,自己的Mac也轻松获取,目标Mac为12个F,我们叫广播地址,表达的意思是我想要获取这个目标IP地址172.16.10.11的机器的Mac地址。Mac为12个F代表的是一种功能,这个功能就是获取对方的MAC地址,计算机的Mac永远不可能是12个F。假设是在本教室广播,一嗓子吼出去了,所有人开始解包,只有IP地址是172.16.10.11的这个人才会返回他的Mac地址,其他人全部丢弃。发回来源Mac改成飞哥自己的Mac地址,同时把飞哥的Mac地址放在数据部分。
跨网络怎么获取对方的Mac地址:
通过IP地址区分,计算机运算判断出飞哥不在同一个教室,目标IP就变成了网关的IP了。网关的IP在计算机上配死了,可以轻松获取。
这样网关就会把它的Mac地址返回给你,然后正常发包
网关帮你去找飞哥,但对用户来说,我们根本就感觉不到网关的存在。
传输层
传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,
那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。
传输层功能:建立端口到端口的通信
补充:端口范围0-65535,0-1023为系统占用端口
tcp协议:
可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
以太网头 | ip 头 | tcp头 | 数据 |
udp协议:
不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
以太网头 | ip头 | udp头 | 数据 |
应用层
应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式 。
应用层功能:规定应用程序的数据格式。
例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。
各层传输协议、传输单元、主要功能性设备比较
名称 | 传输协议 | 传输单元 | 主要功能设备/接口 |
---|---|---|---|
物理层 | IEEE 802.1A、IEEE 802.2 | bit-flow 比特流 | 光纤、双绞线、中继器和集线器 & RJ-45(网线接口) |
数据链路层 | ARP、MAC、 FDDI、Ethernet、Arpanet、PPP、PDN | frame 帧 | 网桥、二层交换机 |
网络层 | IP、ICMP、ARP、RARP | 数据包(packet) | 路由器、三层交换机 |
传输层 | TCP、UDP | Segment/Datagram | 四层交换机 |
会话层 | SMTP、DNS | 报文 | QoS |
表示层 | Telnet、SNMP | 报文 | – |
应用层 | FTP、TFTP、Telnet、HTTP、DNS | 报文 | – |
关于协议你应该知道这些
以上通过图表、文字向大家阐述了七层模型每一层的具体功能及其相关协议,但知道了这些还不够,你还要知道以下这些。
TCP/UDP
-
TCP/UDP是什么?
TCP — Transmission Control Protocol,传输控制协议。
UDP — User Data Protocol,用户数据报协议。 -
TCP/UDP的区别(优缺点)?
(1)、TCP是面向连接的,UDP是面向无连接的。TCP在通信之前必须通过三次握手机制与对方建立连接,而UDP通信不必与对方建立连接,不管对方的状态就直接把数据发送给对方
(2)、TCP连接过程耗时,UDP不耗时
(3)、TCP连接过程中出现的延时增加了被攻击的可能,安全性不高,而UDP不需要连接,安全性较高
(4)、TCP是可靠的,保证数据传输的正确性,不易丢包;UDP是不可靠的,易丢包
(5)、tcp传输速率较慢,实时性差,udp传输速率较快。tcp建立连接需要耗时,并且tcp首部信息太多,每次传输的有用信息较少,实时性差。
(6)、tcp是流模式,udp是数据包模式。tcp只要不超过缓冲区的大小就可以连续发送数据到缓冲区上,接收端只要缓冲区上有数据就可以读取,可以一次读取多个数据包,而udp一次只能读取一个数据包,数据包之间独立 -
TCP三次握手过程
STEP 1:主机A通过向主机B发送一个含有同步序列号的标志位的数据段给主机B,向主机B请求建立连接,通过这个数据段,主机A告诉主机B两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我。
STEP 2:主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用哪佧序列号作为起始数据段来回应我。
STEP 3:主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B的数据段:”我已收到回复,我现在要开始传输实际数据了。这样3次握手就完成了,主机A和主机B就可以传输数据了。 -
注意
此时需要注意的是,TCP建立连接要进行3次握手,而断开连接要进行4次。 -
名词解释
ACK:TCP报头的控制位之一,对数据进行确认,确认由目的端发出,用它来告诉发送端这个序列号之前的数据段都收到了。比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性。
SYN:同步序列号,TCP建立连接时将这个位置1。
FIN :发送端完成发送任务位,当TCP完成数据传输需要断开时,提出断开连接的一方将这位置1。 -
TCP可靠性的四大手段
(1)、顺序编号:tcp在传输文件的时候,会将文件拆分为多个tcp数据包,每个装满的数据包大小大约在1k左右,tcp协议为保证可靠传输,会将这些数据包顺序编号
(2)、确认机制:当数据包成功的被发送方发送给接收方,接收方会根据tcp协议反馈给发送方一个成功接收的ACK信号,信号中包含了当前包的序号
(3)、超时重传:当发送方发送数据包给接收方时,会为每一个数据包设置一个定时器,当在设定的时间内,发送方仍没有收到接收方的ACK信号,会再次发送该数据包,直到收到接收方的ACK信号或者连接已断开
(4)、校验信息:tcp首部校验信息较多,udp首部校验信息较少。
上文部分协议简单讲
-
IEEE 802.1A、IEEE 802.2
IEEE是英文Institute of Electrical and Electronics Engineers的简称,其中文译名是电气和电子工程师协会。IEEE 802规范定义了网卡如何访问传输介质(如光缆、双绞线、无线等),以及如何在传输介质上传输数据的方法,还定义了传输信息的网络设备之间连接建立、维护和拆除的途径。遵循IEEE 802标准的产品包括网卡、桥接器、路由器以及其他一些用来建立局域网络的组件。
IEEE802.1A —— 局域网体系结构
IEEE802.2 ——- 逻辑链路控制(LLC) -
FDDI
光纤分布式数据接口(Fiber Distributed Data Interface) -
PPP
点对点协议(Point to Point Protocol),为在点对点连接上传输多协议数据包提供了一个标准方法。 -
IP
互联网协议(Internet Protocol),为计算机网络相互连接进行通信而设计的协议。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。IP地址具有唯一性,根据用户性质的不同,可以分为5类。 -
ICMP
控制报文协议(Internet Control Message Protocol)。TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。 -
ARP/RARP
ARP (Address Resolution Protocol) 地址解析协议
RARP (Reverse Address Resolution Protocol) 反向地址解析协议
ARP的工作原理如下(RARP工作原理与之相反)- 首先,每台主机都会在自己的ARP缓冲区 (ARP Cache)中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。
- 当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有﹐就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。
- 网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址;
- 源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
-
SMTP
简单邮件传输协议(Simple Mail Transfer Protocol),它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了。 -
SNMP
简单网络管理协议(Simple Network Management Protocol ),该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。 -
DNS
域名系统(Domain Name System),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。 -
FTP
文本传输协议(File Transfer Protocol),用于Internet上的控制文件的双向传输。同时,它也是一个应用程序Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守该协议以传输文件。在FTP的使用当中,用户经常“下载”(Download)和“上载”(Upload)。“下载”文件就是从远程主机拷贝文件至自己的计算机上;“上载”文件就是将文件从自己的计算机中拷贝至远程主机上。 -
HTTP
超文本传输协议(HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型,是一个无状态的协议。