为什么网络要分层? 在这里,首先讨论第一个问题,网络为什么要分层。 为什么这么说,是因为所有复杂的程序都必须分层。 (我个人理解,每个网络设备处理不同的数据包,因此需要分层。)
要理解计算机网络的概念,最好是想象网络数据包是缓冲区或内存,并进行格式化。 同时,想象自己是处理网络数据包的程序。 这个程序可以在电脑上运行,可以在服务器上运行,可以在交换机上运行,也可以在路由器上运行。 你想象自己有很多网口,从一个嘴里拿来一个网包,用自己的程序处理,从另一个网口发送。
当然网包的格式很复杂,这个程序也很复杂。复杂的程序都要分层,这是程序设计的要求。例如,复杂的电子商务公司分为数据库层、缓存层、Compose层、Controller层和访问层,每层集中于基本层的事情。
程序是如何工作的?
网包经过网门口的时候,你看到了。 请先看看是否想让我进去,然后处理。 一些网入口配置了拥挤模式。 经过的东西都拿来。
拿来后,就要交给我办理手续。 因此,你是process_layer2(buffer)当然,这是假函数。 但你明白它的意思,知道一定有这样的函数。 这个函数是做什么的? 从Buffer上,去掉双头,看看根据脑子里的内容应该做什么。
如果你发现这个包的MAC地址与你的匹配,那就是发给你了。 因此需要呼叫process_layer3(buffer)。 此时,Buffer中大多没有两层楼的头。 因为在前一个函数的处理中拆下,或者移动了开始的偏移。 在这个函数中,摘下三楼的头,看看是发给自己的,还是希望转发给自己。
你怎么判断? 如果IP地址不是自己的,则需要转发; 如果IP地址是自己的,就发给自己。 根据IP标头中的标记,去掉3个标头,进行下一层的处理。 是调用process_TCP(buffer ),还是调用process_UDP?
如果此地址为TCP,则调用process_tcp(buffer)。 此时,Buffer中没有3层报头,所以需要看4层报头,确认它是开始、响应、还是正常的数据包,并分别通过不同的逻辑进行处理。 如果开始或响应,则下一步可能发送回复包; 如果是普通数据包,就需要交给高层。 交给谁? 不是有process_http(buffer )函数吗?
不,如果是网络数据包处理程序,就不需要process_http(buffer ),应该交给APP应用程序。 交给哪个APP? 四楼的头里有端口号,每个APP应用程序接收不同的端口号。 如果发现浏览器APP正在监听此端口,发送到浏览器即可。 至于浏览器怎么处理,与你无关。
浏览器当然会分析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地址。 反正要填一个,不能空出来。
层与层的关系首先是层的比喻。所有不能表示出层层封装含义的比喻,都是不恰当的。
当TCP握手三次时,IP层和MAC层在做什么呢? 当然,TCP发送所有消息,并具有IP层和MAC层。 因为每次TCP发送消息时,IP层和MAC层的所有机制都将运行。 我只看到TCP握了三次手,其实,IP层和MAC层也在为此忙碌着。
请在这里记住一个。只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。
所以,对TCP协议来说,三次握手也好,重试也好,只要想发出去包,就要有IP层和MAC层,不然是发不出去的。
经常有这样的问题,我知道那个机器的IP地址。 直接给他发信息啊。 MAC地址做什么? 这里重要的是,没有MAC地址的消息就无法发出。
所以,如果HTTP协议的分组在网络上运行,则它必须
是完整的。无论这个包经过哪些设备,它都是完整的。
所谓的二层设备、三层设备,都是这些设备上跑的程序不同而已。一个HTTP协议的包经过一个二层设备,二层设备收进去的是整个网络包。这里面HTTP、TCP、 IP、 MAC都有。什么叫二层设备呀,就是只把MAC头摘下来,看看到底是丢弃、转发,还是自己留着。那什么叫三层设备呢?就是把MAC头摘下来之后,再把IP头摘下来,看看到底是丢弃、转发,还是自己留着。
思考:
不同的网络设备,来处理不同的数据包协议头,所以网络要进行分层。mac地址局域网寻址,ip地网络寻址。并且每一次的TCP通讯 都要携带上mac头 以及 ip头,端口号等