文章目录

  • 一个理念
  • 五层参考模型
  • 思考一个问题
  • 通过五层参考模型来解释
  • 应用层
  • 传输控制层
  • 网络层
  • 数据链路层
  • 物理层
  • 灵魂图解


一个理念

  • 计算机网络符合工程学设计,层与层之间是垂直调用。

五层参考模型

  • 应用层:HTTP、FTP等
  • 传输控制层:TCP、UDP
  • 网络层:IP
  • 数据链路层:ARP
  • 物理层

思考一个问题

  • 我用微信给朋友发了一条消息,请问消息是怎么发送过去的,都走了哪些路?

通过五层参考模型来解释

应用层

  • 微信等运行在操作系统之上的应用,处于应用层,应用层之间要进行数据传输,会唤醒传输控制层:“哥们,我要发条消息,帮我建立一个连接。”数据用http协议打包好,交给传输控制层。
  • 打包要发送的数据本身。

传输控制层

  • 传输控制层无条件答应“好嘞,没问题。”,然后找向服务器,说“我要传输数据,要建立网络连接”(即发送了一个syn过去),服务器收到了,回了一句“收到你的请求了,可以连接”(即发送syn+ack给客户端),客户端收到服务器的响应,还得再做出回应“好嘞。”(即发送ack给服务端)
  • 这就是TCP的三次握手。为什么要三次呢?因为要确保每一方都有发送和响应,来保证连接的可靠。
  • 连接可靠了,接下来服务端和客户端都会进行资源开辟,开始数据传输。
  • 应用层玩微信那哥们聊完了,要关闭对话框了,意味着本次数据传输结束了。此时,客户端给服务器说“我完事了,可以关闭连接了”(即发送FIN),服务器听到后,先回个“收到”(即发送FIN+ACK),再回头看看自己这还有没有没传完的数据,确认也发完了,回客户端“我也没啥要传了,挂了吧”(即发送FIN),客户端回“好嘞,拜拜。”(即发送ACK)。
  • 这就是四次分手。
  • 传输控制层负责传输通道的开启和关闭,这也就是为什么要叫“控制”。
  • 抓包看一下:

网络层

  • 传输控制层确认了能传,把数据扔给了网络层,网络层一看,我就明确一个事:这数据是谁发的,要发给谁?
  • 网络层通过IP协议,会给每个联网的设备分配IP(一个完整的地址包含:IP,子网掩码,网关,DNS),IP与子网掩码的计算,能够得出每台主机的网络号和主机号。
  • 这下就简单了,网络层就是在数据包上贴上了寄件人和收件人的地址,然后交给数据链路层去传输。
  • 网络层负责寻址。明确发送人和接收人。

数据链路层

  • 数据有了,地址有了,我知道这个东西要发给谁了,那么问题来了,我该咋发过去呢?
  • 这就引出来了数据链路层,数据链路层通过ARP协议,获取每个设备独一无二的MAC地址(硬件地址)。
  • 数据链路层加工数据包,贴上所在网络的路由器MAC地址,数据包根据MAC地址走到路由器,路由器先把包上的MAC地址撕毁,然后路把收件人的IP与自己的路由表一核对,发现不在自己的局域网,再在数据包上贴上与自己相连的下一个更广的路由器的MAC,把包发过去。。。。一直跳一直跳,直到跳到接收人所在局域网的路由器,路由器会撕毁包上自己的MAC,贴上接收主机的MAC,数据包就这样发送过去了,接收人就收到了。
  • 数据链路层负责一跳一跳的中转。数据包里存放着下一个节点的指针(MAC),像链表一样,所以称作数据链路层。
  • 抓个包看一下:

物理层

  • 数据包咋能一跳一跳地去到下个地方呢?通过物理层,通过实体的传输介质来传输。
  • 物理层负责数据的比特传输。

灵魂图解

五层架构java 五层架构 普度模型_路由器


五层架构java 五层架构 普度模型_网关_02

一条消息的网络漂流到此结束。