对于一名网络工程师而言,TCP/IP协议是必须学习且重点学习的内容。在计算机网络的学习中,几种网络模型也可谓是“基本功”。下图展示了三种网络模型各层间的对应关系。(a)是传统的OSI七层网络模型,(b)是TCP/IP四层模型,(c)是TCP/IP五层模型。五层模型和四层模型的唯一区别就是将网络接口层拆分成了数据链路层和物理层,五层模型是OSI七层模型和TCP/IP四层模型的折中。在本篇学习总结中,主要参考的是TCP/IP协议的五层模型。在实际传输过程中,主机A想要给主机B发送消息,则需要按照应用层、传输层、网络层、数据链路层、物理层的顺序进行发送端数据封装,然后再通过物理介质传送给接收端,在接收端再按照物理层、数据链路层、网络层、传输层、应用层这一相反的顺序进行数据解封装,最终将信息传送给主机B。TCP/IP协议(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议是Internet最基本的协议。下图中展示了常用的一些协议及其相应的一些关系。这个图中,自上而下的看可以这样理解:每一层都把上一层当成自己的数据,链路层把网络层当成自己的数据、网络层把传输层当成自己的数据,以此类推,逐层封装。下面小胖达将从上而下,逐层地进行学习总结分享。
一、应用层上的协议
1.以TCP协议作为传输层协议,使用TCP端口的应用层协议(1)FTP协议(File Transfer Protocol,文件传输协议)是用于在网络上进行文件传输的一套标准协议,它工作在应用层,使用 TCP 传输,客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的,而且是面向连接,为数据传输提供可靠保证。FTP协议会使用到两个端口进行文件传输:数据端口和控制端口,数据端口是TCP端口20,用于传输文件数据,控制端口是TCP端口21,用于建立FTP连接和发送控制命令。(2)SSH协议(Secure Shell,安全外壳协议)为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。虽然SSH本身支持使用UDP,但是出于安全和性能考虑,通常SSH会使用TCP作为其基础传输层。SSH协议通常使用TCP端口22进行安全连接。(3)Telnet协议为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。Telnet协议是Internet远程登录服务的标准协议和主要方式,使用TCP协议作为传输层协议,通常在TCP端口23进行通信。(4)HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,是万维网WWW(World Wide Web)的数据通信的基础。HTTP协议默认使用TCP端口80,通常用于web服务。(5)HTTPs协议(Hypertext Transfer Protocol Secure,超文本传输安全协议)是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。其主要由两部分组成:HTTP+SSL/TLS,也即在HTTP上加上了一层处理加密模块。HTTPs协议默认使用TCP端口443。2.以UDP协议作为传输层协议,使用UDP端口的应用层协议(1)DNS(Domain Name System,域名系统)它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。(2)DHCP协议(Dynamic Host Configuration Protocol,动态主机设置协议)是一个局域网的网络协议,使用UDP协议工作,主要用于局域网或网络服务供应商自动分配IP地址给用户、局域网管理员作为对所有计算机作中央管理的手段。DHCP协议使用UDP协议作为传输层协议,且使用UDP端口67作为Server端口,使用UDP端口68作为Client端。(3)TFTP协议(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,使用UDP端口69。(4)SNMP协议(Simple Network Management Protocol,简单网络管理协议)能够帮助网络管理员提高网络管理效率,及时发现和解决网络问题,对网络增长做好规划。网络管理员还可以通过 SNMP 协议,接收网络节点的通知消息和警告事件报告等,从而获知网络出现的问题。该协议是使用UDP协议作为传输层协议,使用UDP端口161和162,其中UDP端口161用于NMS发送Get、GetNext、GetBulk和Set操作请求以及SNMP Agent响应这些请求操作,UDP端口162用于接收和发送SNMP信息,如获取设备状态信息、修改设备参数等。(5)ISAKMP协议(Internet Security Association and Key Management Protocol,互联网安全协会和秘钥管理协议)是一种用于安全密钥协商和管理的协议,它是IPsec(Internet Protocol Security)协议套件中的一部分,用于确保网络通信的机密性、完整性和可用性。使用UDP端口500。
在传输层的协议中,TCP协议就是一种面向连接的协议,UDP协议就是一种面向无连接的协议。(1)TCP协议(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,旨在在不可靠的互联网络上提供可靠的端到端字节流。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接。TCP协议使用三次握手协议建立连接,如下图所示。
TCP三次握手建立连接
三次握手完成后,客户端Client和服务器Server成功建立连接,就可以开始传输数据了。
TCP的连接建立需要三次握手过程,当传输完成后需要关闭连接时,则需要四次挥手过程。
TCP四次挥手释放连接位于传输层的TCP数据分组称为段(Segment),又译为报文段、数据段或分段。TCP将来自应用层的数据分块并封装成TCP段进行发送。TCP段封装在IP数据报中,然后再封装成数据链路层中的帧。TCP协议号在IP报文中是6。对于TCP协议的详细学习笔记,后续小胖达会持续更新。在本篇学习笔记中,主要目的是梳理理清TCP/IP协议簇中各层常见常考协议之间的关系,故通过本次学习笔记的阅读能够精准辨别、分清各层各个协议的关系即可。(2)UDP协议(User Datagram Protocol,用户数据报协议)是 TCP/IP 协议簇中的最基本的传输层通信协议,它使用最低限度的通信机制,为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。UDP 被认为是一种不可靠的传输协议,但它通过使用 IP 服务来完成其工作,提供了一种尽力而为的传递方法。在 UDP 中,接收方不生成数据包的确认,发送方也不等待数据包的确认。正是这个不足,使得该协议虽不可靠但是易于处理。同时,也正是因为这一问题,当发送方发送的报文分组有一定顺序性时,传输路径存在一个不确定性,接受方通过UDP接受到的报文分组顺序也存在不确定性,需要接收方通过一定方法将就收到的报文分组进行排序恢复。像上文举的例子中,②就可以认为是一个UDP传输过程示例。UDP协议号在IP报文中是17。需要说明的一点是,像图中明明在传输层列出了那么多协议,怎么就TCP协议和UDP协议算呢?这是因为在传输层列出的这8个协议的信息都是封装在IP报文中的,所以将它们列成了一排。但是这里再次明确!!!传输层协议只有TCP协议和UDP协议。
IGMP(Internet Group Management Protocol,网际组管理协议)主要用于IP主机与组播路由器之间,通过IGMP报文来建立和维护组播组成员关系。IGMP协议允许将一台主机发送的数据通过网络路由器和交换机复制到多个加入此组播的主机。IGMP信息封装在IP报文中,其IP的协议号为2。