我们上一次了解了OSI的网络层次模型,如果还没有看过上一次OSI网络模型的可以点击这里:
我们今天来看实际在生活中使用更广的TCP/IP网络模型:
TCP/IP网络模型的起源可以追溯到20世纪60年代末和70年代初,当时美国国防部的高级研究计划局(ARPA)启动了一个名为ARPANET的项目,旨在建立一种分散的、鲁棒的通信网络,以连接分散在全国各地的大学和研究机构。这个项目的成功和发展奠定了互联网的基础,并推动了TCP/IP协议的发展和普及。
在ARPANET项目的早期,各个研究机构使用各自独立的网络协议,这导致了不同网络之间的互联互通问题。为了解决这个问题,美国国防部要求设计一种能够实现不同网络之间通信的协议,于是TCP/IP协议应运而生。
在20世纪70年代中期,Vinton Cerf和Robert Kahn等人设计了TCP/IP协议族,使得不同网络之间能够进行有效的通信。这一设计成为了互联网的基础协议,TCP/IP协议也成为了互联网通信的标准。
TCP/IP协议族的设计受到了分层的思想启发,因此它被分为四个层次:应用层、传输层、网络层和数据链路层。这种分层结构使得协议的设计更加模块化和可扩展,并且简化了网络的管理和维护工作。
随着互联网的发展,TCP/IP协议成为了事实上的标准,并逐渐取代了其他网络协议,成为了互联网通信的基石。TCP/IP网络模型也因其简单、灵活和可扩展的特性而被广泛应用于各种网络环境中。
TCP/IP网络有四层结构:
网络接口层(或主机到网络层):这是TCP/IP模型的最底层,主要负责主机的逻辑连接和物理连接。它主要负责将数据从主机发送到网络上,以及从网络上接收数据。具体来说,它负责接收从网络层交来的IP数据包,并将其通过低层物理网络发送出去;或者从低层物理网络上接收物理帧,然后抽出IP数据包交给网络层。
网络层(或互联网层):这一层是TCP/IP模型的核心,主要负责路由寻址和分组交换。它根据数据包头部的源IP地址和目的IP地址,将数据包发送到正确的目的地。此外,网络层还定义了标准的分组格式和接口参数,使得分组可以在不同网络间实现漫游。当网络中部分设备不能正常运行时,网络层的设计也确保了网络服务不被中断,已经建立的网络连接依然可以有效地传输数据。
传输层:传输层在源结点和目的结点的两个进程实体之间提供可靠的端到端的数据传输。它不仅可以提供不同服务等级、不同可靠性保证的传输服务,还可以协调发送端和接收端之间的传输速度差异。主要的传输层协议包括TCP(传输控制协议)和UDP(用户数据报文协议)。
应用层:这是TCP/IP模型的最高层,主要为用户提供多种网络应用程序,如电子邮件、远程登录等。应用层规定应用进程在通信中所遵守的协议,为应用程序提供接口服务。由于并不是所有的网络服务都需要会话层和表示层的功能,因此这些功能逐渐被融合到TCP/IP模型中应用层的那些特定的网络服务中。
TCP/IP模型的四层之间通过一系列协议和接口实现交互,确保数据在网络中正确、高效地传输。以下是四层之间交互的简要概述:
网络接口层与网络层的交互:
网络接口层负责将数据帧从网络层发送到物理网络,或从物理网络接收数据帧并交给网络层。
当网络层需要发送数据时,它会将数据封装成IP数据包,并交给网络接口层。网络接口层根据硬件的物理地址(如MAC地址)将数据帧发送到网络上。
当网络接口层从网络上接收到数据帧时,它会抽取IP数据包并交给网络层进行处理。
网络层与传输层的交互:
网络层主要负责路由选择和分组交换,确保IP数据包能够到达目的主机。
当传输层需要发送数据时,它会将数据封装成TCP或UDP报文段,并指定目的主机的端口号,然后将报文段交给网络层。
网络层将报文段封装成IP数据包,并添加必要的路由信息,然后通过网络接口层发送出去。
当网络层接收到来自网络接口层的IP数据包时,它会根据路由信息将其转发到正确的目的主机,并交给传输层进行处理。
传输层与应用层的交互:
传输层为应用程序提供端到端的通信服务,确保数据的可靠传输。
当应用层需要发送数据时,它会将数据通过传输层的接口(如套接字)发送给传输层。
传输层将数据封装成TCP或UDP报文段,并添加必要的控制信息(如序列号、确认号等),然后交给网络层进行传输。
当传输层接收到来自网络层的报文段时,它会根据控制信息进行相应的处理(如重传、排序等),然后将数据通过接口交给应用层。
应用层之间的交互:
应用层负责处理各种网络应用程序的逻辑。
当一个应用程序需要发送数据给另一个应用程序时,它会通过应用层的协议(如HTTP、FTP等)将数据格式化为应用层协议所规定的形式,并通过传输层发送出去。
接收端的应用程序通过应用层协议解析接收到的数据,并根据应用程序的逻辑进行相应的处理。
其实,我们这个模型是通过TCP/IP协议栈抽象出来的:
通过这个协议栈,我们抽象出来了四层结构。
TCP/IP协议栈中一些主要的协议及其功能:
应用层协议:
Telnet:用于远程登录到另一台计算机上,并在那台计算机上执行命令。
FTP (文件传输协议):用于在两台计算机之间传输文件。
SMTP (简单邮件传输协议):用于发送和接收电子邮件。
DNS (域名系统):将人类可读的域名(如www.example.com)转换为计算机可读的IP地址。
传输层协议:
TCP (传输控制协议):一种面向连接的协议,提供全双工的字节流,确保数据的可靠传输。
UDP (用户数据报协议):一种无连接的协议,不保证数据的可靠传输,但通常用于实时通信或需要快速响应的应用。
网络层协议:
IP (互联网协议):负责数据包的路由和寻址,确保数据包能够到达目的主机。
ICMP (互联网控制消息协议):处理路由器与主机之间的错误和控制消息,例如“目标不可达”消息。
IGMP (互联网组管理协议):用于网络中的多播(将数据发送到一组计算机)。
网络接口层(或链路层)协议:
ARP (地址解析协议):将IPv4地址映射到硬件地址(如MAC地址),以便在局域网内进行通信。
RARP (反向地址解析协议):将硬件地址映射到IPv4地址,这在现代网络中较少使用。
TCP/IP和OSI之间的区别主要体现在以下几个方面:
层次结构:OSI参考模型有7层,而TCP/IP参考模型只有4层。虽然两者都有网络层(或称互联网层)、传输层和应用层,但其他层并不相同。TCP/IP的四层有时也被称为链路层(数据链路层)、网络层、传输层和应用层。
服务类型:OSI模型的网络层提供面向连接和无连接两种服务,但传输层只提供面向连接服务。而TCP/IP模型在网络层只提供无连接服务,但在传输层却提供面向连接和无连接两种服务。
概念区分:OSI参考模型中明确区分了服务、接口和协议这三个基本概念,而TCP/IP模型在这方面并不十分清晰。OSI模型中的协议具有更好的隐蔽性,在发生变化时也更容易被替换。
通用性:OSI参考模型是在其协议被开发之前设计出来的,因此更具有通用性,但也意味着在协议实现方面可能存在某些不足。相反,TCP/IP模型则是先有协议和应用再提出模型,并且参照了OSI模型。
适用范围和历史:OSI一般用于理论研究和教学,而TCP/IP则广泛应用于实际的工业生产,特别是互联网领域。TCP/IP协议是互联网的基础协议,广泛应用于全球互联网。
层次交互方式:TCP/IP协议族的层次结构更加紧凑和灵活,各层之间的界限不那么明显,更容易扩展和实现。
面向连接是指在用户开始传递信息前,必须在通信双方或更多方间建立起连接的网络。这种连接可以是实在的电路连接,也可以是逻辑的虚连接(虚电路)。面向连接网是端到端的连接通路电信网,电路交换的电信网是依靠一系列交换机协同动作来实现的。
以TCP为例,TCP是面向连接的、可靠的进程到进程通信的协议,它提供全双工服务,即数据可在同一时间双向传输。每一个TCP都有发送缓存和接收缓存,用来临时存储数据。TCP报文段包括源端口号、目标端口号、序号、确认号、首部长度、窗口大小等信息,以确保数据的准确传输。
在面向连接的网络中,通信双方在通信时,要事先建立一条通信线路,其过程包括建立连接、使用连接和释放连接。这种服务的主要特点是在数据传送前,先建立连接,连接建立后再传输数据,数据传送完后,释放连接。
三次握手和四次挥手是TCP/IP协议中用于建立连接和断开连接的重要过程。
三次握手:
SYN:客户端向服务器发送一个SYN包,请求建立连接,并等待服务器的确认。SYN包中包含了客户端的初始序列号。
SYN+ACK:服务器收到SYN包后,确认客户端的请求,并发送一个SYN+ACK包给客户端。这个包既是对客户端SYN包的确认,同时也包含了服务器自己的初始序列号,请求客户端确认。
ACK:客户端收到SYN+ACK包后,向服务器发送一个ACK包,表示已经收到服务器的SYN+ACK包,并等待服务器发送数据。至此,三次握手完成,TCP连接建立成功。
四次挥手:
FIN:当客户端完成数据传输后,会向服务器发送一个FIN包,请求断开连接。此时客户端进入FIN_WAIT_1状态。
ACK:服务器收到FIN包后,发送一个ACK包给客户端,确认收到客户端的断开连接请求。此时服务器进入CLOSE_WAIT状态,客户端进入FIN_WAIT_2状态。
FIN:服务器在发送完所有数据后,向客户端发送一个FIN包,请求断开连接。此时服务器进入LAST_ACK状态。
ACK:客户端收到服务器的FIN包后,发送一个ACK包给服务器,表示已经收到并确认断开连接的请求。此时客户端进入TIME_WAIT状态,等待一段时间以确保服务器收到ACK包后关闭连接。服务器收到ACK包后关闭连接,进入CLOSED状态。至此,四次挥手完成,TCP连接断开。
这里简单了解一下,我们之后要细讲。
无连接是通信技术之一,指的是通信双方不需要事先建立一条通信线路,而是把每个带有目的地址的包(报文分组)送到线路上,由系统自主选定路线进行传输。
无连接模式的典型例子包括邮政系统、IP和UDP协议。在邮政系统中,信件通过天罗地网式的选择路线进行传播,类似于无连接模式中的报文分组传播。而IP和UDP协议作为无连接协议,它们在网络传输中不建立和维护会话连接,只是简单地将数据报发送到目的地,不保证数据报的顺序性和可靠性。
这种无连接的方式有其特定的应用场景和优势,例如在某些需要快速、简单、灵活的通信场景中,无连接模式可能更为适用。然而,由于不建立和维护会话连接,无连接模式在数据传输的可靠性和顺序性方面可能不如面向连接的通信方式。
需要注意的是,无连接并不等于完全不进行任何连接处理。在某些情况下,如HTTP协议中的请求-响应模式,虽然每次请求和响应都是独立的,但服务器在处理完客户的请求并收到应答后,会断开连接。这种断开连接是为了尽快释放资源,以便服务其他客户端。但这并不意味着在整个通信过程中没有任何连接的存在或处理。