国外做美食视频网站有哪些,黑龙江 网站开发,网站平台建设模板,软装设计师一台机器将自己想要表达的内容#xff0c;按照某种约定好的格式发送出去#xff0c;当另外一台机器收到这些信息后#xff0c;也能够按照约定好的格式解析出来#xff0c;从而准确、可靠地获得发送方想要表达的内容。这种约定好的格式就是网络协议#xff08;Networking P…一台机器将自己想要表达的内容按照某种约定好的格式发送出去当另外一台机器收到这些信息后也能够按照约定好的格式解析出来从而准确、可靠地获得发送方想要表达的内容。这种约定好的格式就是网络协议Networking Protocol。
两种网络协议模型一种是 OSI 的标准七层模型一种是业界标准的 TCP/IP 模型。它们的对应关系如下图所示 为什么网络要分层呢因为网络环境过于复杂不是一个能够集中控制的体系。全球数以亿记的服务器和设备各有各的体系但是都可以通过同一套网络协议栈通过切分成多个层次和组合来满足不同服务器和设备的通信需求。
连接到网络上的每一个设备都至少有一个 IP 地址用于定位这个设备。无论是近在咫尺的你旁边同学的电脑还是远在天边的电商网站都可以通过 IP 地址进行定位。因此IP 地址类似互联网上的邮寄地址是有全局定位功能的。
MAC 地址的定位功能局限在一个网络里面也即同一个网络号下的 IP 地址之间可以通过 MAC 进行定位和通信。从 IP 地址获取 MAC 地址要通过 ARP 协议是通过在本地发送广播包也就是“吼”获得的 MAC 地址。
由于同一个网络内的机器数量有限通过 MAC 地址的好处就是简单。匹配上 MAC 地址就接收匹配不上就不接收没有什么所谓路由协议这样复杂的协议。当然坏处就是MAC 地址的作用范围不能出本地网络所以一旦跨网络通信虽然 IP 地址保持不变但是 MAC 地址每经过一个路由器就要换一次。
所以第二层干的事情就是网络包在本地网络中的服务器之间定位及通信的机制。
二层到四层都是在 Linux 内核里面处理的应用层例如浏览器、Nginx、Tomcat 都是用户态的。内核里面对于网络包的处理是不区分应用的。
从四层再往上就需要区分网络包发给哪个应用。在传输层的 TCP 和 UDP 协议里面都有端口的概念不同的应用监听不同的端口。例如服务端 Nginx 监听 80、Tomcat 监听 8080再如客户端浏览器监听一个随机端口FTP 客户端监听另外一个随机端口。
应用层和内核互通的机制就是通过 Socket 系统调用。所以经常有人会问Socket 属于哪一层其实它哪一层都不属于它属于操作系统的概念而非网络协议分层的概念。只不过操作系统选择对于网络协议的实现模式是二到四层的处理代码在内核里面七层的处理代码让应用自己去做两者需要跨内核态和用户态通信就需要一个系统调用完成这个衔接这就是 Socket。
网络分完层之后对于数据包的发送就是层层封装的过程。 在客户端浏览器我们将请求封装为 HTTP 协议通过 Socket 发送到内核。内核的网络协议栈里面在 TCP 层创建用于维护连接、序列号、重传、拥塞控制的数据结构将 HTTP 包加上 TCP 头发送给 IP 层IP 层加上 IP 头发送给 MAC 层MAC 层加上 MAC 头从硬件网卡发出去。
网络包会先到达网络 1 的交换机。我们常称交换机为二层设备这是因为交换机只会处理到第二层然后它会将网络包的 MAC 头拿下来发现目标 MAC 是在自己右面的网口于是就从这个网口发出去。
网络包会到达中间的 Linux 路由器它左面的网卡会收到网络包发现 MAC 地址匹配就交给 IP 层在 IP 层根据 IP 头中的信息在路由表中查找。下一跳在哪里应该从哪个网口发出去在这个例子中最终会从右面的网口发出去。我们常把路由器称为三层设备因为它只会处理到第三层。
从路由器右面的网口发出去的包会到网络 2 的交换机还是会经历一次二层的处理转发到交换机右面的网口。
最终网络包会被转发到 Linux 服务器 B它发现 MAC 地址匹配就将 MAC 头取下来交给上一层。IP 层发现 IP 地址匹配将 IP 头取下来交给上一层。TCP 层会根据 TCP 头中的序列号等信息发现它是一个正确的网络包就会将网络包缓存起来等待应用层的读取。
应用层通过 Socket 监听某个端口因而读取的时候内核会根据 TCP 头中的端口号将网络包发给相应的应用。
HTTP 层的头和正文是应用层来解析的。通过解析应用层知道了客户端的请求例如购买一个商品还是请求一个网页。当应用层处理完 HTTP 的请求会将结果仍然封装为 HTTP 的网络包通过 Socket 接口发送给内核。
内核会经过层层封装从物理网口发送出去经过网络 2 的交换机Linux 路由器到达网络 1经过网络 1 的交换机到达 Linux 服务器 A。在 Linux 服务器 A 上经过层层解封装通过 socket 接口根据客户端的随机端口号发送给客户端的应用程序浏览器。于是浏览器就能够显示出一个绚丽多彩的页面了。 此文章为11月Day22学习笔记内容来源于极客时间《趣谈Linux操作系统》推荐该课程。