OSI把计算机网络分为七层,TCP/IP把网络分为5层,如下图所示。那么,为什么要将互联网进行分层呢?现在一般网络层上的协议都是IP协议,但是在分层模式出现之前网络层的协议千奇百怪,不仅仅只有IP协议一种。在经过以太网技术的发展以及互联网发展的选择之后,现如今应用层绝大部分都是http协议,传输层绝大部分都是tcp和udp协议,网络层绝大部分都是IP协议。

(1)分层的目的也是为了方便将复杂的网络通信进行划分,就跟软件设计的MVC模式一样,方便各个部件的开发,设计和故障排除(如果通信中出现错误,就不用从头到尾去检查错误原因,判定是哪个层出了问题,就去定位哪个层的错误)。

(2)另外分层也是为了形成标准,每一个层都当初定义的时候都指定了该要实现什么样的功能(比如传输层的功能是形象的为传输的数据段套上一个TCP信封,并标注源端口和目的端口。网络层的功能是拿到从传输层发过来的数据包,再套上一个IP信封,上面标注源IP地址和目的IP地址)。所谓一流公司做标准就是这个意思了,确定这些标准,大家都按照这个标准来开发,按照这个功能来实现。

(3)假如不制定这个标准,当我们在访问www.taobao.com的时候。相当于通过客户端去连接淘宝服务端,如果客户端通过2G,3G,4G,Wifi,网线去连接服务器,每一种连接方式都定义了自己特有的协议。那么服务端岂不是很困扰,服务端也要为这些连接方式一一实现所有协议。

再来一张图:下面这张图形象的指出了TCP/IP五层协议中,(消息报文,数据段,数据包,数据帧,位)分别位于五层协议中的(应用层,传输层,网络层,数据链路层,物理层),其实都是数据在不同层的表现形式而已,跟上文所说的都是套了信封,穿了马甲。但是大家还是要认识。

应用层:数据以报文的形式传输,这里所指的应用并不是说QQ这种应用,而是指支持http等等协议(上面写出了SMTP,FTP,TELNET,DNS,TFTP,RPC等协议)。应用层是最贴近我们人类使用的层级,比如在浏览器的地址栏输入www.taobao.com,这就是使用的应用层,开始向马爸爸家的服务器发出连接请求。在应用层会通过DNS将www.taobao.com的域名解析为一个IP地址,因为互联网不认识域名,只认识IP地址。域名只是为方便人类记忆而设计的,实际上域名对应的也是一个IP地址。

传输层:传输层以数据段的形式传输,接受从应用层传输过来的数据(可以形象的理解为从应用层传来了一封信),把这封信套上TCP的信封。TCP信封上面标注着源端口号和目的端口号,源端口号是随机的,目的端口号为服务器的端口号,一般为80。如下图所示

网络层:网络层以数据包的形式传输,接收从传输层传输过来的数据又要再套一个IP信封。IP信封上写着源IP地址和目的IP地址。然后接着往下面层传输

数据链路层:数据链路层以数据帧的形式传输,接收从网络层传输过来的数据又要载套一个以太网头的信封。因为我们所指的两台计算机之间能够通信虽然最直观的表现是两个计算机之间的IP地址能够互相ping通,但是实质上通信的并不是IP地址,而是网卡(网卡地址是网卡厂商在生产网卡的时候就烧录上去的,相当于是硬件配置,即使电脑在北京和深圳MAC也是相同的)。本机的网卡地址(MAC地址)本机当然知道,但是目的主机的网卡地址主机其实并不知道的。如果本机和目的主机是在同一个子网下,那么会通过发送ARP广播的形式得到目的主机的网卡地址。如果本机和目的主机不是在同一个子网下,那么它会向路由器发送ARP广播得到路由器的IP地址也就是网关。

物理层:物理层是定义电气信号的层,它会把数据流转变为010101的数据位。然后通过网线或者是其他通信手段将数据位发出。物理层定义的主机A向主机B发送如上图所示数据帧,主机B接收到之后会拆开以太网头部的信封,它会在数据链路层查看以太网头部的目的MAC地址是不是本机的MAC地址,如果是就接收这个包。然后继续交给网络层,在网络层拆开IP信封,看目的IP是不是自己的IP。如果是就接收这个包,然后继续交给传输层传输层确定了主机B的端口号就通过目的端口将数据发送给了主机B。

以上这里说的是一种最简单的通信,两个主机在同一个子网下面,没有涉及到网关,路由器,路由表,路由器转发。