这里所说的是广义上的TCP/IP协议群,而不是特指TCP和IP这两种具体的协议。既然是协议群,那么都有哪些协议呢?我们先不着急回答这个问题,因为要弄清楚这个问题,首先得了解另两件事,就是为啥要有这个协议群,这个协议群大概是啥样的。
先说第一件,起因很简单,这也是web产生的源头,就是计算机与计算机之间的联接。为啥计算机要互联呢?因为要交换数据,共享信息。当然,你也可以说我直接把数据传到U盘或者移动硬盘,接入到另一台计算机去不就完事了吗,那样我也无话可说了。计算机之间的互联互通要解决很多问题,首先是不同厂商生产的不同计算机型号、不同操作系统、不同网卡等等异构的软硬件如何兼容的问题。解决的办法就是制定规范,大家都按这个规范来,那么就能玩到一起了。
规范的制定就产生了协议。举个例子,我说潮汕话,你说粤语,那就是鸡同鸭讲,如果大家都说普通话,那就能聊天了。这里的普通话就是协议。很多的协议,通过这些协议来实现计算机之间的通信,我们统称它们为TCP/IP协议群。这么多协议,管理办法就是分层。ISO(国际标准化组织,International Organization for Standardization)制定了OSI(开放系统互连参考模型,Open System Interconnect)参考模型,分层就是按这个OSI参考模型来的,共7层,从底层往上分别是:物理层 -> 数据链路层 -> 网络层 -> 传输层 -> 会话层 -> 表示层 -> 应用层。我们的TCP/IP把会话、表示和应用这3层整合起来了,一般分的是4层(链路层 -> 网络层 -> 传输层 -> 应用层)或5层(物理层 -> 数据链路层 -> 网络层 -> 传输层 -> 应用层)。
我们详细看下OSI的七层参考模型(也叫7层通讯模型)分别都在做什么事情:
1、物理层:
定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。物理层即底层硬件,通讯最终是靠物理的传输介质实现的,物理层将数据的0/1转换为电压和脉冲光传输给物理传输介质(双绞线、同轴电缆和光纤等),所以物理层传输的是比特流。
2、数据链路层:
通过物理的传输介质实现数据的传输。相互直连的设备使用地址实现传输,这个地址叫MAC(MAC,Media Access Control,介质访问控制)地址,或者叫物理地址、硬件地址。这一层传送的时候会把网络层带来的MAC地址作为首部,方便传输介质识别传输目的地址。网络层的数据在这里会被分段,实现每一个区间(收发主机之间还存在众多主机)内的通讯。交换机利用MAC地址来确定转发地址,归到该层。物理层的比特流则转换为数据帧。
3、网络层:
在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。负责将数据包从发送端主机传输到目标主机,进行地址管理和路由的选择。可以把网络层看成端到端的数据传输,它负责把完整的数据包从A主机送达B主机,就像寄快递一样。至于中间如何中转、拆包,那是数据链路层的事。该层的协议包括IP(Internet Protocol)、ARP(Address Resolution Protocol,地址解析协议)和ICMP(Internet Control Message Protocol,Internet控制报文协议)等。IP用来识别TCP/IP网络中不同的主机或路由器,IP地址属于网络层。路由器利用IP来确定转发地址,所以也属于这一层。
4、传输层:
管理两个节点之间的数据传输(无需在路由器上处理)。负责从逻辑上建立两个主机之间的通讯连接,为确保数据包正确送达目的地,对发送端主机和目标主机之间进行确认,若数据丢失,会进行重发。协议包括TCP(Transmission Control Protocol,传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据,数据单元叫段)、UDP(User Datagram Protocol,用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,数据单元叫数据报)等。端口用于区分同一个计算机中不同的应用程序,属于传输层。
5、会话层:
负责建立和断开通讯连接,以及报文传输管理(如访问控制,会话管理)。对何时连接,以何种方式(多个连接或单个连接)连接,连接多久,何时断开等做记录。
6、表示层:
将应用处理的信息转换为适合网络传输的格式,或将下层的数据转换为适合上层处理的格式。将设备固有的数据格式,转换为网络标准传输格式,因为不同设备对同一比特流解释的结果可能不同。如报文的压缩、加密,字符的utf-8编码(编码格式加入首部传给下一层)。
7、应用层:
为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务,实现具体业务逻辑。包括电子邮件协议(如SMPT)、文件传输协议(FTP)、远程登录协议(Telnet)、超文本传输协议(HTTP)等。每一种不同的应用对应不同的协议。
从上面我们看到了TCPIP的一个大概的结构,每一层对应着不同的协议群。会话层、表示层和应用层都属于应用程序,网络层和传输层都属于操作系统,而物理层和数据链路层则属于设备驱动程序与网络接口的范畴。