网络体系结构通常是由两种模型来表示,一个是7层的OSI参考模型,一个是5层的TCP/IP参考模型。
OSI七层模型:
TCP/IP五层模型:
TCP/IP模型由于其协议被广为流传,乃至后来被Internet使用,所以我们后面也主要围绕TCP/IP模型展开。
先来看一下模型各层都是用来干嘛的。其中,越靠下的层离物理硬件越近,越靠上的层离用户越近。
物理层:代表网络中的电气特性,关注通信信道上传输的原始比特(0/1);
数据链路层:将电信号以分组的方式(帧)来传递。以太网协议就是运行在该层;
网络层:任务是允许主机将数据包注入到任何网络中,并让这些数据包独立到达接收方;
传输层:允许源主机与目标主机上的对等实体进行对话;
应用层:包含所有的高层协议;
TCP/IP模型中的协议:
应用层 HTTP SMTP RTP DNS
传输层 TCP UDP
网络层 IP ICMP
链路层 DSL SONET 802.11 Ethernet
要想知道网络中是怎么通信的
比如应用层要下载一个网页的话,一直往下会是什么
就要最底层开始往上看
物理层:就是实体层,
表示怎么用光缆(电缆,无线电)等方式将互联网连接起来,规定了网络中的电气特性,负责传输0,1电信号。
但是单独传输电信号没有意义
于是出现了MAC层
它规定了电信号0,1的分组方式。后来就有了以太网协议,规定了一组电信号构成了一个数据包——帧(head+data);
数据很长时会分割成多个帧进行发送。
数据包在设备之间的传输实际上是网卡与网卡之间的传输,而每一个网卡在出厂时都有唯一的一个地址,即MAC地址。MAC地址是由48个二进制数组成,通常写成12个16进制数。其中前6个16进制数代表厂商编号,后6个代表厂商流水号。
一个网卡要知道另外一个网卡的MAC地址,需要依赖ARP协议。
以太网需要知道接收方的MAC地址才能发送数据包 。要将数据包发送给接收包,以太网中将数据包广播给所有的计算机,每个计算机收到数据包后,读取包头找到接收方的MAC地址,与自身的MAC地址对比,相同就接收这个数据包,否则就丢弃。于是,以太网就通过广播的方式就行了数据传递。
但是,不同的子网之间是无法广播的。
而互联网实际上就是超多子网的组合,通过路由(网关)向不同的子网发送数据包。
于是,就进入到了网络层。
网络层能够区分不同的计算机是否在同一个子网下。这是由于,计算机不仅有MAC地址,还有IP地址。其中MAC地址是直接绑定在网卡上的,而IP地址则由管理员分配。数据包先通过IP地址来区分子网,再通过MAC地址将数据包发送到指定计算机上。
IP地址由32个二进制数表示,通常写成4个10进制数,前面几位表示网络,前几位相同话就处于同一个子网当中。后面几位表示主机。那么到底是前几位,需要由子网掩码来确定,它是表示网络特征的参数,也是一个32位2进制数,与IP地址形式相似。
其中,IP地址对应的子网掩码中,网络部分全为1,代表主机的部分全为0 。
举个例子,IP地址为192.168.1.105;子网掩码为255.255.255.0
则192.168.1代表着子网,105代表主机。
IP数据包也是由head+data的形式组成
其中,head长度为20-60字节,数据包总长度不超过65535字节。将其放在以太网数据包的data部分。而这一部分不超过1500字节,所以对于超出数据长度的部分,IP数据包就要被分开发送。
这里我们就知道数据包是如何从一个主机传到另一个主机上了:先判断是否处于同一个子网,不在同一个子网的情况下,将数据包发给两个子网连接的网关处,再通过ARP协议得到对方的MAC地址,发送数据包。
那么,主机上的不同的程序是如何被区分的呢。这里就到了传输层。网络层可以看做主机与主机IP之间的通信,那么传输层就是端口与端口之间的通信。IP地址和端口的组合就是socket(套接字)
端口是每个使用网卡的程序编号。每个数据包都发到主机的特定端口上,不同程序读取自己所需的数据。
端口的取值为0-65535,由16个二进制数表示,其中,0-1023是系统占用的端口号。
对于传输层的协议,就是TCP和UDP协议。
TCP协议有确认机制,传输过程更可靠。两者相比较:
UDP TCP
简单,可靠性差 保证数据不丢失,过程复杂
1.无连接
2.不保证可靠
3.实时性强
4.一对一,多对一,多对多
5。资源消耗少
1.面向连接
2.提供可靠服务
3.点对点
4.资源消耗较高
传输层过后就是应用层, 它是规定了应用程序的数据格式。
这里整个数据包就可以看成以下形式:
head head head data
以太网标头 IP标头 TCP标头 应用层数据包
而对于网络传输中,IP地址又分为静态IP和动态IP两种。
静态IP地址是长期分配给一台计算机或网络设备使用的 IP 地址,而动态IP是在需要的时候才进行IP地址分配的方式。由于IP地址资源很宝贵,因此大部分用户上网都是使用动态IP地址的。而动态IP用到的DHCP协议就是建立在UDP上的应用层协议。该形式下的数据包格式为
head head head data
以太网标头 IP标头 UDP标头 DHCP数据包
其中,发送方和接收方的端口地址则由DHCP协议规定为67和68,IP标头中发送方和接收方的IP地址都不知道,分别填入0.0.0.0和255.255.255.255。以太网标头的发送方是主机MAC地址,接收方是DHCP服务器的MAC地址(不知道,填入广播地址FF:FF:FF:FF:FF:FF)。数据包以广播的形式发出,通过IP地址等判断,再发给DHCP服务器,服务器将分配的地址返给主机。
对于网页的访问,通过域名服务器(DNS )将网址翻译为IP地址。
head head head data
以太网标头 IP标头 UDP标头 DNS数据包
其中端口号为53
HTTP协议通常是建立在TCP之上的请求-响应协议。
head head head data
以太网标头 IP标头 TCP标头 HTTP数据包
其中接收方端口号为80 ,发送方端口号随机。