协议栈
我们有很多协议,它们像栈一样垒起来,对在网络上传输的数据进行操作:发送时留下自己这个协议的标记,接收时解析自己这个协议留下的标记
数据报文的封装与分用
封装
数据进入内核协议栈中,被TCP/IP协议族的每层协议打标记,最后得到一串比特流,进入网络的过程。对于每一层而言,对收到的数据都会封装对应的协议首部信息(有时还会增加尾部信息)
TCP segment:TCP协议传递给IP协议的数据单元叫做TCP报文段,或者简称TCP段
IP
datagram:IP协议传递给数据链路层的数据单元叫做IP
数据报
Frame:最后通过以太网传输的比特流称为帧
分用
当目的主机接收到一个以太网的数据帧时,数据就开始从内核网络协议栈中由底向上升,同时去掉各层协议加上的报文首部,每层协议都会检查报文首部中的协议标识,以确定接收数据的上层协议,这个过程称为分用

Linux内核网络协议栈
协议栈的分层结构
逻辑抽象层级
- 物理层:主要提供各种连接的物理设备,如各种网卡,串口卡等
- 链路层:主要提供对物理层进行访问的各种接口卡的驱动程序,如网卡驱动等
- 网络层:负责把网络数据包传输到正确的位置,最重要的网络层协议是IP协议,此外还有如ICMP,ARP,RARP等协议
- 传输层:为应用程序提供端到端连接,主要为TCP和UDP协议
- 应用层:主要为应用程序提供,用来对传输数据进行语义解释的协议,如HTTP,SMTP,FTP等