1 应用和数据
应用的存在,是为了满足人们的各种需求,比如访问网页,在线游戏,在线视频等。
伴随着应用会有信息的产生。比如文本,图片,视频等都是信息的不同呈现方式。
应用的实现-数据:
数据的产生:在计算机领域,数据是各种信息的载体。
数据传输:大部分应用程序所产生的数据需要在不同的设备之间传递。

2 OSI参考模型
| 层数名 | 作用 |
|---|---|
| 7.应用层 | 对应用程序提供接口 |
| 6.表示层 | 进行数据格式的转换 确保系统生成的应用层数据能够被另外系统的应用层所识别和理解 |
| 5会话层 | 在通信双方之问建立、管理和终止会话 |
| 4.传输层 | 建立、维护和取消一次端到端的数据传输过程 控制传输节奏的快慢,调整数据的排序等等 TCP和UDP在传输层 |
| 3.网络层 | 定义逻辑地址;实现数据从源到目的地的转发 网络层有IP地址 网络层中6代表TCP、17代表UDP 路由器在网络层 |
| 2.数据链路层 | 将分组数据封装成帧 在数据链路上实现数据的点到点、或点到多点方式的直接通信 差错检测 数据链路层有MAC地址 交换机在数据链路层 |
| 1.物理层 | 在媒介上传输比特流;提供机械的和电气的规约 |
3 TCP/IP参考模型
因为OSI协议栈比较复杂,且TCP和IP两大协议在业界被广泛使用,所以TCP/IP参考模型成为了互联网的主流参考模型。

TCP/IP常见协议:

ICMP:因特网控制报文协议
IGMP:因特网组管理协议
常见的协议标准化组织:
IETF(lnternet Engineering Task Force)
负责开发和推广互联网协议(特别是构成TCP/IP协议族的协议)的志愿组织,通过RFC发布新的或者取代老的协议标准。
IEEE(lnstitute of Electrical and Electronics Engineers)
IEEE制定了全世界电子、电气和计算机科学领域30%左右的标准,比较知名的有IEEE802.3(Ethernet)、IEEE802.11(Wi-Fi)等。
ISO(International Organization for Standardization)
在制定计算机网络标准方面,1S0是起着重大作用的国际组织,如0SI模型,定义于IS0/IEC 7498-1。
3.1 应用层
应用层为应用软件提供接口,使应用程序能够使用网络服务。
应用层协议会指定使用相应的传输层协议,以及传输层所使用的端口等。
应用层的PDU(协议数据单元)被称为Data(数据)。
应用层协议:
| 协议名称 | 端口 | TCP/UDP | 解释 |
|---|---|---|---|
| Telnet | 23 | TCP | 远程登陆协议,提供远程管理服务 |
| FTP | 20、21 | TCP | 文件传输协议,提供互联网文件资源共享服务 20端口用于数据传输 21端口用于控制连接 |
| SFTP | 22 | TCP | 安全文件传输协议 |
| TFTP | 69 | UDP | 简单文件传输协议,提供简单的文件传输服务 |
| SNMP | 161、162 | UDP | 简单的网络管理协议 UDP 161端口:用于SNMP管理站(NMS)与代理(Agent)之间的常规通信,如轮询请求(GET) UDP 162端口:用于SNMP代理主动向管理站发送陷阱消息(Trap操作),通知特定事件 |
| HTTP | 80 | TCP | 超文本传输协议,提供浏览网页服务 |
| SMTP | 25 | TCP | 简单邮件传输协议,提供互联网电子邮件服务 |
| DNS | 53 | TCP、UDP | 域名解析协议 |
| DHCP | 67、68 | UDP | 动态主机配置协议 DHCP服务器监听的端口:UDP端口 67,用于接收来自客户端的请求 DHCP客户端监听的端口:UDP端口 68,用于接收服务器的响应 |
| HTTPS | 443 | TCP | 简单文件传输协议,提供简单的文件传输服务 比HTTP更加安全 |
| POP3 | 110 | TCP、IP | 用于支持使用客户端远程管理服务器上的电子邮件 |
| NTP | 123 | TCP、IP | 用于同步网络中各个计算机时间的协议 |
| SSH | 22 | TCP | 建立在应用层和传输层基础上的安全协议 |
3.1.1 应用层协议-FTP
FTP是一个用于从一台主机传送文件到另一台主机的协议,用于文件的”下载”和”上传”,采用C/S(Client/Server)结构。
FTP客户端:
提供本地设备对远程服务器的文件进行操作的命令。
用户在PC上通过应用程序作为FTP Client,并与FTP服务器建立连接后,对FTP Server上的文件进行操作。
FTP服务器:
运行FTP服务的设备。
提供远程客户端访问和操作的功能,用户可以通过FTP客户端程序登录到服务器上,访问设备上的文件。

3.1.2 应用层协议-Telnet
Telnet是数据网络中提供远程登录服务的标准协议。
Telnet为用户提供了在本地计算机上完成远程设备工作的能力。
用户通过Telnet客户端程序连接到TeInet服务器。用户在Telnet客户端中输入命令,这些命令会在服务器端运行,就像直接在服务端的控制台上输入一样。

3.1.3 应用层协议-HTTP
HTTP是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

3.2 传输层
传输层协议接收来自应用层协议的数据,封装上相应的传输层头部,帮助其建立”端到端”(Port to Port)的连接。
传输层的PDU被称为Segment(段)。
传输层协议:
TCP:一种面向连接的、可靠的传输层通信协议。TCP又被称为传输控制协议。
UDP:一种简单的无连接的传输层协议。UDP又被称为用户数据包协议。
3.2.1 TCP和UDP-报文格式
TCP头部:

UDP尾部:

3.2.2 TCP和UDP-端口号

客户端使用的源端口一般随机分配,目标端口则由服务器的应用指定;
源端口号一般为系统中未使用的,且大于1023;
目的端口号为服务端开启的应用(服务)所侦听的端口,如HTTP缺省使用80。
3.2.3 TCP建立-三次握手
任何基于TCP的应用,在发送数据之前,都需要由TCP进行“三次握手”建立连接。

1.由TCP连接发起方(PC1)发送第一个SYN位置1的TCP报文。初始序列号(Seq)a 为一个随机生成的数字,因为没收到过来自PC2的任何报文,所以确认序列号(Ack)为0
2.接收方(PC2)接收到合法的SYN报文之后,回复一个 SYN 和 Ack 置 1 的TCP报文。初始序列号b为一个随机生成的数字,同时因为此报文是回复给PC1的报文,所以确认序列号为a+1
3.PC1接收到 PC2发送的SYN和Ack置位的TCP报文后,回复一个Ack置位的报文,此时序列号为a+1,确认序列号为b+1。PC2接收到报文后,TCP双向连接建立。
3.2.4 TCP序列号与确认序列号
TCP使用序列号和确认序列号字段实现数据的可靠和有序传输。
在此期间PC2没有向PC1发送新的数据,所以PC1的确认号(AcK)保持不变。

假设PC1要给PC2发送一段数据,传输过程如下:
1.PC1将全部待TCP发送的数据按照字节为单位进行编号。假设第一个字节的编号为a+1,第二个字节的编号为a+2,以此类推。
2.PC1会把每段数据的第一个字节的编号作为序列号,然后将TCP报文发送出去。
3.PC2在收到PC1发送米的TCP报文后,需要给予确认,同时请求下一段数据,下一段数据的第一个字节的确认序列号(a+1+12)=序列号(a+1)+载荷长度。
4.PC1在收到PC2发送来的TCP报文后,发现确认序列号为a+1+12,说明a+1到 a+12这一段的数据已经被接收,需要从a+1+12处开始发送
3.2.5 TCP的窗口滑动机制
TCP通过窗口滑动机制来控制数据的传输速率。

PC1在发送这三个数据段时,尚未收到PC2的窗口更新通知,所以继续使用之前协商的窗口大小(win=3)
TCP通过窗口滑动机制控制数据传输速率的流程如下:
1.在TCP通过三次握手建立连接时,双方通过win字段告诉对方本端最大能够接收的字节数(缓冲区大小)。
2.连接建立成功之后,发送方会根据接收方宣告的win字段大小发送相应字节数的数据。
3.接收方接收到数据之后会存放在缓冲区内,等待上层应用取走缓冲区中的数据。若数据被上层取走,则相应的缓冲空间将被释放。
4.接收方根据自身的缓存空间大小通告当前可以接收的数据大小(win)。
5.发送方根据接收方当前的win字段大小发送相应数量的数据。
3.2.6 TCP关闭-四次挥手
当数据传输完成,TCP需要通过”四次挥手”机制断开TCP连接,释放系统资源。

TCP支持全双工模式传输数据,意味着同一时刻两个方向都可以进行数据传输。在传输数据之前,TCP通过三次握手建立的连接实际上是两个方向的连接,因此在数据传输完毕后、两个方向的连接必须都关闭。流程如下:
1.由PC1发送一个FIN字段置1的不带数据的TCP报文。
2.PC2收到PC1发送的FIN置位的TCP报文后,会回复一个Ack置位的TCP报文。
3.若 PC2 没有需要发送的数据,则直接发送 FIN置位的TCP报文。假设此时 PC2还有数据要发送,那么当PC2发送完这些数据之后,会发送一个FIN置位的TCP报文关闭连接。
4.PC1收到FIN置位的TCP报文后,回复Ack报文,TCP双向连接断开。
3.3 网络层
传输层负责建立主机之间进程与进程之间的连接,而网络层则负责数据从一台主机到另外一台主机之间的传递。
网络层的PDU被称为Packet(包)。
网络层也叫Interet层,负责将分组报文从源主机发送到目的主机。
3.3.1 网络层作用
为网络中的设备提供逻辑地址。
负责数据包的寻径和转发。
常见协议如IPv4、IPv6、ICMP、IGMP等。
3.3.2 网络层协议工作过程

3.4 数据链路层
数据链路层位于网络层和物理层之间,可以向网络层的IP、IPv6等协议提供服务。
数据链路层的PDU被称为Frame(帧)。
以太网(Ethernet)是最常见的数据链路层协议
数据链路层位于网络层和物理层之间:
数据链路层向网络层提供”段内通信”
负责组帧、物理编址、差错控制等功能。
常见的数据链路层协议有:以太网、PPPoE、PPP等。
3.4.1 以太网和MAC地址
以太网是一种广播式数据链路层协议,支持多点接入。
个人电脑的网络接口遵循以太网标准。
一个广播域对应着一个IP网段。

MAC(Media Access Control)地址在网络中唯一标识一个网卡,每个网卡都需要且会有唯一的一个MAC地址。
MAC用于在一个IP网段内,寻址找到具体的物理设备。
工作在数据链路层的设备。例如以太网交换机,会维护一张MAC地址表,用于指导数据帧转发。

MAC(Media Access Control,媒体访问控制)地址是在IEEE 802标准中定义并规范的,凡是符合IEEE802标准的网络接口卡(如以太网卡、令牌环网卡等)都必须拥有一个MAC地址。并不是所有网卡都必须拥有 MAC地址(以下所说的网卡均指以太网卡)。MAC地址是全球唯一的硬件地址,如同身份证号码用于识别身份一样,MAC地址用于识别以太网中的一台设备的地址。
MAC地址的长度为48位,由两部分组成。前24位为厂商代码,简称OUI(Organizationally Unique Identifier,组织唯一标识符,又称厂商唯一代码);后24位由厂商自定义。厂商在制造网卡之前,必须先向IEEE注册,然后由IANA(The Internet Assigned Numbers Authority,因特网编号分配机构)进行分配。
MAC地址特殊的位置不同,标识的地址类型也不同,如下:

MAC地址的分类标准如下:
如果第一个字节的第一位为1,则为广播MAC地址。
如果第一个字节的最后一位为1,则为组播MAC地址。
如果第一个字节的最后一位为0,则为单播MAC地址。
3.4.2 地址解析协议(ARP)
ARP (Address Resolution Protocol)地址解析协议:
根据已知的IP地址解析获得其对应的MAC地址。

3.4.3 ARP的工作原理
步骤1:
在发送数据前,设备会先查找ARP缓存表。如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应信息,则通过ARP来获取。

步骤2:
主机1通过发送ARP Request报文来获取主机2的MAC地址。
由于不知道目的MAC地址,因此ARP Request报文内的目的端MAC地址为0
步骤3:
ARP Request是广播数据帧,因此交换机收到后,会对该帧执行泛洪操作。

步骤4:
所有的主机接收到该ARP Request报文后,都会检查它的目的端IP地址字段与自身的IP地址是否匹配。
主机2发现IP地址匹配,则会将ARP报文中的发送端MAC地址和发送端IP地址信息记录到自己的ARP缓存表中。

步骤5:
主机2通过发送ARP Reply报文来响应主机1的请求。
此时主机2已知主机1的MAC地址,因此ARP Reply是单播数据帧。
步骤6:
交换机收到该单播数据帧后,会对该帧执行转发操作。

步骤7:
主机1收到ARP Reply以后,会检查ARP报文中目的端IP地址字段是否与自己的IP地址匹配。
如果匹配,会将ARP报文中的发送端MAC地址和发送端IP地址信息记录到自己的ARP缓存表中。

3.4.4 代理ARP
主机A与主机B进行通信时,目的IP地址与本机的IP地址位于不同的网络,但由于主机A未配置网关,所以会以广播的形式发送ARP Request报文,请求主机B的MAC地址。但路由器是隔离广播域的,因此该广播报文无法被路由器转发,所以主机B无法接收到主机A发送的ARP Request报文,当然也就无法应答。这种情况下就需要代理ARP,工作过程如下图:

在路由器上启用代理ARP功能后,路由器收到这样的请求,会查找路由表,如果存在主机B的路由表项,路由器将会使用自己的 GE0/0/0接口的 MAC地址,回应主机A发送的ARP Request请求。主机 A收到代理 ARP 路由器发送的ARP Reply后,将以路由器的GE0/0/0接口的MAC地址作为目的MAC地址进行数据转发。
3.5 物理层
数据到达物理层之后,物理层会根据物理介质的不同,将数字信号转换成光信号、电信号或者是电磁波信号。
物理层的PDU被称为比特流(Bitstream)。
物理层位于模型的最底层:
负责比特流在介质上的传输。
规范了线缆、针脚、电压、接口等物理特性规范。
常见的传输介质有:双绞线、光纤、电磁波等。

接线顺序:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕
4 数据通信过程
4.1 PDU
PDU(Protocol Data Unit,协议数据单元)就是每层的通信数据,用不同的术语来指明所提到的层级。
各层级PDU名称如下表:
| TCP/IP标准模型 | OSI参考模型 | TCP/IP对等模型 | PDU英文名 | PDU中文名 |
|---|---|---|---|---|
| 应用层 | 应用层 | 应用层 | data | 数据 |
| 表示层 | data | 数据 | ||
| 会话层 | data | 数据 | ||
| 主机到主机层 | 传输层 | 传输层 | segment | 数据段 |
| 英特网层 | 网络层 | 网络层 | packet | 数据包 |
| 网络接入层 | 数据链路层 | 数据链路层 | frame | 帧 |
| 物理层 | 物理层 | bit | 比特(位或数据流) |
4.2 发送方数据封装
PDU:协议数据单元,表示数据在各层的名字,即:数据、数据段、数据包、帧、位(数据流或比特流)等
封装:数据从上往下走,在每层加报头(如:TCP Header、IP Header、Eth Header)的过程叫封装
数据发送者在发送数据时就像给快递打包一样,从上层向下层进行数据封装,没经过一层就封装一个包头,到达数据链路层后,不仅要封装一个包头,还要追加一个FCS的尾部,目是检测数据的完整性OSI参考模型的数据封装过程如图1.1所示。

4.3 中间网络数据传输
封装好的数据,将会在网络中被传递。

4.4 接收方数据解封装
FCS:帧校验,校验数据完整性
接收方接收到数据后,首先要对数据帧头进行校验,以查看数据帧在传递过程中是否失去完整性,若检验结果不完整,则立即丢弃该数据帧;若校验数据帧无破损,则对数据进行解封装,解封装的顺序是由下层向上层进行。
