【网络协议】网络分层的真实含义是什么?

最近学习了极客时间,刘超老师的课程,记录下课程中的重点部分。

一、网络为什么要分层?

  因为,是个复杂的程序都要分层,分层可以更好的明确每一层的职责。
  理解计算机网络中的概念,一个很好的角度是,想象网络包就是一段Buffer,或者一块内存,是有格式的。同时想象自己是一个处理网络包的程序,而且这个程序可以跑在电脑上,可以跑在服务器上,可以跑在交换机上,也可以跑在路由器上。你想象自己有很多网口,从某个口拿进一个网络包来,用自己的程序处理一下,再从另一个网口发送出去。

二、程序是如何工作的

这里写图片描述
  当一个网络包从一个网口经过的时候,你看到了,首先先看看要不要请进来,处理一下。有的网口配置了混杂模式,凡是经过的,全部拿进来。
  拿进来之后,就要交给一段程序来处理。于是,你调用process_layer2(buffer).当然这是一个假的函数。但是你明白其中的意思,知道肯定是有这么个函数的。那这个函数是干什么的?从Buffer中,摘掉二层的头,看一看,应该根据头里面的内容做什么操作。
  假设你发现这个包的MAC地址和你的相符,那说明就是发给你的,于是需要调用process_layer3(buffer)。这个时候Buffer里面往往就没有二层的头了,因为已经在上层的一个函数的处理中拿掉了。或者将开始的偏移量移动一下。在这个函数里面,摘掉第三层的头,看着到底是发送给自己的,还是希望自己转发出去的。
  怎么判断呢?如果IP地址不是自己的,那就应该转发出去;如果IP地址是自己的,那就是发给自己的。根据IP头里面的标识,拿掉三层的头,进行下一层的处理,到底是调用process_tcp(buffer)呢,还是调用process_udp(buffer)呢?
  假设这个地址是TCP的,则会调用process_tcp(buffer)。这时候,Buffer里面没有三层的头,就需要查看四层的头。看着是一个发起,还是一个应答,又或者是一个正常的数据包,然后分别由不同的逻辑进行处理。如果是发起或者应答,接下来可能要发送一个回复包;如果是一个正常的数据包,就需要上交给上层了。交给谁呢?是不是有process_http(buffer)函数呢?
没有的,如果你是一个网络包处理程序,你不需要有process_http(buffer),而是应该交给应用去处理。交给哪个应用呢?在四层的头里面有端口号,不同的应用监听不同的端口号。如果发现浏览器应用在监听这个端口,那你发给浏览器就行了。置于浏览器怎么处理,和你没有关系。
  浏览器自然是解析HTML,显示出页面来。如果这时电脑的主人点击了鼠标,点击鼠标的动作被浏览器捕获。浏览器知道,又要发起另一个HTTP请求了,于是使用端口号,将请求发给了你。
  你应该调用send_tcp(buffer).不用说,Buffer里面就是HTTP请求的内容。这个函数里面加一个TCP的头,记录下源端口号。浏览器会给你目的端口号,一般为80端口。
然后调用send_layer3(buffer).Buffer里面已经有了HTTP头和内容,以及TCP的头。在这个函数里面加一个IP的头,记录下源IP的地址和目标IP的地址。
  然后调用send_layer2(buffer).Buffer里面已经有了HTTP的头和内容。TCP的头,以及IP的头。这个函数里面要加一下MAC的头,记录下MAC的地址,得到的就是本机器的MAC地址和目标的MAC地址。如果不知道的话,就要通过一定的协议处理过程,找到MAC地址。这样就完成了一个程序的任务。

要记住一点:只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Maybe_ch

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值