一、封装
A给B发消息
1.应用层(应用程序)
应用程序从文本输入框获取到用户输入的hello,把这个字符串构造成一个应用层的数据包。
例如:qq这样的程序内部就设置了应用层协议。
应用层数据包就是按照这样的应用层协议约定的格式来构造的。
约定的格式如下:
应用程序调用操作系统提供的api,把这个数据包交给传输层。
2.传输层
涉及到的协议:最重要的是TCP和UDP。
传输层就是把上述数据作为一个整体,在构造一个传输层的数据包。
假定使用UDP进行通信,就会构造一个UDP的数据包。
形如上述,添加报头的过程就是“封装”,其实就是字符串拼接。
UDP报头可以承载一些关键用来转发数据的信息。(承载的最重要的信息为源端口和目的端口)
拼接好传输层数据包后,就要把这个数据包进一步交给下层,网络层继续进行封装。
(交给下层指的是:下层协议提供一组API(函数),上层调用这个API,并把刚才构造好的数据通过参数传过去,下层协议就可以处理这个数据了)
3.网络层
涉及到最核心的协议:IP协议
网络层IP协议:把刚才的传输层的UDP数据包作为一个整体,在拼接上IP协议的报头,构成一个IP数据包。
IP报头承载的最关键的信息为源IP和目的IP。
构造完成完整的IP数据包后,IP协议继续调用数据链路层的API,把数据交给数据链路层的协议进行处理。
4.数据链路层
涉及到最核心的协议:以太网(“以太”:表现网络数据传输的介质)
以太网就是日常最常见到的有线网络。
日常使用的网线也叫“以太网线”,网口也叫“以太网口”
以太网数据帧也是以IP数据包作为一个整体,在这个基础上加上帧头和桢尾。
5.物理层
把上述这样的以太网数据帧,二进制结构(一串0101这样的数据)转换成光信号/电信号/电磁波,然后进行发送。
经过上述一系列过程,数据就从电脑上发出去了。
二、分用
暂时不考虑中间过程,假定数据包已经到了B的网卡,B的处理过程成为“分用”
1.物理层
B的物理层收到了光信号/电信号/电磁波,就会把这些物理信号转换成数字信号(二进制结构一串0101)得到以太网数据帧,进一步把这个数据帧交给数据链路层。
2.数据链路层
发送方和接收方得使用一样的协议来进行。
按照以太网数据帧的格式来解析,取出其中的载荷,再交给上层协议。
3.网络层
按照IP协议的格式来解析,取出其中的载荷,再交给上层协议。
4.传输层
按照UDP协议的格式来解析,取出其中的载荷,再交给上层协议。
5.应用层
按照应用程序内部的应用层协议来解析数据
真实情况下,两台主机不会网络直连,而是通过一系列的交换机/路由器来进行数据转发的