(转)OSI七层模型和TCP/IP四层模型
原文:https://www.biaodianfu.com/osi-tcp-ip.html
OSI(Open System Interconnection,开放式通信互联) 是由 ISO(International Organization for Standardization,国际标准化组织) 制定的标准模型。旨在将世界各地的各种计算机互联。然而,OSI 模型过于庞大、复杂。参照此模型,技术人员开发了 TCP/IP 协议栈(之所以称为TCP/IP是因为TCP和IP是中间最重要的两个协议),简化 OSI 七层模型为 TCP/IP 四层模型。获得了更广泛的使用。
从上图可以看到,TCP/IP 模型合并了 OSI 模型的应用层、表示层和会话层,将 OSI 模型的数据链路层和物理层合并为网络访问层。
上图还列出了各层模型对应TCP/IP协议栈中的协议以及各层协议之间的关系。比如 DNS 协议是建立在 TCP 和 UDP 协议的基础上,FTP、HTTP、TELNET 协议建立在 TCP 协议的基础上,NTP、TFTP、SNMP 建立在 UDP 协议的基础上,而 TCP、UDP 协议又建立在 IP 协议的基础上,以此类推…..
OSI七层模型
OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输。
具体7层 | 数据格式 | 功能与连接方式 | 典型设备 |
应用层 Application | 数据Data | 网络服务与使用者应用程序间的一个接口 | 终端设备(PC、手机、平板等) |
表示层 Presentation | 数据Data | 数据表示、数据安全、数据压缩 | 终端设备(PC、手机、平板等) |
会话层 Session | 数据Data | 会话层连接到传输层的映射;会话连接的流量控制;数据传输;会话连接恢复与释放;会话连接管理、差错控制 | 终端设备(PC、手机、平板等) |
传输层 Transport | 数据组织成数据段Segment | 用一个寻址机制来标识一个特定的应用程序(端口号) | 终端设备(PC、手机、平板等) |
网络层 Network | 分割和重新组合数据包Packet | 基于网络层地址(IP地址)进行不同网络系统间的路径选择 | 网关、路由器 |
数据链路层 Data Link | 将比特信息封装成数据帧Frame | 在物理层上建立、撤销、标识逻辑链接和链路复用 以及差错校验等功能。通过使用接收系统的硬件地址或物理地址来寻址 | 网桥、交换机 |
物理层Physical | 传输比特(bit)流 | 建立、维护和取消物理连接 | 光纤、同轴电缆、
双绞线、网卡、中继器、集线器 |
完成中继功能的节点通常称为中继系统。在OSI七层模型中,处于不同层的中继系统具有不同的名称。
一个设备工作在哪一层,关键看它工作时利用哪一层的数据头部信息。网桥工作时,是以MAC头部来决定转发端口的,因此显然它是数据链路层的设备。七层模型传输数据过程:
物理层
为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性。并可能地屏蔽掉物理设备和传输媒体,通信手段的不同,使数据链路层感觉不到这些差异,只考虑完成本层的协议和服务。 它的传输单位是比特流,解决用户在使用时对物理传输介质建立、维持和释放问题。
物理层特性:
- 机械特性。指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等。这很像平时常见的各种规格的电源插头的尺寸都有严格的规定。 (例如双绞线标准)
- 电气特性。物理层的电气特性规定了在物理连接上传输二进制位流时线路上信号电压高低、阻抗匹配情况、传输速率和距离的限制等。
- 功能特性。规定了接口信号的来源、作用以及其他信号之间的关系。即物理接口上各条信号线的功能分配和确切定义。物理接口信号线一般分为数据线、控制线、定时线和地线。
- 规程特性。定义了再信号线上进行二进制比特流传输的一组操作过程,包括各信号线的工作顺序和时序,使得比特流传输得以完成。
传输数据单位:比特流 也就是所谓电流
数据链路层
数据链路层定义了在单个链路上如何传输数据,数据链路层必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧,帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。
数据链路层通过物理网络链路提供可靠的数据传输。不同的数据链路层定义了不同的网络和协议特征,其中包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。
- 物理编址(相对应的是网络编址)定义了设备在数据链路层的编址方式
- 网络拓扑结构定义了设备的物理连接方式,如总线拓扑结构和环拓扑结构
- 错误校验向发生传输错误的上层协议告警
- 数据帧序列重新整理并传输除序列以外的帧
- 流控可能延缓数据的传输,以使接收设备不会因为在某一时刻接收到超过其处理能力的信息流而崩溃。
数据链路层实际上由两个独立的部分组成,媒体访问控制(Media Access Control, MAC)和逻辑链路控制层(Logical Link Control, LLC)。MAC 描述在共享介质环境中如何进行帧的调度、发生和接收数据。MAC 确保信息跨链路的可靠传输,对数据传输进行同步,识别错误和控制数据的流向。一般地讲,MAC 只在共享介质环境中才是重要的,只有在共享介质环境中多个节点才能连接到同一传输介质上。IEEE MAC 规则定义了地址,以标识数据链路层中的多个设备。逻辑链路控制子层管理单一网络链路上的设备间的通信,IEEE 802.2 标准定义了 LLC。LLC 支持无连接服务和面向连接的服务。在数据链路层的信息帧中定义了许多域。这些域使得多种高层协议可以共享一个物理数据链路。
数据链路层主要有两个功能 :帧编码和误差纠正控制。
帧编码
为了使传输中发生差错后只将有错的有限数据进行重发,数据链路层将比特流组合成以帧为单位传送。每个帧除了要传送的数据外,还包括校验码,以使接收方能发现传输中的差错。帧的组织结构必须设计成使接收方能够 明确地从物理层收到的比特流中对其进行识别,也即能从比特流中区分出帧的起始与终止,这就是帧同步要解决的问题。
- 字节计数法
- 使用字符填充的首尾定界符法
- 使用比特填充的首尾标志法
- 违法编码法
误差纠正控制
一个实用的通信系统必须具备发现(即检测)这种差错的能力,并采取某种措施纠正之,使差错被控制在所能允许的尽可能小的范围内,这就是差错控制过程,也是数据链路层的主要功能之一。
数据链路层的主要协议有:
- 点对点协议(Point-to-Point Protocol);
- 以太网(Ethernet);
- 高级数据链路协议(High-Level Data Link Protocol);
- 帧中继(Frame Relay);
- 异步传输模式(Asynchronous Transfer Mode);
网络层
网络层负责在源和终点之间建立连接。它一般包括网络寻径,还可能包括流量控制、错误检查等。相同 MAC 标准的不同网段之间的数据传输一般只涉及到数据链路层,而不同的MAC标准之间的数据传输都涉及到网络层。例如 IP 路由器工作在网络层,因而可以实现多种网络间的互联。
网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。如果您想用尽量少的词来记住网络层,那就是“路由选择、路由及逻辑寻址”。
路由选择
- 静态路由:静态路由选择策略不用测量也无须利用网络信息,这种策略按某种固定规则进行路由选择。其中还可分为泛射路由选择、固定路由选择和随机路由选择三种算法。
- 泛射路由选择。这是一种最简单的路由算法。一个网络节点从某条线路收到一个分组后,再向除该条线路外的所有线路重复发送收到的分组。
- 固定路由选择。这是一种使用较多的简单算法。每个网络节点存储一张表格,表格中每一项记录对应着某个目的节点或链路。
- 随机路由选择。在这种方法中,收到分组的节点,在所有与之相邻的节点中为分组随机选择一个出路节点。方法虽然简单,也较可靠,但实际路由不是最佳路由,增加了不必要的负担,而且分组传输延迟也不可预测,故此法应用不广。
- 动态路由:节点路由选择要依靠网络当前的状态信息来决定的策略称动态路由选择策略,这种策略能较好地适应网络流量、拓扑结构的变化,有利于改善网络的性能。但由于算法复杂,会增加网络的负担,有时会因反应太快引起振荡或反应太慢不起作用。独立路由选择、集中路由选择和分布路由选择是三种动态路由选择策略的具体算法。
- 独立路由选择:在这类路由算法中,节点仅根据自己搜到的有关信息作出路由选择的决定,与其它节点不交换路由选择信息,虽然不能正确确定距离本节点较远的路由选择,但还是能较好地适应网络流量和拓扑结构的变化。
- 集中路由选择:集中路由选择也象固定路由选择一样,在每个节点上存储一张路由表。
- 分布路由选择:采用分布路由选择算法的网络,所有节点定期地与其每个相邻节点交换路由选择信息。
网络层协议
TCP/IP网络层的核心是IP协议,它是TCP/IP协议族中最主要的协议之一。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。
- IP地址。TCP/IP网络使用32位长度的地址以标识一台计算机和同它相连的网络,它的格式为:IP地址=网络地址+主机地址。IP地址是通过它的格式分类的,它有四种格式:A类、B类、C类、D类。
- 地址解析。ARP协议是“AddressResolutionProtocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。
- 逆地址解析。网络上的每个系统都具有唯一的硬件地址,它是由网络接口生产厂家配置的。无盘系统的RARP实现过程是从接口卡上读取唯一的硬件地址,然后发送一份RARP请求(一帧在网络上广播的数据),请求某个主机响应该无盘系统的IP地址(在RARP应答中)。
- 因特网报文。ICMP的作用:由于IP协议的两个缺陷:没有差错控制和查询机制,因此产生了ICMP。ICMP主要是为了提高IP数据报成功交付的机会,在IP数据报传输的过程中进行差错报告和查询,比如目的主机或网络不可到达,报文被丢弃,路由阻塞,查询目的网络是否可以到达等等。
- 因特网组管理协议称为IGMP协议(Internet Group Management Protocol),主机IP软件需要进行组播扩展,才能使主机能够在本地网络上收发组播分组。但仅靠这一点是不够的,因为跨越多个网络的组播转发必须依赖于路由器。路由器为建立组播转发路由必需了解每个组员在Internet中的分布,这要求主机必须能将其所在的组播组通知给本地路由器,这也是建立组播转发路由的基础。主机与本地路由器之间使用Internet组管理协议来进行组播组成员信息的交互。
传输层
传输层是国际标准化组织提出的开放系统互连(OSI)参考模型中的第四层。传输层向高层提供可靠的端到端的网络数据流服务。传输层的功能一般包括流控、多路传输、虚电路管理及差错校验和恢复。流控管理设备之间的数据传输,确保传输设备不发送比接收设备处理能力大的数据;多路传输使得多个应用程序的数据可以传输到一个物理链路上;虚电路由传输层建立、维护和终止;差错校验包括为检测传输错误而建立的各种不同结构;而差错恢复包括所采取的行动(如请求数据重发),以便解决发生的任何错误。
传输层的服务一般要经历传输连接建立阶段,数据传送阶段,传输连接释放阶段3个阶段才算完成一个完整的服务过程。而在数据传送阶段又分为一般数据传送和加速数据传送两种形式。传输层中最为常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram Protocol)。传输层提供逻辑连接的建立、传输层寻址、数据传输、传输连接释放、流量控制、拥塞控制、多路复用和解复用、崩溃恢复等服务。
在这一层,信息传送的协议数据单元称为段或报文。
网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。
传输层提供了主机应用程序进程之间的端到端的服务,基本功能如下:
- 分割与重组数据
- 按端口号寻址
- 连接管理
- 差错控制和流量控制,纠错的功能
传输层要向会话层提供通信服务的可靠性,避免报文的出错、丢失、延迟时间紊乱、重复、乱序等差错。
传输层既是OSI层模型中负责数据通信的最高层,又是面向网络通信的低三层和面向信息处理的高三层之间的中间层,并向高层用户屏蔽通信子网的细节。
会话层
会话层建立、管理和终止表示层与实体之间的通信会话。通信会话包括发生在不同网络应用层之间的服务请求和服务应答,这些请求与应答通过会话层的协议实现。它还包括创建检查点,使通信发生中断的时候可以返回到以前的一个状态。
会话层(Session)是建立在传输层之上,利用传输层提供的服务,使应用建立和维持会话,并能使会话获得同步。
- 为会话实体间建立连接。为给两个对等会话服务用户建立一个会话连接,应该做如下几项工作
- 将会话地址映射为运输地址
- 选择需要的运输服务质量参数(QOS)
- 对会话参数进行协商
- 识别各个会话连接
- 传送有限的透明用户数据
- 数据传输阶段。这个阶段是在两个会话用户之间实现有组织的,同步的数据传输.用户数据单元为SSDU,而协议数据单元为会话用户之间的数据传送过程是将SSDU转变成SPDU进行的。
- 连接释放。连接释放是通过”有序释放”,”废弃”,”有限量透明用户数据传送”等功能单元来释放会话连接的。
表示层
表示层位于OSI分层结构的第六层,它的主要作用之一是为异种机通信提供一种公共语言,以便能进行互操作。这种类型的服务之所以需要,是因为不同的计算机体系结构使用的数据表示法不同。与第五层提供透明的数据运输不同,表示层是处理所有与数据表示及运输有关的问题,包括转换、加密和压缩。
表示层提供多种功能用于应用层数据编码和转化,以确保以一个系统应用层发送的信息可以被另一个系统应用层识别。表示层的编码和转化模式包括公用数据表示格式、性能转化表示格式、公用数据压缩模式和公用数据加密模式。
公用数据表示格式就是标准的图像、声音和视频格式。通过使用这些标准格式,不同类型的计算机系统可以相互交换数据;转化模式通过使用不同的文本和数据表示,在系统间交换信息,例如 ASCII(American Standard Code for Information Interchange,美国标准信息交换码);标准数据压缩模式确保原始设备上被压缩的数据可以在目标设备上正确的解压;加密模式确保原始设备上加密的数据可以在目标设备上正确地解密。
表示层协议一般不与特殊的协议栈关联,如 QuickTime 是 Apple 计算机的视频和音频的标准,MPEG 是 ISO 的视频压缩与编码标准。常见的图形图像格式 PNG、GIF、JPEG 是不同的静态图像压缩和编码标准。
应用层
应用层是最接近终端用户的 OSI 层,这就意味着 OSI 应用层与用户之间是通过应用软件直接相互作用的。注意,应用层并非由计算机上运行的实际应用软件组成,而是由向应用程序提供访问网络资源的 API(Application Program Interface,应用程序接口)组成,这类应用软件程序超出了 OSI 模型的范畴。应用层的功能一般包括标识通信伙伴、定义资源的可用性和同步通信。因为可能丢失通信伙伴,应用层必须为传输数据的应用子程序定义通信伙伴的标识和可用性。定义资源可用性时,应用层为了请求通信而必须判定是否有足够的网络资源。在同步通信中,所有应用程序之间的通信都需要应用层的协同操作。
OSI 的应用层协议包括文件的传输、访问及管理协议(FTAM) ,以及文件虚拟终端协议(VIP)和公用管理系统信息(CMIP)等。
应用层协议的代表包括:Telnet、FTP、HTTP、SNMP、DNS等。
TCP/IP 四层模型
数据在网络中传输最终一定是通过物理介质传输。物理介质就是把电脑连接起来的物理手段,常见的有光纤、双绞线,以及无线电波,它决定了电信号(0和1)的传输方式,物理介质的不同决定了电信号的传输带宽、速率、传输距离以及抗干扰性等等。网络数据传输就像快递邮寄,数据就是快件。只有路打通了,你的”快递”才能送到,因此物理介质是网络通信的基石。
当用户通过 HTTP 协议发起一个请求,应用层、传输层、网络互联层和网络访问层的相关协议依次对该请求进行包装并携带对应的首部,最终在网络访问层生成以太网数据包,以太网数据包通过物理介质传输给对方主机,对方接收到数据包以后,然后再一层一层采用对应的协议进行拆包,最后把应用层数据交给应用程序处理。下面说每一层的含义。
链路层
链路层是网络通信协议的最底层协议。通过物理介质只能传送 0 和 1 的电信号,单纯发送一堆 01 的数列是没有意义的,所以就需要对数列进行分组,并为每组电信号标识好信息特征(哪些位代表哪些含义),按照分组的顺序依次发送电信号。以太网规定一组电信号就是一个数据包,一个数据包就称为一帧,类似的这些规则就是以太网协议。完整的以太网数据包如下所示。
前 14 个字节是首部,包含源 MAC 地址、目标 MAC 地址和类型,最后四个字节是数据帧校验序列,确定数据包在传输过程中是否损坏。中间的就是要传输的数据。最少 46 个字节,最多 1500 个字节,如果要传输的数据过大就要分多个数据帧传送了。那么以太网是怎么把数据传给目标主机的呢?
以太网协议规定通过 MAC 地址来识别传输双方的身份,接入网络的设备必须安装网络适配器(网卡),数据包只能从一块网卡传输到另一个网卡,网卡地址就是 MAC 地址,是每块网卡的身份标识,全球唯一。MAC 地址是十六进制的,一共 6 个字节(48位)。前三个字节是厂商编号,后三个字节是网卡流水号。例如4C-0F-6E-12-D2-19。有了 MAC 地址,以太网以广播的形式,把数据包发送给子网内的所有主机,主机接到数据包后检查首部中的目标 MAC 地址是不是自己,如果是自己就做进一步的处理,反之就会把包丢弃。
因此网络访问层的主要工作就是将电信号分组,然后将每组电信号封装成有特定意义的数据帧,以广播的形式通过物理介质发送给目标主机。
如果非要细分的话,通信链路层也可以分为 物理层 和 数据链路层。
- 物理层:物理层是 TCP/IP 的最底层是负责传输的硬件,这种硬件就相当于是以太网或电话线路等物理层的设备。
- 数据链路层:数据链路层位于物理层和网络层中间,数据链路层定义了在单个链路上如何传输数据。
网络层
网络访问层的以太网协议会把数据包发送给子网内的所有主机,数据帧中包含 MAC 地址。但是 MAC 地址只与厂商有关,和所处于的网络无关,通过 MAC 地址没有办法判定两台主机是不是在同一个子网。那么它怎么知道哪些主机和它在同一个子网?要是目标主机不在同一个子网又怎么把数据传给它?
为了解决第一个问题,网络互联层引入 IP 协议。IP 协议制定一套新的 IP 地址,使得我们能够区分两台主机是不是处于同一个网络。IP 协议基于 IP 地址转发分包数据。
IP 协议的主要作用就是将分组数据包发送到目标主机。IP 还隐含着数据链路层的功能,通过 IP 协议,相互通信的主机之间不论经过怎样的底层数据链路,都能够实现相互通信。虽然 IP 也是一种分组交换协议,但是 IP 却不具备重发机制。即使数据没有到达另一端也不会进行重发,所以 IP 属于非可靠性协议。
IP 地址目前分两个版本,就是我们常说的 IPV4 和 IPV6。IPV4 是 32 位地址,分四段(10.4.121.79),一段 8 位(最大 255),常用四个 10 进制的数字表示。IP 协议把这个 32 位的 IP 地址分两部分,第一部分表示网络地址,第二部分表示该主机在局域网中的地址。这就是 IP 的子网划分。
IP协议将子网划分为3类。
- A 类 IP 段0.0.0到126.255.255.255(0 段 和 127 段不使用)。默认子网掩码255.0.0.0,一个子网最多可以容纳 1658 万多台电脑。
- B 类 IP 段0.0.0到191.255.255.255。默认子网掩码255.255.0.0一个子网最多可以容纳 6 万台电脑。
- C 类 IP 段0.0.0到223.255.255.255。默认子网掩码255.255.255.0一个子网最多可以容纳 254 台电脑。
将 IP 地址和子网掩码转换成 2 进制的 32 位数字。例如 C 类 IP 192.160.4.1。其子网掩码二进制为11111111.11111111.11111111.00000000,进行逻辑与(&)操作,得到网络 ID 为192.160.4.0。如果两个 IP 地址的网络 ID 相同,就说明他们在同一个子网中。
要算一个子网掩码最多可以容纳多少个电脑就可以这么算。例如子网掩码255.255.248.0转换成二进制11111111.1111111.11111000.00000000,后面有 11 个 0,就可以容纳 211-2211-2 台主机。减 2 是因为0.0.0.0(全 0)是保留地址,255.255.255.255(全 1)是广播地址。
算主机的子网中的主机 ID,将子网掩码取反。00000000.00000000.00000000.11111111和 IP 做逻辑与(&)操作。得出的就是主机在该子网中的主机 ID。
应用层的协议会将发送者和接受者的IP地址传给网络互联层,因此通过子网掩码和 IP 进行逻辑与(&)就可以判断两个 IP 是不是同一个子网中。如果不在同一个子网中,就需要路由器转发才能进行数据交换。
当判断 IP 处于同一个子网中时,网络互联层通过 ARP(地址解析)协议根据 IP 地址获取 MAC 地址。ARP 首先会发起一个请求数据包,数据包的首部包含了目标主机的 IP 地址,然后这个数据包会在链路层进行再次包装,生成以太网数据包,最终由以太网广播给子网内的所有主机,每一台主机都会接收到这个数据包,并取出标头里的 IP 地址,然后和自己的 IP 地址进行比较,如果相同就返回自己的 MAC 地址,如果不同就丢弃该数据包。ARP 接收返回消息,以此确定目标机的 MAC 地址;与此同时,ARP 还会将返回的 MAC 地址与对应的 IP 地址存入本机 ARP 缓存中并保留一定时间,下次请求时直接查询 ARP 缓存以节约资源。cmd输入arp -a就可以查询本机缓存的 ARP 数据。
通过 ARP 协议的工作原理可以发现,ARP 的 MAC 寻址还是局限在同一个子网中,因此网络互联层引入了路由协议,首先通过IP协议来判断两台主机是否在同一个子网中,如果在同一个子网,就通过 ARP 协议查询对应的 MAC 地址,然后以广播的形式向该子网内的主机发送数据包;如果不在同一个子网,以太网会将该数据包转发给本子网的网关(路由器)进行路由。网关是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标 IP 所在的子网中,然后再通过 ARP 获取目标机 MAC,最终也是通过广播形式将数据包发送给接收方。
而完成这个路由协议的物理设备就是路由器(或者有路由功能的设备,比如开启了路由协议的服务器、代理服务器也可以称之为路由器),网关的 IP 地址就是具有路由功能的设备的 IP 地址。在错综复杂的网络世界里,路由器扮演者交通枢纽的角色,它会根据信道情况,选择并设定路由,以最佳路径来转发数据包。在网络互联层被包装的数据包就叫 IP 数据包,IPv4 数据包的结构如下图所示:
IP 数据包由首部和数据两部分组成,首部长度为 20 个字节,主要包含了目标 IP 地址和源 IP 地址,目标IP地址是网关路由的线索和依据;数据部分的最大长度为 65515 字节,理论上一个 IP 数据包的总长度可以达到 65535 个字节,而以太网数据包的最大长度是 1500 个字符,如果超过这个大小,就需要对 IP 数据包进行分割,分成多帧发送。
所以,网络层的主要工作是定义网络地址,区分网段,子网内MAC寻址,对于不同子网的数据包进行路由。
网络层还有一种协议就是 ICMP,因为 IP 在数据包的发送过程中可能会出现异常,当 IP 数据包因为异常而无法到达目标地址时,需要给发送端发送一个异常通知,ICMP 的主要功能就在于此了。鉴于此情况,ICMP 也可以被用来诊断网络情况。
传输层
我们上面刚介绍完 TCP/IP 协议最重要的 IP 协议后,下面我们来介绍一下传输层协议,TCP 协议时传输层协议的一种。
传输层就好像高速公路一样,连接两个城市的道路。下面是互联网的逻辑通道,你可以把它想象成为高速公路。
传输层最主要的功能就是让应用层的应用程序之间完成通信和数据交换。在计算机内部运行着很多应用程序,每个应用程序都对应一个端口号,我们一般使用端口号来区分这些应用程序。
传输层的协议主要分为面向有连接的协议 TCP 和面向无连接的协议 UDP:
- TCP 是一种可靠的协议,它能够保证数据包的可靠性交付,TCP 能够正确处理传输过程中的丢包、传输顺序错乱等异常情况。此外,TCP 还提供拥塞控制用于缓解网络拥堵。
- UDP 是一种不可靠的协议,它无法保证数据的可靠交付,相比 TCP ,UDP 不会检查数据包是否到达、网络是否阻塞等情况,但是 UDP 的效率比较高。UDP 常用于分组数据较少或者广播、多播等视频通信和多媒体领域。
应用层
在 TCP/IP 协议簇中,将 OSI 标准模型中的会话层、表示层都归为了应用层。应用层的架构大多属于客户端/服务端模型,提供服务的程序叫做服务端、接受服务的程序叫做服务端。在这种架构中,服务端通常会提前部署到服务器上,等待客户端的连接,从而提供服务。
理论上讲,有了以上三层协议的支持,数据已经可以从一个主机上的应用程序传输到另一台主机的应用程序了,但此时传过来的数据是字节流,不能很好的被程序识别,操作性差,因此,应用层定义了各种各样的协议来规范数据格式,常见的有http,ftp,smtp等。
数据包发送历程
数据包结构
在上面的每个分层中,都会对所发送的数据增加一个首部,这个首部中包含了该层必要的信息。每一层都会对数据进行处理并在数据包中附上这一层的必要信息。
假设主机 A 和主机 B 进行通信,主机 A 想要向主机 B 发送一个数据包,都会经历哪些奇特的操作?
应用层的处理
主机 A 也就是用户点击了某个应用或者打开了一个聊天窗口输入了Hello,然后点击了发送,那么这个 Hello就作为一个数据包遨游在了网络中,等下还没完呢,应用层还需要对这个数据包进行处理,包括字符编码、格式化等等,这一层其实是 OSI 中表现层做的工作,只不过在 TCP/IP 协议中都归为了应用层。
数据包在发送的那一刻建立 TCP 连接,这个连接相当于通道,在这之后其他数据包也会使用通道传输数据。
传输层的处理
为了描述信息能准确的到达另一方,我们使用 TCP 协议来进行描述。TCP 会根据应用的指示,负责建立连接、发送数据和断开连接。
TCP 会在应用数据层的前端附加一个 TCP 首部字段,TCP 首部包含了源端口号 和 目的端口号,这两个端口号用于表明数据包是从哪里发出的,需要发送到哪个应用程序上;TCP 首部还包含序号,用以表示该包中数据是发送端整个数据中第几个字节的序列号;TCP 首部还包含 校验和,用于判断数据是否损坏,随后将 TCP 头部附加在数据包的首部发送给 IP。
网络层的处理
网络层主要负责处理数据包的是 IP 协议,IP 协议将 TCP 传过来的 TCP 首部和数据结合当作自己的数据,并在 TCP 首部的前端加上自己的 IP 首部。因此,IP 数据包后面会紧跟着 TCP 数据包,后面才是数据本身。IP 首部包含目的和源地址,紧随在 IP 首部的还有用来判断后面是 TCP 还是 UDP 的信息。
IP 包生成后,会由路由控制表判断应该发送至哪个主机,IP 修饰后的数据包继续向下发送给路由器或者网络接口的驱动程序,从而实现真正的数据传输。
如果不知道目标主机的 IP 地址,可以利用 ARP(Address Resolution Protocol) 地址解析协议进行查找。
通信链路层的处理
经由 IP 传过来的数据包,以太网会给数据附上以太网首部并进行发送处理。以太网首部包含接收端的 MAC 地址、发送端的 MAC 地址以及标志以太网类型的以太网数据协议等。
下面是完整的处理过程和解析过程。
数据包接收历程
数据包的接收流程是发送流程的逆序过程,数据包的解析同样也会经过下面这几步。
通信链路的解析
目标主机收到数据包后,首先会从以太网的首部找到 MAC 地址判断是否是发给自己的数据包,如果不是发给自己的数据包则会丢弃该数据包。
如果收到的数据包是发送给自己的,就会查找以太网类型判断是哪种协议,如果是 IP 协议就会扔给 IP 协议进行处理,如果是 ARP协议就会扔给 ARP 协议进行处理。如果协议类型是一种无法识别的协议,就会将该数据包直接丢弃。
网络层的解析
经过以太网处理后的数据包扔给网络层进行处理,我们假设协议类型是 IP 协议,那么,在 IP 收到数据包后就会解析 IP 首部,判断 IP 首部中的 IP 地址是否和自己的 IP 地址匹配,如果匹配则接收数据并判断上一层协议是 TCP 还是 UDP;如果不匹配则直接丢弃。
注意:在路由转发的过程中,有的时候 IP 地址并不是自己的,这个时候需要借助路由表协助处理。
传输层的处理
在传输层中,我们默认使用 TCP 协议,在 TCP 处理过程中,首先会计算一下 校验和,判断数据是否被损坏。然后检查是否按照序号接收数据,最后检查端口号,确定具体是哪个应用程序。
数据被完整的识别后,会传递给由端口号识别的应用程序进行处理。
应用程序的处理
接收端指定的应用程序会处理发送方传递过来的数据,通过解码等操作识别出数据的内容,然后把对应的数据存储在磁盘上,返回一个保存成功的消息给发送方,如果保存失败,则返回错误消息。
上面是一个完整的数据包收发过程,在上面的数据收发过程中,涉及到不同层之间的地址、端口号、协议类型等,那么我们现在就来剖析一下。
数据包经过每层后,该层协议都会在数据包附上包首部,一个完整的包首部图如下所示:
在数据包的发送过程中,各层以此对数据包添加了首部信息,每个首部都包含发送端和接收端地址以及上一层的协议类型。以太网会使用 MAC 地址、IP 会使用 IP 地址、TCP/UDP 则会用端口号作为识别两端主机的地址。
此外,每个分层中的包首部还包含一个识别位,它是用来标识上一层协议的种类信息。