简介
因为ISO七层模型既复杂又不实用,所以现在应用最广泛的其实是我们平时经常听到的TCP/IP协议,它就是一个四层协议的协议族,只不过因为TCP/IP是其中最核心的协议,所以平时统称为TCP/IP协议,其实这个协议族里面还有其他协议,比如HTTP、FTP、SMTP等;此外本篇文章还粗略归纳了一下TCP协议的“三次握手和四次挥手”,UDP协议的特点以及它同TCP协议的不同之处,IP地址协议以及路由协议。
一、TCP分层框架
下图是TCP/IP四层协议族与ISO七层模型的一个分层框架对比图,从上往下依次是应用层、会话层、表示层、传输层、网络层、数据链路层、物理层。
假如我想在机器A上,发送一条"Hello World"到机器B,这个通讯过程是个什么样子呢?
首先机器A的应用层将消息内容"Hello World"打包,然后经由传输层加上双方的端口号,网络层加上双方的IP地址,链路层加上双方的Mac地址,经过多个路由器和网关,最终到达机器B,然后机器B再反过来解析出消息内容"Hello World"
简化之后的路径就是:消息实体+端口号+IP地址+Mac地址,封装发送,收到消息后,再反过来解包操作
下面我们从上往下,依次介绍各个分层的作用:
应用层:
应用层是OSI参考模型的最高层,它是确定应用进程之间的通信性质以满足用户需要、负责用户信息的语义表示并在两个通信者间进行语义匹配的。
比如SMTP协议,虽然不同公司的邮箱格式不尽相同,但是都可以解析对方发来的邮件内容,就是因为他们都遵循SMTP协议。
表示层:
表示层主要是上层用户解决用户信息的语法表示问题,其主要功能是完成数据转换、数据压缩及加密。
会话层:
它虽然不参与具体的数据传输,但它却对数据传输进行管理,会话层建立在两个互相通信的应用进程之间,进行数据交互的组织协调。
传输层:
传输层是网络体系结构中的中高低层间的衔接的接口,主要负责处理数据报文错误和数据包的发送接收次序等传输问题。它可以决定数据要传输到远程机器的哪个程序(端口),同时要表明数据来自源机器的哪个程序(端口),实现端口之间的通讯。
比如本地跑一个测试程序A,监听的是80端口;远程跑的测试程序B,监听的是8080端口;
那么传输层就会把本机的80端口和远程的80端口都加到数据包上;
这样远程机器解析数据时,就知道要把数据传给哪个程序。
网络层:
网络层传输的数据单位是分组或被称为“Packet”的数据包,它通过路由选择算法为网络分组选择最佳路径,从而实现拥塞控制和网络互联等功能。其实主要就是为了防止网络跟公共交通似的发生拥堵,在传输过程中万一发生数据块丢失的话,可以有迹可循,重新连接和补发送。可指定双方的IP地址,并进行路由的寻址和转发。这里要明白一点就是,远程机器的IP地址不是一次跳转就可以到达的,要通过路由器和网关的多次跳转,才会到达。
数据链路层
在各通信实体间建立数据链路联接,通过网桥和交换机来传输以“帧”为单位的数据流,它主要功能是为上层的网络层提供容错控制和流量控制服务。它可以指定远程机器的Mac地址(确保不会发错地方),以及本机的Mac地址。
既然有了Mac地址来作为机器的唯一ID,为啥还要有网络层的IP地