TCP/IP 协议栈_2
- 前言
- 一、TCP/IP协议栈四层协议系统
- 二、封装和分用
- 总结
前言
既然要学习计算机网络编程, 就不得不提计网祖师爷 W· Richard Stevens, 天妒英才, 先生于1999年就早早陨落. 不知多少人凭着先生所著 “TCP/IP详解” 以及 “UNIX网络编程” 吃的盆满钵满. 而至今可说还未有能超越先生的著作.
但经典的问题是难读, 不是说书写的晦涩, 而是人们普遍对大部头有畏难情绪, 没有耐心读完. 没办法, 那就选择二手粮食吧.
当然, 我仍然鼓励有志者去读经典, 我们身边充斥的二手解读不是不能用, 而是不成体系, 失了精髓.
一、TCP/IP协议栈四层协议系统
之所以称 TCP/IP 协议栈, 是因为这里边不止是 TCP 协议和 IP 协议, 单这俩协议支撑不起网络. 它是一个四层的协议体系:
数据链路层: 底层网卡接口驱动, 属于硬件部分. 最终所有的逻辑都要转换称物理信号进行传递.
网络层: 实现数据包的选路和转发, 其主要任务是选择合适的路由器节点, 确定主机之间的通信路径. 网络层主要包括 IP 协议和 ICMP 协议.
传输层: 忽略中间传递过程, 负责两台通讯主机的端到端通信. 其实就是一层层封装, 使操作者不必关心传输的具体细节, 只关心传输接收到的信息. 传输层主要包括 TCP协议, UDP协议, SCTP协议(不做介绍).
应用层: 负责处理应用程序的逻辑. 这一层,才是我们最终用到的程序逻辑执行, 处理接收到的信息, 发出处理完成后需要对方应答的信息, 以及其它附加的逻辑.
你可以认为整个协议栈就是为完成一个网络 IO, 普通的 IO 是从自己的硬盘, 终端等输入, 再通过程序逻辑输出到终端, 或存储到硬盘, 而 TCP/IP协议栈就是扩展到整个互联网都是你的硬盘, 都是你的终端.
应用层主要包括的是用户的程序, 所有利用传输层及以下层协议的程序都属于应用层.
如图所见, 传输层以下都属于内核空间, 意思是都是属于操作系统层的实现, 是操作系统固有的设施, 用户不得干预.
而应用层则是用户空间, 即用户可以自己把握的部分也就是如何处理这些传过来的数据.
而连接用户空间及内核空间的就是 socket 接口.
二、封装和分用
所谓封装, 就是将信息一层层包裹,
程序数据包裹到TCP/UDP,
TCP报文段/UDP数据报包裹到 IP,
IP数据报包裹至以太网帧,
然后通过物理途径发送出去. 所以, 以太网帧才是最终在物理网络中传送的字节序列.
所谓分用则是以太网帧达到目的主机, 然后逐层剥离封装, 将应用程序数据传递给应用程序的过程.
封装剥离的方法是根据封装层头部的类型 / 协议 / 端口号, 将剥离层的数据转发给相应的处理协议 / 程序进行处理.
当信息通过互联网传递, 通过封装和分用的作用, 让程序可以忽略层层处理, 直接使用数据.
总结
TCP/IP协议栈的内容是十分复杂的, 但并不难以理解.
我们将网络协议分为四层, 信息的传递是通过发送端四层协议的层层封装,成为可物理传递的以太网帧发送, 以及接收端通过四层协议的层层剥离, 将以太网帧还原为应用程序信息.