文章

TCP/IP 教程 | 网络协议概述

TCP/IP 协议分层

image.png

物理层为数据链路层实现在物理链路的传输,在其上串行传送电气特征的比特流。所以,该层中比较密切的是电气特性和物理特性等功能。

数据链路层负责在网络节点间的线路上通过检测流量控制重发等手段,无差错地传送以帧为单位的数据。为做到这一点,在每一帧中必须同时带有同步地址差错控制流量控制等控制信息。

网络层为了将数据分组从源(源端系统) 送到 目的地(目标端系统) ,网络层的任务就是选择合适的路由和交换节点,使源的传输层传下来的分组信息能够正确无误地按照地址找到目的地,并交付给相应的传输层,即完成网络的寻址功能。

传输层是高低层之间衔接的接口层。数据传输的单位是报文,当报文较长时将它分割成若干分组,然后交给网络层进行传输。传输层是计算机网络协议分层中的最关键一层,该层以上各层将不再管理信息传输问题。

会话层对传输的报文提供同步管理服务。在两个不同系统的互相通信的应用进程之间建立、组织和协调交互。例如,确定是双工还是半双工工作。

表示层主要任务是把所传送的数据的抽象语法变换为传送语法,即把不同计算机内部的不同表示形式转换成网络通信中的标准表示形式。此外,对传送的数据加密(或解密)、正文压缩(或还原)也是表示层的任务。

应用层直接面向用户,是OSI中的最高层。它的主要任务是为用户提供应用的接口,即提供不同计算机间的文件传送、访问与管理,电子邮件的内容处理,不同计算机通过网络交互访问的虚拟终端功能等。

形象说明

理论说明总是比较生硬, 我们举一个形象的例子说一下各层的作用以及消息到底是怎么传输的。

image.png

在互联网中, 所有的主机的ip会根据规则划分为一个个不同的子网,我们在这里用云图来标识这个子网区域, 主机为云图中的点。

有些主机负责联通两个或者多个子网, 这种主机被我们称为 网关,其主要起到不同子网间通信时的报文转发的作用。

不管是网关主机还是其他类型的主机, 内部都会维护两张与通信相关的表信息,它们分别叫做ARP表Route表.

主机中的每一个网络接口都会维护一张ARP表, 用于记录这个子网内的的其他主机的mac地址。 值得注意的是: mac 地址是主机间进行信息传递的凭证而并非是我们普通意义上认知的IP.

Route表的主要作用是用于记录从本主机发出的跨子网通信数据包下一跳网关地址,以及从哪个网卡发出等信息。

所以处于不同子网内的主机通信时, 数据包就根据route表在主机间不停跳转,指到到达目的子网,然后根据arp表,将报文发送到目的主机。

一个普通数据包的格式大致如:

image.png

以下是以太网首部与ip首部部分字段, 可以看出, mac 地址在链路层使用, 而ip地址在网络层使用。

image.png

我们假设有一个数据包从A发送到B

image.png

A 中从应用层下来一个数据包, 根据目的ip地址等信息封装成一个ip数据包, 这时候根据网络掩码信息判断这个数据包不是在同一个网络范围内。

这时候根据route 信息定位到所在网络的网关主机为下一跳地址,所以将源mac地址设置为A主机,将目的mac设置为B主机, 将数据包发送给网络交换机。

交换机经过目的mac地址, 然后将包从对应接口发送到目的mac主机,即网关主机。

网关主机运行有路由程序, 接受到数据包后拆到网络层发现目的主机并不是本机而且不在本网络,则查找本机Route表信息, 查找目的主机的下一跳主机,以及转发的接口, 然后查找对应接口处的ARP表, 找到对应主机ip的mac地址。

然后将原数据包的源mac地址设置为此网关主机, 将目的mac设置为目的主机的mac地址, 将数据包从对应接口发送给下一个网络的交换机。

。。。

中间经过数次转发后,数据包终于发到B主机所在网络的网关主机, 主机接受到数据包后,通过Route 表可以发现目的主机位于此网关主机的某个接口对应的网络中, 则查找对应接口处的ARP表,

找到对应主机ip的mac地址, 重新封装以太网首部,然后将数据包发往对应接口的交换机。

数据包经交换机发到B主机后, B 主机拆开网络层, 发现目的主机为本主机, 源主机为A主机, 得知是有A主机发来的数据包, 则将数据包往上交付给传输层或者应用层。

本文由作者按照 CC BY 4.0 进行授权

© . 保留部分权利。

本站采用 Jekyll 主题 Chirpy