Linux网络编程:回顾网络通信

1.数据从应用层到数据链路层的本质

数据的封装:

  1. 用户在用户级缓冲区输入数据,经过应用层协议进行序列化成字节流数据,拷贝到传输层的缓冲区。
  2. 而操作系统在传输层维护了sk_buff这一个结构体,然后data指针指向这段数据的开头,接着再封装TCP/UDP报头,然后head指针指向报头位置。
  3. 当进入IP层后,此时的TCP报文即为IP层的“数据”,我们也可以在图中明显看出data指针并不是不变的,不断偏移。然后不断重复2、3间的head、data指针指向

这时我们就能够清晰的理解,除了在应用层需要拷贝到传输层,其他场景下我们都是对sk_buff指针进行偏移,然后不断向下交付,最终从网络中发送。


那么我们在另一台主机对接收到的数据报文,那么是如何从数据链路层到应用层被我们看到的呢?

数据的解包分用:

  1. 当我们从网络中获取到一个数据报文,我们在数据链路层通过定长的报头,将这个head指针向后偏移,就获得了相对于数据链路层的“有效载荷”,即网络层的报文
  2. 同理我们也是这样子不断地移动head指针来实现报头的分离,但是实际上我们进行解包时还是需要对某一层协议进行分析,来判断数据的合法性和可靠性
  3. 最终字节流数据到了传输层缓冲区,最后传输到应用层,借助应用层协议找到对应接收的用户级缓冲区
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值