通俗讲解计算机网络五层协议
转载:https://www.cnblogs.com/pla1949/p/9743578.html
=========================================================================================
在我看来,学习java最重要是要理解what(这东西是什么),why(为什么要用它),where(在哪用它),how(怎么用)。所以接下来,我都是以这样的思想来和大家交流,从最基础的知识讲起。如果有啥出错的,欢迎大家前来批评。本人虚心接纳。
=========================================================================================
我们需要了解一下JavaWeb是怎样运行的?一个Web项目运行的原理是基于计算机网络的知识,总的大概过程如下。
首先在浏览器中输入要访问的网址,回车后浏览器向web服务器发送一个HTTP请求;根据计算机网络知识,两台电脑的访问中间需要经过五层协议,包括物理层,数据链路层,网络层,运输层,应用层。下面通俗说一下五个层次,以发送方和接收方为例子。
1.应用层:应用层是整个层次最顶层,直接和最原始数据打交道,定义的是应用进程间通信和交互的规则。这是什么意思?因为两台电脑通讯就是发送方把数据传给接收方,虽然发送方知道自己发送的是什么东西、转化成字节数组之后有多长,但接收方肯定不知道,所以应用层的网络协议诞生了,他规定发送方和接收方必须使用一个固定长度的消息头,消息头必须使用某种固定的组成,而且消息头里必须记录消息体的长度等一系列信息,以方便接收方能够正确的解析发送方发送的数据。如果没有应用层的规则,那么接收方拿到数据后也是不知所措,就如同拿到一个没有说明书的工具无法操作。
2.运输层:负责向两个主机中进程之间的通信提供通用数据服务,“传输层”的功能,就是建立”端口到端口”的通信。例如,同一台主机上有许多程序都需要用到网络,假设你一边在看网页,一边上QQ聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示QQ聊天的内容?也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做”端口”(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。“端口”是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。
3.网络层:”网络层”的功能是建立”主机到主机”的通信。通过网络层我们能找到其他一台电脑的所在位置并进行主机到主机连接。每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。
4.数据链路层:两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻的链路上传送帧(frame)。由于网络层移交的ip数据包数据可能会很多,所以要进行分组封装成帧,每一帧包括数据和必要的控制信息。其实就是解读电信号,进行分组。封装成帧,透明传输,差错控制。
5.物理层:电脑要组网,第一件事要干什么?当然是先把电脑连起来,可以用光缆、电缆、双绞线、无线电波等方式,它就是把电脑连接起来的物理手段,它主要规定了网络的一些电气特性,将本电脑要传输的数据帧变成010101的比特流,发送出去,作用是负责传送0和1的电信号。
这里举个例子来说明下,比如A与B要通讯,A向B请求发送了一份数据。首先A在请求链接里面可以获取到B的地址,要发送的这份数据首先经过应用层,制定了一系列规则,比如数据的格式怎样,长度多少,以方便接收方能够正确的解析发送方发送的数据;接下来进入运输层,把进程端口封装在数据包,这样才知道是A当前电脑哪个进程发的数据包;再接下是进入网络层,通过ip地址找到B主机所在位置并进行相连;然后进入数据链路层,将ip数据包封装成帧;最后进入物理层,进行数据帧转换成比特流0或1,通过硬件光纤进行传输;这一整套是A的通讯过程,对于·B而言就是相反的过程。