之前写过一篇《通俗易懂TCP/IP(概述)》,广受欢迎和好评,有网友催更,便抽空续写IP章节,回应粉丝期待 。
TCP/IP网络模型TCP/IP网络模型分为4层,自下而上分布为链路层(又叫网络接口层)、网络层、传输层、应用层 。
文章插图
- 链路层:处理数据在媒介上的表示、传输以及与硬件交互的细节 。
- 网络层:IP层负责IP数据报的路由转发,所有的TCP、UDP、ICMP和IGMP数据都通过IP数据报传输 。网络层(IP)提供了一种尽力而为、无连接、不可靠的数据报交付服务,IP负责将IP数据报(又叫分组)放入数据链路层传输,并处理分片和重组逻辑 。
- 传输层:为端主机上运行的应用程序提供端到端服务,包括TCP和UDP 。
- TCP提供了带流量控制、拥塞控制、有序、可靠的流交付,TCP需要处理丢包检测重传、重排序等IP层不处理的问题,TCP面向连接,不保留消息边界 。
- UDP提供的功能基本上没有超越IP,不提供速率控制和差错控制,不保证可靠性,UDP只是提供一套端口号,用于复用、多路分解(即把收到的数据报交给应用层对应程序处理)和校验数据完整性(只检错不纠错),UDP面向非连接,保留消息边界 。
- 应用层:负责处理特定应用的细节,通常应用的实现都是基于TCP/IP或者UDP/IP 。应用层与应用细节相关,与网络数据传输无关,而之下的三层(链路层、网络层、传输层)则对应用一无所知,但需要处理通信的细节 。
文章插图
分层的目标是隔离,通过分层实现:下层对上层透明,而上层利用下层提供的能力 。
分层的另一个优点是协议复用,这种复用允许多种协议共存于同一基础设施之中,复用可以发生在不同层,并在每层都有不同类型的标识符区分,用于确定信息属于哪个协议 。
比如在链路层的数据帧(Frame)有一个协议标识符字段,用来标识链路层帧携带的协议是IP还是ARP;又比如在网络层的IP数据报头部有一个8位协议字段,标识该IP数据报来自于TCP、还是UDP、亦或是ICMP、IGMP...
封装数据在发送端从上到下经过TCP/IP协议栈,遵循应用层->TCP/UDP->IP->链路层的顺序 。
当某层的一个协议数据单元(PDU)对象转换为由底层携带的数据格式表示,这个过程称为在相邻低层的封装,即上层被封装对象作为不透明数据充当底层的Payload部分,封装是层层包裹的过程 。
文章插图
每层都有自己的消息对象(PDU)的概念 。
- TCP层的PDU叫TCP段(segment)
- UDP层的PDU叫UDP数据报(Datagram)
- IP层的PDU叫IP数据报(Datagram)
- 链路层的PDU叫链路层帧(Frame)
具体到TCP传输数据而言,发送端的数据要经过三次封装 。
- 应用层数据经过TCP层的时候,会增加TCP头部,产生TCP Segment,TCP头部中的端口号是该层的分解标识符 。
- TCP Segment经过IP层的时候,会增加IP头部,产生IP Datagram,IP头部中的协议类型字段是该层的分解标识符 。
- IP分组经过链路层的时候,会增加以太网首部和尾部,产生以太网Frame,帧头部中的以太网类型字段,可用于区分IPv4(0x8000)、IPv6(0x86DD)和ARP(0x0806) 。
接收端的数据还原也需要经历三次解封 。
- 经过链路层会剥离以太网首尾部,根据以太网类型字段,如果是IP Datagram则交给IP模块 。
- 经过IP层会清除IP头部,根据IP头部中的协议类型字段,交给TCP、UDP或者ICMP、IGMP模块 。
- 经过TCP/UDP层去掉TCP/UDP头部,根据端口号,最终将数据还原取出,并交付给应用程序 。
文章插图
封装发生在发送方,拆封(还原)发生在接收方 。
推荐阅读
- 「网络特效」12 个炫酷背景特效库
- 什么时计算机网络?计算机网络如何分类?
- https ssl 请求过程详解
- 高校|一二三未来:高校毕业生求职的“专属网络面试间”
- rtsp协议之dss服务器与vlc服务器比较
- 如何知道网络的实时网速?4种方法轻松查询
- rtsp协议之dss搭建rtsp服务器
- Antrea 0.9.0 发布,Kubernetes 网络解决方案
- 盘点网络创业需要的重要营销工具
- 什么是DNS?