这篇文章给大家带来的分享是一篇文章读懂TCP/IP通信。
TCP/IP通信在互联网中的作用非常大。基本上在互联网中的不同主机、不同协议之间的通信都要依赖于TCP/IP,也可以说TCP/IP通信是互联网通信的基础。因此学好TCP/IP通信至关重要。
在正式学习TCP/IP通信之前,小唐先来带领大家了一些基本的概念。
什么是TCP/IP通信?
TCP/IP通信是在互联网中两台主机之间进行的一个基本通信过程。简单的讲在互联网中两台主机之间的通信都是由TCP/IP通信来实现的。要实现正常且完整的TCP/IP通信中需要TCP协议和IP协议的的参与。
什么是TCP协议?
TCP协议又叫做传输控制协议,是一种面向连接的、可靠的、基于字节流的传输协议。在TCP协议中规定了两台主机之间实现通信的三个阶段:创建连接、数据传输、和连接终止,分别对应于TCP的三次握手、TCP/IP通信的实现和TCP的四次挥手。
什么是IP协议?
IP协议又叫做网际互连协议,主要的作用是把数据通过网络发送给指定的主机。简单的讲就是TCP协议负责数据在互联网的传输过程,IP协议负责能把数据发送给指定的主机。
基于互联网的通信丰富多彩,人们根据不同的互联网通信所发挥的不同作用又制定了其众多的通信协议来加以规范。但是,不管什么样的通信协议要完整的在互联网中实现通信都会依靠TCP/IP协议来进行数据传输,因此,一个极其庞大的TCP/IP协议簇从此诞生。
什么是TCP/IP协议簇?
TCP/IP协议簇,是互联网的基础,也是当今最流行的组网形式。在TCP/IP协议簇里面有着各种各样基于不同功能实现通信的协议,DNS协议便是TCP/IP协议簇里面的一员。而TCP协议和IP协议便是整个TCP/IP协议簇的核心。在TCP/IP协议簇的实现过程中,又有着一个核心的思想叫做“分层”思想。
“分层”思想的核心是“分而治之”。在TCP/IP协议簇中,把整个复杂的网络通信根据不同的作用分成了四个层次,从上到下依次为应用层、传输层、网络层、数据链路层。起到了“化繁就简”的作用。人们把TCP/IP协议簇分出的四个层次又叫做TCP/IP四次模型。
TCP/IP四层模型
TCP/IP四层模型
在TCP/IP四层模型中从上层到下层依次为应用层、传输层、网络层、数据链路层。在不同的层次之间相互依赖密不可分,任何一层的崩塌将会直接导致整个TCP/IP四层模型崩溃。
什么是应用层?
应用层直接决定了操作系统要向用户提供什么样的服务,Web服务、DNS解析服务等,都是由应用层提供。
因此Web服务和DNS解析服务依赖的http协议和DNS协议也是应用层的协议。
什么是传输层?
传输层对应用层提供处于网络中的两台计算机之间的数据传输。有着两个不同性质的协议:TCP协议也叫做传输控制协议,UDP协议也叫做用户数据报协议。主要了解的是传输层的TCP协议。
什么是网络层?
网络层又叫做网络互连层,主要是用来处理数据在网络中的传输流向。众多能在网络中进行传输的数据中,数据包是网络传输最小数据单位。简单的说,两台计算机之间的数据传输都是以数据包的方式在网络中进行传输的。该层规定了通过怎样的传输路线把数据包送到指定的计算机中,IP协议便是该层的典型代表。
什么是数据链路层?
又叫做网络接口层,是用来处理连接网络的硬件部分。包括操作系统、设备驱动程序、网卡、光纤等物理可见的设备都在该层。
因此,我们把需要学习的HTTP协议、DNS协议、TCP协议、IP协议结合TCP/IP四层模型来表示,可以表示为如下图:
协议的TCP/IP四层模型表示
在TCP/IP四层模型中,规定了互联网中任何一台计算机都应该具备TCP/IP四层模型。因此,不管是客户端还是服务器,只要实现了互联网通信,就必须要实现TCP/IP四层模型。因此,我们也可以把客户端和服务端都用TCP/IP四层模型表示出来。
客户端和服务端的TCP/IP四层模型
TCP/IP的三次握手
客户端和服务端在正式建立通信传输数据之前会进行TCP/IP的三次握手,用来确定客户端和服务器之间可以进行准确无误的、可靠的数据传输。具体的过程如下所述:
- 由客户端发起第一次和服务端的握手,用以表示准备建立通信;
- 服务端接受到第一次握手后会作出响应,并对客户端发起第二次握手,表示服务器可以接受数据,并询问客户端是否可以接受数据;
- 客户端收取到第二次握手消息后,并以第三次握手回应服务端,之后TCP通信正式建立。
在TCP三次握手中,客户端和服务器都会以消息的形式建立可靠的TCP连接。在第一次握手中客户端发送SYN消息给服务器,第二次握手中服务器发送SYN+ACK消息回应客户端的第一次握手消息,第三次握手客户端对服务器发送ACK消息表示确认,TCP通信正式建立。
什么是SYN消息?
SYN消息又叫做同步序列编号。是TCP/IP建立连接的时候使用的握手信号。
什么是ACK消息?
ACK消息叫做确认字符,在数据通信中,是一个传输类控制字符,表示发来的数据已确认接受无误。
TCP/IP的三次握手如下图所示:
TCP/IP的三次握手
TCP/IP的通信
在进行TCP/IP的三次握手后,客户端和服务器正式的建立起了可靠的TCP通信,开始了数据的传输。
在数据从客户端发送到服务器的过程,产生了数据发送方和数据接收方。
什么是数据发送方?
在数据的传输过程中,发送数据的那台计算机,叫做数据发送方,简称发送方。
什么是数据接收方?
在数据的传输过程中,接收数据的那台计算机,叫做数据接收方,简称接收方。
数据从发送方到接收方的过程中,又因为在网络中数据只能以数据包的方式进行传输。因此出现了:发送方数据的打包、数据经由网络进行传输、接收方数据的拆包,三个过程。
什么是发送方数据的打包?
在发送方,数据如果想要通过网络传输出去,那么,数据就会从传输层开始打包,发送至网络层;网络层对数据进行打包,发送至数据链路层;数据链路层对数据进行打包之后才能通过数据链路层把数据包抛向网络进行传输。也叫做数据的三层打包。
什么是数据经由网络进行传输?
数据包在网络中进行传输的过程,我们叫做数据包经由网络进行传输。
什么是接收方数据的拆包?
数据包通过网络传输到达了接收方之后,接收方的数据链路层会把数据包从网络中取出来开始第一次对数据包的拆包,之后发送给网络层,然后网络层开始对数据包进行第二次拆包后发送给传输层;传输层再对数据拆包,发送至应用层;就这样我们接收方收到了数据并且可以对数据进行处理了。接收方的拆包过程,也叫做数据的三次拆包。
数据从发送方到接收方的过程如下图:
数据从发送方到接受方的过程
数据的打包、拆包过程,我们也可以简单的理解为打包快递和拆快递的过程。
发送方想要把数据包通过网络的形式准确的发送给接收方,基于网络层的IP协议发挥了不可替代的作用。
IP协议的的作用是把各种数据包传送给接收方。为了保证数据包确实传送到了接收方哪里,需要满足各种各样的条件。其中两个重要的条件就是IP地址和MAC地址。
什么是IP地址?
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配了一个逻辑地址,以此来屏蔽物理地址的差异。IP地址也叫做计算机在互联网中的地址。IP地址也可以简单的理解为现实生活中的地址。
什么是MAC地址?
MAC地址也叫做以太网地址,是一个用来确认网络设备的位置,MAC地址用于在网络中唯一标示一个网卡,如果一台设备有多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。
IP地址可以和MAC地址进行配对。IP地址有的时候会变换,但MAC地址基本不会更改。
在互联网中IP间的通信依赖MAC地址,在网络上,要实现客户端和服务端的通信基本是需要经过互联网中多台计算机和网络设备的中转才能建立通信。而在进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时,就会采用ARP协议来进行中转。
ARP协议是一种用以解析地址的协议,可以根据通信方的IP地址就可以反查出对应的MAC地址。在达到通信目标前的中转过程中,中转的那些计算机和路由器等网络设备只能获得很粗略的传输路线。这种机制称为路由选择。
在数据包的中转过程中,有点像快递公司的送货过程。想要寄快递的人,只要将自己的货物送到集散中心,就可以知道快递公司是否肯收件发货,该快递公司的集散中心检查货物的送达地址,明确下一站该送往哪个区域的集散中心。接着,那个区域的集散中心自会判断是否能送到对方的家中。数据包在网络中的传输过程如下图:
数据包在网络中进行通信
传输过程对应于上图的序号1、2、3、4。
- 发送方想要给IP地址为30.30.30.30的主机发送数据包,但使用ARP协议没有解析出接受方主机的MAC,因此发送发把数据包抛给了MAC地址为11:11:11:11:11:11的路由器;
- 路由器1经过路由选择把数据包抛给了MAC地址为:22:22:22:22:22:22的路由器;
- 路由器2经过路由选择把数据包抛给了MAC地址为:33:33:33:33:33:33的路由器;
- 路由器3通过ARP解析,解析出了IP地址30.30.30.30对应的MAC地址为44:44:44:44:44:44,因此把数据包顺利的发给了接受方了。
我们可以简单的理解数据包在网络中的传输过程就是运输快递的过程。数据包就是我们的快递,数据包在网络中不同主机和路由器之间的中转,就相当于是快递集散中心的中转站。接着,快递集散中心会依次把快递发往下一个中转站。数据包选择中转站的过程需要使用到我们的ARP解析,至于具体中转的路径是由路由选择来实现的。
TCP/IP的四次挥手
经过了一段时间,客户端和服务器之间的数据传输完毕了,双方需要关闭TCP连接并结束通信,就会产生我们TCP的四次挥手,TCP的四次挥手也是通过消息的方式实现的。如下图:
TCP/IP的四次挥手
TCP的四次挥手主要是通过FIN消息和ACK消息实现的,具体过程如下:
- 客户端向服务器发送一个FIN消息,用来关闭客户端和服务器的数据传输;
- 服务器收到FIN消息后,以ACK消息回应,表示确认关闭。
- 服务端向客户端发送一个FIN消息,用来关闭服务器和客户端的数据传输;
- 客户端收到FIN消息后,以ACK消息回应,表示确认关闭,至此整个客户端和服务器的TCP连接关闭。
因为TCP连接是全双工通信,因此需要客户端和服务端分别进行连接的关闭。
本篇文章写到这里的时候也意味小唐关于TCP/IP通信的分享也正式的告一个段落了,感谢大家对本篇文章耐心的阅读,不过还没有结束。小唐还有两个知识点需要给大家科普一下。
什么是全双工通信?
全双工通信指发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。网卡一般都支持全双工。
什么是FIN消息?
FIN消息在网络通信中表示关闭连接。