应用和数据
数据传输:大部分应用程序所产生的数据需要在不同的设备之间传递。
对于一名网络工程师来说,需要更关注数据的端到端传递的过程。
网络参考模型与标准协议
OSI 参考模型
| 层级 | 功能 | 对应协议 |
|---|---|---|
| 7.应用层 | 应用程序提供的接口 | HTTP、TFTP、FTP、SMTP |
| 6.表示层 | 进行数据格式的转换,以确保一个系统生成的应用层数据够被另外一个系统的应用层所识别和理解 | Telnet、SNMP、Rlogin |
| 5.会话层 | 在通信双方之间建立、管理和终止会话 | SMTP,DNS |
| 4.传输层 | 建立、维护和取消一次端到端的数据传输过程。控制传输奏的快慢,调整数据的排序等等。 | TCP、UDP |
| 3.网络层 | 定义逻辑地址;实现数据从源到目的地的转发。 | IPICMP、ARP |
| 2.数据链路层 | 将分组数据封装成帧;在数据链路上实现数据的点点、或点到多点方式的直接通信;差错检测。 | Ethernet,Arpanet |
| 1.物理层 | 在媒介上传输比特流;提供机械的和电气的规约。 | IEEE802.1A、IEEE 802.2 到 IEEE 802.11 |
TCP/IP 参考模型
因为 OSI 协议栈比较复杂,且 TCP 和 IP 两大协议在业界被广泛使用,所以 TCP/IP 参考模型成为了互联网的主流参考模型。
- 应用层 -> 传输层 -> 网络层 -> 数据链路层 -> 物理层
应用层
- 应用层为应用软件提供接口,使应用程序能够使用网络服务。应用层协议会指定使用相应的传输层协议,以及传输层所使用的端口等。
- 应用层的 PDU 被称为 Data(数据)。
常见应用层协议:
-
FTP
FTP(File Transfer Protocol)是一个用于从一台主机传送文件到另一台主机的协议,用于文件的“下载”和“上传”,它采用 C/S(Client/Server)结构。
-
Telnet
Telnet 是数据网络中提供远程登录服务的标准协议。 Telnet 为用户提供了在本地计算机上完成远程设备工作的能力。
-
HTTP
HTTP(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。
传输层
-
传输层协议接收来自应用层协议的数据,封装上相应的传输层头部,帮助其建立“端到端”(Port to Port)的连接。
-
传输层的 PDU 被称为 Segment(段)。
-
传输层协议:
TCP:一种面向连接的、可靠的传输层通信协议,由IETF的RFC 793定义。
UDP:一种简单的无连接的传输层协议,由IETF的RFC 768定义。
-
TCP报文头部:
- Source Port:源端口,标识哪个应用程序发送。长度为 16 比特。
- Destination Port:目的端口,标识哪个应用程序接收。长度为 16 比特。
- Sequence Number:序号字段。TCP 链接中传输的数据流每个字节都编上一个序号。序号字段的值指的是本报文段所发送数据的第一个字节的序号。长度为 32 比特。
- Acknowledgment Number:确认序列号,是期望收到对方下一个报文段数据的第 1 个字节的序号,即上次已成功接收到的数据段的最后一个字节数据的序号加 1。只有 Ack 标识为 1,此字段有效。长度为 32 比特。
- Header Length:头部长度,指出 TCP 报文头部长度,以 32 比特(4 字节)为计算单位。若无选项内容,则该字段为 5,即头部为 20 字节。
- Reserved:保留,必须填 0。长度为 6 比特。
- Control bits:控制位,包含 FIN、ACK、SYN 等标志位,代表不同状态下的 TCP 数据段。
- Window:窗口 TCP 的流量控制,这个值表明当前接收端可接受的最大的数据总数(以字节为单位)。窗口最大为 65535 字节。长度为 16 比特。
- Checksum:校验字段,是一个强制性的字段,由发端计算和存储,并由收端进行验证。在计算检验和时,要包括 TCP 头部和 TCP 数据,同时在 TCP 报文段的前面加上 12 字节的伪头部。长度为 16 比特。
-
TCP 三次握手
- 由 TCP 连接发起方(图中 PC1),发送第一个 SYN 位置 1 的 TCP 报文。初始序列号 a 为一个随机生成的数字,因为没收到过来自 PC2 的任何报文,所以确认序列号为 0;
- 接收方(图中 PC2)接收到合法的 SYN 报文之后,回复一个 SYN 和 ACK 置 1 的 TCP 报文。初始序列号 b 为一个随机生成的数字,同时因为此报文是回复给 PC1 的报文,所以确认序列号为 a+1;
- PC1 接收到 PC2 发送的 SYN 和 ACK 置位的 TCP 报文后,回复一个 ACK 置位的报文,此时序列号为 a+1,确认序列号为 b+1。PC2 收到之后,TCP 双向连接建立。
-
TCP 滑动窗口
- 在 TCP 三次握手建立连接时,双方都会通过 Window 字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小)。
- 连接建立成功之后,发送方会根据接受方宣告的 Window 大小发送相应字节数的数据。
- 接受方接受到数据之后会放在缓冲区内,等待上层应用来取走缓冲的数据。若数据被上层取走,则相应的缓冲空间将被释放。
- 接收方根据自身的缓存空间大小通告当前的可以接受的数据大小( Window )。
- 发送方根据接收方当前的 Window 大小发送相应数量的数据。
-
TCP 四次挥手
TCP 支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP 通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。如图所示:
-
由 PC1 发出一个 FIN 字段置“1”的不带数据的 TCP 段;
-
PC2 收到 PC1 发来的 FIN 置位的 TCP 报文后,会回复一个ACK置位的 TCP 报文。
-
若 PC2 也没有需要发送的数据,则直接发送 FIN 置位的 TCP 报文。假设此时 PC2 还有数据要发送,那么当 PC2 发送完这些数据之后会发送一个 FIN 置位的 TCP 报文去关闭连接。
-
PC1 收到 FIN 置位的 TCP 报文,回复 ACK 报文,TCP 双向连接断开。
-
网络层
-
传输层负责建立主机之间进程与进程之间的连接,而网络层则负责数据从一台主机到另外一台主机之间的传递。
-
网络层的 PDU 被称为 Packet(包)。
-
网络层也叫Internet层
-
网络层作用
- 为网络中的设备提供逻辑地址。
- 负责数据包的寻径和转发。
- 常见协议如 IPv4,IPv6、ICMP,IGMP 等。
数据链路层
-
数据链路层位于网络层和物理层之间,可以向网络层的 IP、IPv6 等协议提供服务。数据链路层的 PDU 被称为 Frame(帧)。
-
以太网(Ethernet)是最常见的数据链路层协议。
-
数据链路层向网络层提供“段内通信”。
-
负责组帧、物理编址、差错控制等功能。
-
常见的数据链路层协议有:以太网、PPPoE、PPP 等。
-
ARP 协议
-
ARP(Address Resolution Protocol,地址解析协议)是根据 IP 地址获取数据链路层地址的一个 TCP/IP 协议。
-
ARP 是 IPv4 中必不可少的一种协议,它的主要功能是:
-
将 IP 地址解析为 MAC 地址;
-
维护 IP 地址与 MAC 地址的映射关系的缓存,即 ARP 表项;
-
实现网段内重复 IP 地址的检测。
-
-
ARP 工作原理
-
网络设备一般都有一个 ARP 缓存(ARP Cache)。ARP 缓存用来存放 IP 地址和 MAC 地址的关联信息。
-
在发送数据前,设备会先查找 ARP 缓存表。如果缓存表中存在对方设备的 ARP 表项,则直接采用该表项中的 MAC 地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应信息,则通过发送 ARP Request 报文来获得它。
-
学习到的 IP 地址和 MAC 地址的映射关系会被放入 ARP 缓存表中存放一段时间。在有效期内(缺省:180s),设备可以直接从这个表中查找目的 MAC 地址来进行数据封装,而无需进行 ARP 查询。过了这段有效期,ARP 表项会被自动删除。
-
如果目标设备位于其他网络,则源设备会在 ARP 缓存表中查找网关的MAC地址。然后将数据发送给网关。最后网关再把数据转发给目的设备。
-
物理层
-
数据到达物理层之后,物理层会根据物理介质的不同,将数字信号转换成光信号、电信号或者是电磁波信号。
-
物理层的 PDU 被称为比特流(Bitstream)。
数据通信过程
发送方数据封装
假设你正在通过网页浏览器访问华为官网,当你输入完网址,敲下回车后,计算机内部会发生下列事情:
- IE 浏览器(应用程序)调用 HTTP(应用层协议),完成应用层数据的封装(图中 DATA 还应包括 HTTP 头部,此处省略) 。
- HTTP 依靠传输层的 TCP 进行数据的可靠性传输,将封装好的数据传递到 TCP 模块。
- TCP 模块给应用层传递下来的 Data 添加上相应的 TCP 头部信息(源端口、目的端口等)。此时的 PDU 被称作
Segment(段)。 - 在 IPv4 网络中,TCP 模块会将封装好的 Segment 传递给网络层的 IPv4 模块(若在 IPv6 环境,会交给 IPv6 模块进行处理)。
- IPv4 模块在收到 TCP 模块传递来的 Segment 之后,完成
IPv4 头部的封装,此时的 PDU 被称为Packet(包)。 - 由于使用了 Ethernet 作为数据链路层协议,故在 IPv4 模块完成封装之后,会将 Packet 交由数据链路层的
Ethernet 模块(例如以太网卡)处理。 - Ethernet 模块在收到 IPv4 模块传递来的 Packet 之后,添加上相应的
Ethernet 头部信息和FCS 帧尾,此时的 PDU 被称为Frame(帧)。 - 在 Ethernet 模块封装完毕之后,会将数据传递到物理层。
- 根据物理介质的不同,物理层负责将数字信号转换成电信号,光信号,电磁波(无线)信号等。
- 转换完成的信号在网络中开始传递。
中间网络数据传输
封装好的完整数据,将会在网络中被传递。
接收方数据解封装
与封装过程相反。