一.TCP/IP网络模型
TCP/IP协议模型从下到上可以分为网络接口层,网际层(又称网络层),运输层(又称传输层),应用层,大家平时接触到的都是应用层为主。
注意:有的地方会有五层模型,就是将网络接口层拆分为了物理层和数据链路层两层,这样做的目的是为了大家更容易的理解网络原理而设计的,实际应用还是TCP/IP四层体系结构。
二.各层作用
物理层:
主要是通过物理介质传输比特流,常见的设备有,集线器、中继器、网线等。
数据链路层:
将物理层的比特流组合成字节,然后将字节组合成帧,然后通过MAC地址对物理介质访问,同时这一层还提供了错误检测和纠正,保证传输稳定。
这一层的每一个数据包叫做“帧”,由包头和数据组成,其中包头里面包含了以MAC地址标识的发送者和接受者信息。
网络层:
本层的主要作用是通过IP寻址来建立两个节点之间的连接,常见的有ip、ARP、ICMP协议等。
ip协议
ip协议的作用主要有两个,1个是为每一台计算机分配一个ip地址,另一个则是确定两个ip在不在同一个子网络(将ip地址与子网掩码进行AND操作,如果结果是一样的说明这两个ip地址的网络部分是一样的,在同一个子网络当中。)
ip数据包:根据ip协议发送的数据包,将ip协议的包头添加到以太网(数据链路层)的数据包的数据体部分。
ARP协议
通常情况下双方要通信需要知道2点,第一点对方的ip地址,第二点对方的MAC地址,一般的情况是对方的ip地址是已知的,但是MAC地址未知,此时就需要ARP协议来通过ip获取MAC地址。
一般这里又可以分为两种情况:
1.两台主机不在同一个子网络里面,那么通过arp协议也无法获取对方的MAC地址,只能交给网关处理,然后通过一个个路由跳转,达到同一个子网络,具体的实现这里就不详说了。
2.两台主机在同一个子网络下,那么通过ARP协议就可以得到对方的MAC地址了,ARP协议的工作原理是,在以太网包里面加上一个ARP协议发的数据包,里面包含了源IP、源MAC,对方IP、对方MAC,在对方MAC地址那一栏写到是FF:FF:FF:FF:FF:FF,表示这是一个广播地址,这样同一子网络里面的每一台主机都会收到这个数据包,并将数据包里面的对方ip与自身IP进行比较,如果相同就做出回复,不是就丢弃,这样就获得了对方主机IP对应的MAC地址了
传输层:
一般而言有了MAC地址和IP地址,我们已经可以在互联网上的任何两台主机上建立了通信,不过网络层只是负责将主机A的数据发送到主机B上,但是一台主机可能同时在运行着很多进程程序。
比如在聊天的同时又在浏览网页,那么对于网络层穿上来的或者应用层传下来的数据到底是哪个程序的呢?这就需要另一个参数来确定了,那就是端口号,端口号是0到65536之间的整数,0到1023端口是被系统占用的,那么聊天或者浏览器这些应用程序就会随机选用一个大于1023的端口。
因此传输层就是建立端口与端口的通信了,平时我们常说的套接字(socket)就是又IP+PORT组合而成的。TCP是一种面向链接的,可靠的传输协议,UDP是一种比较简单的,容易实现的,实时性高的传输协议,缺点就是可靠性较差。(具体的工作原理实例后面介绍)
应用层:
应用层主要是用来解读传输层传输过来的数据,因为互联网的使用是五花八门的,如果不制定好规则,那么就无法为应用程序解读数据,而这些规则就是我们常见的应用层协议。
- 文件传输协议FTP(File Transfer Protocol),一般上传下载用FTP服务,数据端口是20,控制端口是21,基于TCP。
- 快速文件传输协议TFTP(Trivial File Transfer Protocol),端口69,基于UDP。
- TELNET服务是用户远程登录服务,端口23,使用明码传送,保密性差、简单方便,基于TCP。
- 域名解析服务DNS(Domain NameService),提供域名到IP地址之间的转换,使用端口53,基于UDP。
- 简单邮件传输协议SMTP(Simple Mail TransferProtocol),用来控制信件的发送、中转,使用端口25,基于TCP。
- 网络文件系统NFS(Network FileSystem),用于网络中不同主机间的文件共享。
- 超文本传输协议HTTP(Hypertext Transfer Protocol),端口80,基于TCP。
- HTTPS协议(HyperText Transfer Protocol over SecureSocket Layer),端口443,基于TCP。
- 动态主机配置协议DHCP协议(Dynamic Host Configuration Protocol),端口67/68,基于UDP。
TCP:FTP,TELENT,SMTP,HTTP/HTTPS
UDP:TFTP,DNS,DHCP
三.数据传输过程
数据从左到右的传输过程:
数据的封装过程:
- 第一步,应用层按照一定的规则将要传输的数据进行编码,然后将数据丢给传输层。
- 第二步,传输层将应用层传来的数据分割成多个的数据段(方便解决传输出错的问题,比如TCP的丢包重传等等,重传一小段数据段要比传输一整个数据要轻松很多),同时在传输层,会为数据段添加一个报文头(TCP/UDP),然后将数据交给网络层。
- 第三步,在上层穿过来的数据段再次进行一次分装,加上IP头部,其中里面包含一个非常关键的信息,双方的IP地址,然后将数据包交给数据链路层。
- 第四步,将网际层传过来的数据再次封装–MAC头部,然后往下一层传送,其中关键的信息就是MAC地址,此时的数据是以数据帧的形式存在的。
- 第五步,将数据链路层的数据帧转换成比特流存在的电信号。
最后的结果:
数据拆分的过程: - 第六步,根据IP和MAC地址找到对方的主机后,将数据PDU传输到对方的网卡,然后网卡将数据比特流传给数据链路层。
- 第七步,数据链路层将比特流组合成字节,然后将字节组合成数据帧,然后根据MAC地址来确定是不是发送给自己的,不是就丢弃,如果是将MAC头去掉,然后根据是IP协议还是ARP协议来传输给网际层的哪个部分。
- 第八步,网际层和数据链路层的处理有点类似,也是根据IP地址来确定是不是发送给自己的,如果是将IP头部去除,然后根据传输层的头部来确定是发送给传输层的TCP模块还是UDP模块。
- 第九步,传输层,用TCP来举例,先会进行数据的校验,判断数据是否有误,如果数据被完整的接收之后会根据端口号,将数据段传输给对应的应用程序。
- 第十步,应用层根据应用层的协议将数据段进行解析,然后展示给用户。