bash
昨天因为有事情,就没更新
因特网模型协议栈( The Internet protocol stack), 也有地方叫 TCP/IP协议套件(TCP/IP protocol suite),该协议栈目前能找到的最早记录在由五层组成:物理层(Physical Layer)、 链路层(Link Layer)、网络层(Internet Layer)、传输层(Transport Layer)、应用层(Application Layer)。全网查了一下,RFC中关于TCP/IP模型的文中没看到明确的物理层定义,目前能找到的最早提出该分层的出处源自《《计算机网络:自顶向下方法》。
物理层
网络的物理形式,例如电缆、光纤、网卡、集线器等等。
物理层处理的数据是比特(bit)、符号(symbol)。将数字信号转换成电信号、无线电信号或光信号。
链路层的任务是将整个帧从一个网络元素移动到另一个网络元素,而物理层的工作是将该帧中的各个比特(the individual bits)从一个节点移到下一个节点。
该层中的协议依旧依赖链路层,并进一步依赖于链路的实际传输介质(例如:双绞铜线、单模光纤),例如以太网 (Ethernet) 有很多物理层协议:用于双绞铜线的、用于同轴电缆的、 用于光纤的,等等。在每种情况下,在链路上移动一个比特都是以不同的方式进行的。
链路层
链路层,也称为数据链路层,该层处理的数据包(有的教科书也会中译为分组,这里统称数据包)被称为帧(frame)。
链路层负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层。
Internet 的网络层通过源和目标之间的一系列路由器 路由 数据报。为了将数据包从一个节点(主机或者路由器)移动到路由中的下一个节点,网络层依赖于链路层的服务:
在每个节点,网络层将数据报向下传递到链路层,链路层将数据报沿路由传送到下一个节点。
在这个下一个节点,链路层将数据报向上传递到网络层。
链路层提供的服务取决于该链路上采用的特定链路协议。链路层协议的示例包括以太网(Ethernet)、WiFi 和有线接入网络的 DOCSIS 协议。
一些链路层协议提供从发送节点通过一条链路到接收节点的可靠传输。
这种可靠传送服务不同于 TCP 的可靠传送服务,后者提供从一个端系统到另一个端系统的可靠传送。
由于数据报通常需要遍历多条链路才能从源传输到目的地,因此数据报可能会在沿其路由的不同链路上由不同的链路层协议处理。例如,数据报可能在一条链路上由以太网处理,而在下一条链路上由 PPP 处理。
之后网络层将从每个不同的链路层协议接收不同的服务。
VLAN是该层的一个网络协议,通过在以太网协议头部添加tag实现了广播域的隔离。
网络层
IP 协议就处在这一层。因为 IP 协议定义了"IP 地址"的概念,所以就可以在"链接层"的基础上,用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再"翻译"成 MAC 地址就可以了。
网络层负责处理的该层数据包称为数据报(datagram),该层负责将数据报(datagram)从一台主机移动到另一台主机。
源主机中的 Internet 传输层协议(TCP 或 UDP)将传输层的报文段和目标地址传递到网络层。然后,网络层提供将报文段传送到目标主机中的传输层的服务。
该网络层包含著名的IP协议,它定义了数据报中的字段以及终端系统和路由器如何处理这些字段。
IP协议只有一种,所有具有网络层的 Internet 组件都必须实现该协议。
Internet 的网络层还包含路由协议,用于确定源与目的地之间采用的路由, 该层存在多种路由协议。
Internet 是一个由网络组成的网络,在一个网络中,网络管理员可以运行任何所需的路由协议。网络层虽然包含IP协议和众多的路由协议,但通常简称为IP层,反映了IP是将互联网连接在一起的黏合剂。
关于 IP协议
IP 是一种无连接或数据报互联网络服务,不提供端到端交付保证。因此,IP 数据报可能会损坏、重复、无序或根本没有到达目标主机。
IP 之上的层负责在需要时提供可靠的交付服务。
IP 协议包括对寻址、服务类型规范、分段和重组以及安全信息的规定。
IP 协议的数据报或无连接特性是 Internet 体系结构的基本特征。
Internet IP 是 OSI 无连接网络协议 的模型。
ICMP 是一种控制协议,被认为是 IP 的一个组成部分,尽管它在架构上分层在 IP 之上,即它使用 IP 来端到端地传输其数据,就像 TCP 或 UDP 等传输协议一样。
ICMP 提供错误报告、拥塞报告和第一跳网关重定向。
IGMP 是一种 Internet 层协议,用于为 IP 多播建立动态主机组。
传输层
传输层在应用程序端点之间传送应用层报文,为应用程序提供端到端的通信服务,该层的数据包称为报文段(segment)。
该层次协议的职责是保证数据在 IP 地址标记的两点之间"可靠"地传输,目前有两种主要的传输层协议:传输控制协议 (TCP) 和 用户数据报协议 (UDP) ,两者都能传输应用层的报文段。
TCP:向应用程序提供了一种可靠的面向连接的传输服务,可提供端到端的可靠性、重新排序和流量控制。是一个有状态的协议,需要先与对方建立连接然后才能发送数据,而且保证数据不丢失不重复。
TCP 将长报文划分为短报文,并提供阻塞控制机制,以便在网络拥塞时,源端点限制其传输速率。
UDP :为其应用程序提供无连接服务。它无状态,不用事先建立连接就可以任意发送数据,但不保证数据一定会发到对方,没有可靠性、没有流量控制。
两者另一个重要区别:TCP 的数据是连续的"字节流",有先后顺序,而 UDP 则是分散的小数据包,是顺序发,乱序收
TCP的开销高于UDP,性能低于UPD,但使用TCP可以保证数据的正确性、顺序性和不可重复性,对应业务应用的通信,TCP是更合适的选择。
应用层
应用层是网络应用及它们的应用层协议存留的地方。该层本质上结合了OSI参考模型的表示层和应用层的功能。由于 IP 协议栈没有定义应用层和传输层之间的层,因此应用层必须包括任何与 OSI 的表示层和会话层协议类似的协议。这通常是通过库来完成的。
应用层协议分布在多个端系统上,而一个端系统中的应用程序使用协议与另一个端系统中的应用程序交换信息数据包。这种应用层的信息数据包称为报文(message)。
该层区分了两类应用层协议:直接向用户提供服务用户协议和提供通用系统功能的支持协议。
下面是一些常见的用户协议,除了这些还有许多其他标准化的用户协议和许多私有用户协议,这里暂不列举了:
Telnet(远程登录)
FTP(文件传输,用于支持两个端系统之间的文件传送)
SMTP(电子邮件传递,用于支持电子邮件报文的传输)
HTTP (超文本传输协议,用于支持了Web文档的请求和传送)
HTTP 利用 TCP/IP 协议栈逐层打包再拆包,实现了数据传输。
应用层与传输层中间有一个Socket抽象层(即如UNIX域套接字),该层是应用层与TCP/IP协议族通信的中间软件抽象层,是它的一组接口。应用层信息通过Socket从用户态传到内核态的传输层。
用于主机名映射、引导和管理的支持协议包括 SNMP、BOOTP、RARP 和域名系统 (DNS) 协议。
DNS :域名系统(特定的应用层协议),用于将baidu.com这些容易记忆的域名转换为32比特的网络地址。
封装
在每一层,一个数据包具有两种类型的字段:头字段(header fields)和有效载荷字段(payload field),有效载荷通常来自上一层的数据包,头字段来自当前层。
比如最简单的情境下:
在发送主机端,一个应用层报文(application-layer message)被传输到传输层,传输层收取到报文并附上附加信息(即,传输层的头字段),该头字段将被接收端的传输层使用。应用层的报文和传输层的头字段一起构成了传输层报文段(transport-layer segment)。传输层报文段因此封装了应用层报文,其附加的信息也许包含下列信息:
允许接收方传输层将消息向上传递给适当的应用程序的信息
允许接收方确定消息中的位(bits)是否已在路由中更改的错误检测位(error-detection bits)
网络层添加如源和目标端系统地址等网络层头信息,生成了网络层数据报(network-layer datagram)。
链路层增加自己的头信息并生成链路层帧(link-layer frame)。
其实应用层报文(application-layer message)本身也是将相应信息和应用层的头信息一起封装后得到的。