1.数据从应用层到数据链路层的本质
数据的封装:
- 用户在用户级缓冲区输入数据,经过应用层协议进行序列化成字节流数据,拷贝到传输层的缓冲区。
- 而操作系统在传输层维护了sk_buff这一个结构体,然后data指针指向这段数据的开头,接着再封装TCP/UDP报头,然后head指针指向报头位置。
- 当进入IP层后,此时的TCP报文即为IP层的“数据”,我们也可以在图中明显看出data指针并不是不变的,不断偏移。然后不断重复2、3间的head、data指针指向
这时我们就能够清晰的理解,除了在应用层需要拷贝到传输层,其他场景下我们都是对sk_buff指针进行偏移,然后不断向下交付,最终从网络中发送。
那么我们在另一台主机对接收到的数据报文,那么是如何从数据链路层到应用层被我们看到的呢?
数据的解包分用:
- 当我们从网络中获取到一个数据报文,我们在数据链路层通过定长的报头,将这个head指针向后偏移,就获得了相对于数据链路层的“有效载荷”,即网络层的报文
- 同理我们也是这样子不断地移动head指针来实现报头的分离,但是实际上我们进行解包时还是需要对某一层协议进行分析,来判断数据的合法性和可靠性
- 最终字节流数据到了传输层缓冲区,最后传输到应用层,借助应用层协议找到对应接收的用户级缓冲区,并显示在我们面前。
所以数据的封装和解包分用的实现都是通过指针的偏移,这也是因为在传输层数据已经经过了应用层协议的序列化而形成了字节流数据,本质上就是char* 数组维护的一段数据,所以我们将不同形式的数据转化成了字节流,并且实现了不同主机的统一!!!
2.四层协议在网络通信扮演的角色
简单来说:扮演的四个角色就是数据报文经由TCP、IP体系的四层结构,在网络通信中对各自协议的遵守和实现协议的功能
具体来说:
- 应用层(Application Layer):
- 用户接口:应用层为用户提供了与网络应用进行交互的接口。例如,浏览器是HTTP应用层协议的用户接口,允许用户浏览网页内容。
- 服务支持:应用层协议定义了网络应用所需的服务和支持,如文件传输、电子邮件发送和接收、远程登录等。
- 数据表示:应用层协议还规定了数据的表示方式,即如何对应用数据进行编码和解码,以确保数据在发送和接收端都能被正确理解和处理。
- 传输层(Transport Layer):
- 端到端可靠性:传输层为应用层提供了可靠的、端到端的数据传输服务。通过TCP协议,应用层可以确保数据在传输过程中不会丢失、损坏或乱序,从而保证了应用数据的完整性和顺序性。
- 流量控制:传输层还负责流量控制,以避免发送方发送数据过快导致接收方无法及时处理,造成数据丢失或网络拥塞。
- 复用与分用:传输层通过端口号实现多个应用进程之间的复用和分用,使得不同的应用进程可以在同一台主机上同时使用网络资源。
- 网络层(Network Layer):
- 路由与转发:网络层负责将数据从源主机路由到目的主机,通过选择最佳路径实现跨网络的数据传输。路由器是网络层的关键设备,它们根据路由表进行数据包的转发。
- 地址转换:网络层使用IP地址来标识网络中的设备,并通过DNS(域名系统)将域名转换为IP地址,方便用户记忆和访问网络资源。
- 数据分组:网络层将传输层的数据包封装成IP数据报,并在数据报头部添加源IP地址、目的IP地址等信息,以便在网络中进行路由和转发。
- 链路层(Link Layer):
- 物理传输:链路层负责将数据报通过物理介质进行传输,如以太网、Wi-Fi等。它处理与物理介质相关的通信细节,如帧的封装、错误检测等。
- 设备接入:链路层还负责设备的接入和管理,如交换机和集线器等网络设备用于连接不同的物理设备并实现数据的交换和转发。
- 介质访问控制:链路层通过介质访问控制(MAC)协议来管理设备对物理介质的访问权限,确保设备在共享介质上能够有序地发送和接收数据。
而内部实现的细节,可以在以往的博客上进行深层次的学习……
3.浏览器输入url后,发起请求到获得页面,发生的事情
首先,进行域名解析获取IP地址,接着进行三次握手建立连接,在应用层浏览器发出访问请求,填写正文数据,通过系统调用接口发出这个请求报文,向下交付到物理层,通过计算机网络到达远端主机,经过TCP、IP四层体系到服务器的应用层进行解析请求报文,获取请求、提取正文,接着做出回应,并通过Url内的字段进行资源的准备加载进回应报文的正文字段,接着向下交付在通过计算机网络返回给请求方。而当请求方获取到回应报文时,向上交付给应用层的浏览器,接着浏览器对正文字段进行渲染,获取到网页!!!
另外,因为传输过程中我们需要满足各个协议之间的约定,比如数据传输是否出现丢包,或者是出现数据差错如何解决,这些就是各个协议层需要解决的问题,如果我们需要解答,就可以询问是在什么场景下发生了什么问题,这时在这个大背景下补充各个层发生的事情。