网络之分层

网络是一个 复杂的程序,分层是必须的!

计算机网络:想象网络包是一个buffer或者一块内存,是有格式的。它可以运行在本地客户端,运行在交换机,运行在路由器或者运行在服务器。而你是处理该buffer的程序。从某个网口拿出,然后由另一个网口发出。

我们可以把处理网络包的过程看成是一个函数,尽管并非是上图描述的函数!

当网络包经过二层的时候,process_layer2会拆下MAC头,查看里面的MAC是不是自己,如果是则接受该网络包,并将剩下的buffer传递给下一层(三层)

当网络包经过三层的时候,process_layer3会拆下IP头,查看里面的IP是不是自己的,如果是则接受该网络包,并将剩下的buffer传递给下一层(四层/TCP层)

当网络包经过四层的时候,那么到底是使用process_tcp还是process_udp呢,是由地址决定的。这个包是发送还是应答呢,又或者是一个正常的数据包。如果是前者这时候,就需要回复一个包信息,否则,直接将其交给应用层。这时候需要process_http吗?

答案是:不需要。因为应用层的处理过程是不是这个网络包的程序负责的,是由浏览器处理的。至于发给哪个应用,这是由四层里面的端口号决定的,然后直接发给它就OK。浏览器肯定会解析html,返回一个页面。

如果你点击了鼠标,这个时候,浏览器又发起了一个请求。

这个时候,你需要调用send_tcp函数,在原先包上加上端口号,发送给三层;

三层接收到后,调用send_layer3函数,加上ip信息,发送给二层;

二层接收到后,调用seng_layer2函数,加上MAC信息,组成完整的buffer,这时候就可以从网口发出了。

以上就是一个网络包从某个网口进,然后从某个网口出的“程序”。

 

层与层之间的关系:

TCP三层握手的时候,IP层与MAC层实际也是有动作的。因为它们肯定是存在的。

只要在网络上跑的包,可以下层没有上层,但是不能有上层没下层。

问题1:既然我都知道了它的那台机器的IP地址了,为什么还需要目标的MAC信息。

那是因为没有MAC信息,这个包是没办法发出去。

所谓的二层设备、三层设备,都是在网络上跑的程序不一样罢了。

一个HTTP协议,经过二层设备的时候,二层设备收到的包包含:HTTP/TCP/IP/MAC。二层设备将MAC头拆下来的网络包,发给三层设备,三层设备收到包包含:HTTP/TCP/IP,三层设备将IP头拆下来,看到底是丢弃、转发还是保留。

 

理解网络协议的工作模式:始终想象自己是一个处理网络包的程序,从网口拿到网络包后,根据规则对包进行处理,然后再将其从另一个网口发出去。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值