一,TCP/IP五层协议
1.1 应用层
网络上传输的数据,应用程序如何使用
1.2 传输层
传输层负责端到端的数据传输,通信双方只需关注数据的起点和终点,确保数据能够可靠、有序地送达。
1.3 网络层
网络层负责传输的中间过程,尤其是路径的规划
负责点到点的传输(点到点:中间节点之间的转发 即路由器之间的转发)
1.4 数据链路层
数据链路层负责两个相邻节点(两个直接连接的交换机/路由器)数据转发
1.5 物理层
网络中的“硬件架构”
有线:网线,网口
无线:天线
类似于现实生活中的“基建”
---------------------------------------------
1)应用层和应用程序直接相关,应用层的实现是应用程序中的一部分
2)传输层/网络层是操作系统内核中已经实现好了的,不需要自己来实现
3)数据链路层/物理层则对应硬件设备和驱动程序,eg:网卡(内部实现了网络中的物理层)
其中网卡要插到电脑上,要想被电脑识别,就需要有对应的驱动程序
二 网络设备所在的分层
对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层
对于一台路由器,它实现了从网络层到物理层,即是TCP/IP五层模型的下三层
对于一台交换机,它实现了从数据链路层到物理层,即是TCP/IP五层模型的下两层
对于集线器,它只实现了物理层
2.1 应用层
举例:在输入框中输入“hello”,按下发送,所以在QQ程序中,
读取输入框的内容,拿到hello
根据界面的窗口,拿到接收方的信息
根据系统时间,拿到消息的时间
根据这三个构造出一个“应用层数据包”,即一个字符串(结构化的字符串),在这个字符串中包含了很多属性,这些属性表示不同的含义,而这个应用程序包具体是什么样子的,都是开发这个程序的程序员来定义的
由于应用程序,不能直接操作网卡(因为协议分层约定了上层调用下层,下层给上层提供服务,不能越级调用)
应用程序会把上述的数据,交给传输层(传输层提供了函数,让应用程序调用,就可以把上述的数据包作为一个参数,传递到传输层了)(这个函数需要自己写)
2.2 传输层
传输层,根据当前选择的传输层的通信协议,对上述“应用层数据包”,进行进一步的加工,构造成“传输层数据包”
传输层主要有两个协议,UDP和TCP
假设使用UDP,则UDP数据包=UDP报头 + UDP正文(载荷,payload)
正文就是应用层数据包
UDP报头,就是“快递标签”,给通信提供了必要的信息
UDP报头中,就包含了目的端口和源端口
传输层也不能操作网卡,就需要继续往下传递给相邻的层,传递给网络层
网络层提供了函数,给传输层调用(其中这个函数是操作系统内核中已经实现好了的,函数调用的过程中,不需要自己干预)
2.3 网络层
网络层,也需要针对传输层的数据包,进行进一步的加工
网络层最核心的协议就是IP协议
IP数据包 = 报头 + 载荷(正文)
IP报头中包含的内容很多,最关键的就是源IP和目的IP
网络层还是不能直接操作网卡,还需要把数据往下传递
数据链路层提供了函数,让网络层调用,调用的操作,在网络层内部写好了,不需要我们关注
2.4 数据链路层
数据链路层有一个知名的协议:以太网
以太网即“网络世界”数据传输的媒介
插网线传输的数据,使用的数据链路层协议就是以太网
wifi,就是另一种数据链路层协议,802.11
以太网数据帧 = 以太网数据帧头 + 载荷 + 帧尾
注意:一次网络通信,传输的数据的基本单位,有多种叫法
1)段 ----TCP
2) 报 ----UDP
3)包 ----IP
4)帧 ----数据链路层
数据链路层,负责两个相邻节点之间的数据传输
需要在帧头中补充信息辅助相邻节点传输(比如mac地址)
数据链路层将上述数据交给物理层
2.5 物理层
网卡就是把刚才的数据,视为一组1010 二进制bit流
根据当前网卡的状态,把1010通过物理信号,传输出去
三,接收端的流程
假设数据已经到达目标主机的网卡
接收方处理的过程,和发送方的过程是相反的
3.1 物理层
物理层收到的是一些 高低电平 信号
从而把这些信号转成10101 这样的二进制内容
把这样的内容交给上层即数据链路层
3.2 数据链路层
以太网协议,对数据进行解析
把载荷取出来,进一步交给上层
3.3 网络层
IP协议,对数据进行解析
把载荷取出来,进一步交给上层
其中IP报头中会记录,当前的载荷是UDP的还是TCP的
3.4 传输层
UDP协议,进一步的对数据进行解析
取出载荷,进一步交给上层
UDP报头中,包含了“目的端口”
3.5 应用层
应用程序,进一步对数据解析
这样,由下往上的层层解析即为“分用”
封装和分用,就是网络通信中的“基本盘”最核心的规则
四,封装和分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段,在网络层叫做数据报,在链路层叫做帧
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称为封装
- 首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的层协议字段将数据交给对应的上层协议处理
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/LYYstudying/article/details/163732098



