2019-10-08 13:22:46 magic_1024 阅读数 168更多
网上浏览视频,听歌,聊天,计算机是怎么在“你”、“我”之间传送数据?
一、什么是TCP/IP协议?
首先我们看下什么是协议?
协议(Protocol)是为进行网络中的<span style="color:white">数据交换</span>而建立的规则、标准或约定。用于不同系统中实体间的通信。
两个实体要想通信,必须有同一种语言,而且,对于通信内容,怎样通信和何时通信,都必须遵守一定的规定,这些规定就是协议。
在互联网通信中,最重要和著名的就是TCP、IP两个协议,但是我们现在常说的TCP/IP协议并不是单指着两种协议,而是整个TCP/IP协议族。
二、计算机网络体系结构
既然有了协议,那么协议作用的实体是什么呢? 换言之网络中通信的实体各不相同,应该怎样各司其职?答案就是把现有网络体系抽象,划分为不同层,每一层各自遵循相应的网络协议,完成相应的功能。
就好比一个互联网公司划分了技术部、产品部、运营部、市场部、人力资源部等,各部门既相互协作又各司其职,更好的完成完成公司的各项任务。
现有计算机网络体系结构有三种划分形式:OSI七层协议、TCP/IP四层协议结构、五层协议结构。
OSI的七层协议体系结构概念清楚,理论也比较完整,但是它太复杂而且不实用。TCP/IP体系结构已经得到了非常广泛使用,但是其中网际接口层与数据链路层、物理层并没有什么区别,所以,现在计算机网络理论采取了折中方案,这也就是五层协议体系。
三、每层的作用
到这里,我们已经清楚了网络的分层结构,那么每一层各自的职责和使用的协议是什么呢?
应用层协议定义的是应用进程间通信和交互的规则。进程就是主机上正在运行的程序。比如我们电脑上开着的QQ、微信等。不同的网络应用需要有不同的应用层协议,比如浏览器使用的HTTP协议,支持电子邮件的SMTP协议,支持文件传送的FTP协议等等。应用层交互的数据单元成为报文(message)。
运输层的任务就是负责向两个主机中进程之间的通信提供通用的数据传输服务。应用层进程产生的报文就是使用运输层进行传输。运输层是通用的,它不针对某个特定的网络应用。多种应用是可以同时使用同一个运输层。一台电脑上可以同时运行着多个进程,多个应用层进程可以同时使用同一个运输层发送数据,同时,运输层可以把收到的信息分别交付给上面应用层进程。
运输层主要使用的协议是TCP和UDP:
- 传输控制协议TCP(Transmission Control Protocol)—提供面向连接的,可靠的数据传输服务,数据运输单元是报文段
- 用户数据报协议UDP(User Datagram Protocol)—提供无连接的、尽最大努力的数据传输服务,不保证数据传输的可靠性,数传输单位是用户数据报
那么什么时候使用TCP,什么时候使用UDP呢?我们先看下使用TCP和UDP的各种应用和应用协议:
应用 | 应用层协议 | 运输层协议 |
---|---|---|
域名转换 | DNS(域名系统) | UDP |
文件传送 | FTP(文件传送协议) | TCP |
路由选择协议 | RIP(路由信息协议) | UDP |
IP地址配置 | DHCP(动态主机配置协议) | UDP |
网络管理 | SNMP(简单网络管理协议) | UDP |
远程网络文件服务器 | NFS(网络文件协议) | UDP |
流式多媒体通信 | 专用协议 | UDP |
远程终端接入 | TELNET(远程终端协议) | TCP |
万维网 | HTTP(超文本协议) | TCP |
电子邮件 | SMTP(简单邮件传送协议) | TCP |
UDP在传送数据之前不需要先建立连接,目的主机在收到UDP报文后,不需要给出任何确认。发送数据结束时也没有任何连接可释放,因此UDP减少了开销和发送数据之前的时延。主机间不需要维持复杂的状态连接。
同时UDP对应用程序交下来的报文,不做拆分,也不做合并,应用层交下来的报文多长,UDP加上必要的控制信息后就交付下一层。UDP也没有拥塞控制,网络拥塞不会使源主机发送速率降低。综合来看,UDP适合实时性要求很高的应用,比如视频通话,语音通话等。
TCP则是面向连接的,TCP建立连接时需要三次握手,断开时需要四次挥手,TCP保证数据的可靠性,保证数据的无差错、不丢失、不重复,按顺序到达。应用层和TCP交互的是一次一个数据块,TCP把应用程序交下来的数据块分割成了字节序列包装成报文段。
运输层还有一个重要的概念—端口(port),因为主机上的进程都是动态创建和撤销的,把进程作为通信的最后终点是不可行的,所以要使用端口标识一个进程来进行通信。无论是TCP还是UDP,在它们的首部中都会有源端口和目的端口这两个字段。比如我们熟悉的HTTP应用使用的80端口,FTP使用的21端口,TELNET使用的23端口,SMTP使用的25端口等等。
网络层把运输层产生的报文段或用户数据报封装成IP数据报(packet)进行传送。同时还负责选择合适的路由,使源主机运输层所传下来报文段或包能通过网络中的路由器找到目的主机。
网络层向上提供的是简单灵活的、无连接的、不可靠数据交付。也即是说包在网络上传递会有丢失、出错、重复和顺序错乱。这也就是我们常说的网络丢包。
网络层使用了我们熟悉的IP协议。源主机和目的主机的IP地址被封装到IP首部内。
数据链路层把网络交下来的IP数据报组装成帧,然后在两个相邻节点的链路上传送帧。通常称为MAC帧,因为帧在传送时使用的源地址和目的地址都是计算机硬件地址,封装在帧首部信息里。
物理层将数据链路层交下来的的帧,按照比特流进行传送,也即是二进制0和1形式进行传送。
所以总结起来,计算机之间的数据传输就是数据通过各层之间的封装与解封装过程。就好比有一封信从最高层(源主机)向下传,每经过一层就包上一个新的信封,信封上写好必要的,下一层要处理的信息(首部、尾部等)。包着多个信封的信件到达目的地(目标主机)之后,从第1层起,每层拆开一个信封后(按照固定协议协议),交给它的上一层。传到最高层(应用层)后,取件人(进程)最终取出信,读取内容。