TCP/IP含义

从字面意义上讲,有人可能会认为TCP/IP是指TCP与IP两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用IP进行通信时所必须用到的协议群的统称。具体来说,IP或ICMP、TCP或UDP、TELNET或FTP、以及HTTP等都属于TCP/IP的协议。它们与TCP或IP的关系紧密,是互联网必不可少的组成部分。

TCP/IP一词泛指这些协议,因此,有时也称TCP/IP为网际协议族(Internet Protocol Suite)。

TCP/IP协议群

互联网进行通信时,需要相应的网络协议,TCP/IP原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是TCP/IP,TCP/IP就是互联网的协议

应用协议

  • HTTP(Hypertext Transfer Protocol)超文本传送协议
  • SMTP(Simple Mail Transfer Protocol)简单邮件传输协议
  • FTP(File Transfer Protocol)文件传输协议
  • TELNET(Telecom Munication Net Work Protocol)电信网络协议/远程登录服务协议
  • SNMP(Simple Network Management Protocol)简单网络管理协议

传输协议

  • TCP(Transmission Control Protocol)传输控制协议
  • UDP(User Datagram Protocol)用户数据报协议

网际协议

  • IP(Internet Protocol)网际协议
  • ICMP(Internet Control Message Protocol)网际控制报文协议
  • ARP(Address Resolution Protocol)地址解析协议

路由控制协议

  • RIP(Routing Information Protocol)路由信息协议
  • OSPF(Open Shortest Path First)开放最短路径优先路由协议
  • BGP(Border Gateway Protocol)边界网关协议

TCP/IP协议分层模型

OSI参考模型注重“通信协议必要的功能是什么”,而TCP/IP则更强调“在计算机上实现协议应该开发哪种程序”。

硬件(物理层)

TCP/IP的最底层是负责数据传输的硬件。这种硬件就相当于以太网或电话线路等物理层的设备。关于它的内容一直无法统一定义。因为只要人们在物理层面上所使用的传输媒介不同(如使用网线或无线),网络的带宽、可靠性、安全性、延迟等都会有所不同,而在这些方面又没有一个既定的指标。总之,TCP/IP是在网络互连的设备之间能够通信的前提下才被提出的协议。

网络接口层(数据链路层/网卡层)

网络接口层(有时人们也将网络接口层与硬件层合并起来称作网络通信层)利用以太网中的数据链路层进行通信,因此属于接口层。也就是说,把它当做让NIC起作用的“驱动程序”也无妨。驱动程序是在操作系统与硬件之间起桥梁作用的软件。计算机的外围附加设备或扩展卡,不是直接插到电脑上或电脑的扩展槽上就能马上使用的,还需要有相应驱动程序的支持。例如换了一个新的NIC网卡,不仅需要硬件,还需要软件才能真正投入使用。因此,人们常常还需要在操作系统的基础上安装一些驱动软件以便使用这些附加硬件(现在也有很多是即插即拔的设备,那是因为计算机的操作系统中早已经内置安装好了对应网卡的驱动程序,而并非不需驱动) 。

互联网层(网络层)

互联网层使用IP协议,它相当于OSI模型中的第3层网络层。IP协议基于IP地址转发分包数据

TCP/IP分层中的互联网层与传输层的功能通常由操作系统提供。尤其是路由器,它必须得实现通过互联网层转发分组数据包的功能。此外,连接互联网的所有主机跟路由器必须都实现IP的功能。其他连接互联网的网络设备(如网桥、中继器或集线器)就没必要一定实现IP或TCP的功能(有时为了监控和管理网桥、中继器、集线器等设备,也需要让它们具备IP、TCP的功能。) 。

IP(Internet Protocol)

网际协议,IP是跨越网络传送数据包,使整个互联网都能收到数据的协议。IP协议使数据能够发送到地球的另一端,这期间它使用IP地址作为主机的标识(连接IP网络的所有设备必须有自己唯一的识别号以便识别具体的设备,分组数据在IP地址的基础上被发送到对端) 。

IP还隐含着数据链路层的功能。通过IP,相互通信的主机之间不论经过怎样的底层数据链路都能够实现通信。

虽然IP也是分组交换的一种协议,但是它不具有重发机制。即使分组数据包未能到达对端主机也不会重发。因此,属于非可靠性传输协议。

ICMP(Internet Control Message Protocol)

网际控制报文协议,IP数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个发生异常的通知。ICMP就是为这一功能而制定的。它有时也被用来诊断网络的健康状况。

ARP(Address Resolution Protocol)

地址解析协议,从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协议。

传输层

TCP/IP的传输层有两个具有代表性的协议。该层的功能本身与OSI参考模型中的传输层类似。

传输层最主要的功能就是能够让应用程序之间实现通信。计算机内部,通常同一时间运行着多个程序。为此,必须分清是哪些程序与哪些程序在进行通信。识别这些应用程序的是端口号。

TCP

TCP是一种面向有连接的传输层协议。它可以保证两端通信主机之间的通信可达。TCP能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。此外,TCP还能够有效利用带宽,缓解网络拥堵。

然而,为了建立与断开连接,有时它需要至少7次的发包收包,导致网络流量的浪费。此外,为了提高网络的利用率,TCP协议中定义了各种各样复杂的规范,因此不利于视频会议(音频、视频的数据量既定)等场合使用。

UDP

UDP有别于TCP,它是一种面向无连接的传输层协议。UDP不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。

UDP常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域

应用层(会话层以上的分层 — 会话、表示、应用)

TCP/IP的分层中,将OSI参考模型中的会话层、表示层和应用层的功能都集中到了应用程序中实现。这些功能有时由一个单一的程序实现,有时也可能会由多个程序实现。因此,细看TCP/IP的应用程序功能会发现,它不仅实现OSI模型中应用层的内容,还要实现会话层与表示层的功能。

客户端可以随时发送请求给服务端。有时服务端可能会有处理异常 、超出负载等情况,这时客户端可以在等待片刻后重发一次请求。

WWW

WWW(中文叫万维网,是一种互联网上数据读取的规范。有时也叫做Web、WWW或W3。)可以说是互联网能够如此普及的一个重要原动力。用户在一种叫Web浏览器的软件上借助鼠标和键盘就可以轻轻松松地在网上自由地冲浪。也就是说轻按一下鼠标架设在远端服务器上的各种信息就会呈现到浏览器上。浏览器中既可以显示文字、图片、动画等信息,还能播放声音以及运行程序。

浏览器与服务端之间通信所用的协议是HTTP(HyperText TransferProtocol)。所传输数据的主要格式是HTML(HyperText MarkupLanguage)。WWW中的HTTP属于OSI应用层的协议,而HTML属于表示层的协议。

电子邮件(E-Mail)

电子邮件其实就是指在网络上发送信件。有了电子邮件,不管距离多远的人,只要连着互联网就可以相互发送邮件。发送电子邮件时用到的协议叫做SMTP(Simple Mail Tranfer Protocol)。

最初,人们只能发送文本格式的电子邮件。然而现在,电子邮件的格式由MIME(在互联网上广泛使用的、用来定义邮件数据格式一种规范)协议扩展以后,就可以发送声音、图像等各式各样的信息。甚至还可以修改邮件文字的大小、颜色 。这里提到的MIME属于OSI参考模型的第6层——表示层

文件传输(FTP)

文件传输是指将保存在其他计算机硬盘上的文件转移到本地的硬盘上,或将本地硬盘的文件传送到其他机器硬盘上的意思。

该过程使用的协议叫做FTP(File Transfer Prototol)。FTP很早就已经投入使用,传输过程中可以选择用二进制方式还是文本方式(用文本方式在Windows、MacOS或Unix等系统之间进行文件传输时,会自动修改换行符,这也属于表示层的功能) 。

在FTP中进行文件传输时会建立两个TCP连接,分别是发出传输请求时所要用到的控制连接与实际传输数据时所要用到的数据连接(这两种连接的控制管理属于会话层的功能) 。

远程登录(TELNET与SSH)

远程登录是指登录到远程的计算机上,使那台计算机上的程序得以运行的一种功能。TCP/IP网络中远程登录常用TELNET(TELetypewriter NETwork)和SSH(Secure SHell) 两种协议。其实还有很多其他可以实现远程登录的协议,如BSD UNIX系中rlogin的r命令协议以及XWindow System中的X协议。

网络管理(SNMP)

在TCP/IP中进行网络管理时,采用SNMP(Simple Network Management Protocol)协议。使用SNMP管理的主机、网桥、路由器等称作SNMP代理(Agent),而进行管理的那一段叫做管理器(Manager)。SNMP正是这个Manager与Agent所要用到的协议。

在SNMP的代理端,保存着网络接口的信息、通信数据量、异常数据量以及设备温度等信息。这些信息可以通过MIB(Management Information Base)访问。因此,在TCP/IP的网络管理中,SNMP属于应用协议,MIB属于表示层协议。

一个网络范围越大,结构越复杂,就越需要对其进行有效的管理。而SNMP可以让管理员及时检查网络拥堵情况,及早发现故障,也可以为以后扩大网络收集必要的信息。

TCP/IP通信举例

发送数据包

假设甲给乙发送电子邮件,内容为:“早上好”。而从TCP/IP通信上看,是从一台计算机A向另一台计算机B发送电子邮件。我们就通过这个例子来讲解一下TCP/IP通信的过程。

应用程序处理

启动应用程序新建邮件,将收件人邮箱填好,再由键盘输入邮件内容“早上好”,鼠标点击“发送”按钮就可以开始TCP/IP的通信了。

首先,应用程序中会进行编码处理,如UTF-8编码。这些编码相当于OSI的表示层功能。编码转化后,实际邮件不一定会马上被发送出去,因为有些邮件的软件有一次同时发送多个邮件的功能,也可能会有用户点击“收信”按钮以后才一并接收新邮件的功能。像这种何时建立通信连接何时发送数据的管理功能,从某种宽泛的意义上看属于OSI参考模型中会话层的功能。

应用在发送邮件的那一刻建立TCP连接,从而利用这个TCP连接发送数据。它的过程首先是将应用的数据发送给下一层的TCP,再做实际的转发处理。

TCP模块的处理

TCP根据应用的指示(这种关于连接的指示相当于OSI参考模型中的会话层) ,负责建立连接、发送数据以及断开连接。TCP提供将应用层发来的数据顺利发送至对端的可靠传输。

为了实现TCP的这一功能,需要在应用层数据的前端附加一个TCP首部。TCP首部中包括源端口号和目标端口号(用以识别发送主机跟接收主机上的应用)、序号(用以发送的包中哪部分是数据)以及校验和(Check Sum,用来检验数据的读取是否正常进行的方法,用以判断数据是否被损坏)。随后将附加了TCP首部的包再发送给IP。

IP模块的处理

IP将TCP传过来的TCP首部和TCP数据合起来当做自己的数据,并在TCP首部的前端在加上自己的IP首部。因此,IP数据包中IP首部后面紧跟着TCP首部,然后才是应用的数据首部和数据本身。IP首部中包含接收端IP地址以及发送端IP地址。紧随IP首部的还有用来判断其后面数据是TCP还是UDP的信息。

IP包生成后,参考路由控制表决定接受此IP包的路由或主机。随后,IP包将被发送给连接这些路由器或主机网络接口的驱动程序,以实现真正发送数据。

如果尚不知道接收端的MAC地址,可以利用ARP(Address Resolution Protocol)查找。只要知道了对端的MAC地址,就可以将MAC地址和IP地址交给以太网的驱动程序,实现数据传输。

网络接口(以太网驱动)的处理

从IP传过来的IP包,对于以太网驱动来说不过就是数据。给这数据附加上以太网首部并进行发送处理。以太网首部中包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太网数据的协议。根据上述信息产生的以太网数据包将通过物理层传输给接收端。发送处理中的FCS(Frame Check Sequence) 由硬件计算,添加到包的最后。设置FCS的目的是为了判断数据包是否由于噪声而被破坏。

经过数据链路的包

分组数据包(以下简称包)经过以太网的数据链路时的大致流程如下图所示。注意该图对各个包首部做了简化。

包流动时,从前往后依此被附加了以太网包首部、IP包首部、TCP包首部(或者UDP包首部)以及应用自己的包首部和数据。而包的最后则追加了以太网包尾(Ethernet Trailer )。

每个包首部中至少都会包含两个信息:一个是发送端和接收端地址,另一个是上一层的协议类型

经过每个协议分层时,都必须有识别包发送端和接收端的信息。以太网会用MAC地址,IP会用IP地址,TCP/UDP则会用端口号作为识别两端主机的地址。即使是在应用程序中,像电子邮件地址这样的信息也是一种地址标识。这些地址信息都在每个包经由各个分层时,附加到协议对应的包首部里边。

此外,每个分层的包首部中还包含一个识别位,它是用来标识上一层协议的种类信息。例如以太网的包首部中的以太网类型,IP中的协议类型以及TCP/UDP中两个端口的端口号等都起着识别协议类型的作用。就是在应用的首部信息中,有时也会包含一个用来识别其数据类型的标签。

数据包接收处理

包的接收流程是发送流程的逆序过程。

网络接口(以太网驱动)的处理

主机收到以太网包以后,首先从以太网的包首部找到MAC地址判断是否为发给自己的包。如果不是发给自己的包则丢弃数据(很多NIC产品可以设置为即使不是发给自己的包也不丢弃数据。这可以用于监控网络流量) 。

而如果接收到了恰好是发给自己的包,就查找以太网包首部中的类型域从而确定以太网协议所传送过来的数据类型。在这个例子中数据类型显然是IP包,因此再将数据传给处理IP的子程序,如果这时不是IP而是其他诸如ARP的协议,就把数据传给ARP处理。总之,如果以太网包首部的类型域包含了一个无法识别的协议类型,则丢弃数据。

IP模块的处理

IP模块收到IP包首部及后面的数据部分以后,也做类似的处理。如果判断得出包首部中的IP地址与自己的IP地址匹配,则可接收数据并从中查找上一层的协议。如果上一层是TCP就将IP包首部之后的部分传给TCP处理;如果是UDP则将IP包首部后面的部分传给UDP处理。对于有路由器的情况下,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送达的主机或路由器以后再转发数据。

TCP模块的处理

在TCP模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。最后检查端口号,确定具体的应用程序。

数据接收完毕后,接收端则发送一个“确认回执”给发送端。如果这个回执信息未能达到发送端,那么发送端会认为接收端没有接收到数据而一直反复发送。

数据被完整地接收以后,会传给由端口号识别的应用程序。

应用程序的处理

接收端应用程序会直接接收发送端发送的数据。通过解析数据可以获知邮件的收件人地址是乙的地址。如果主机B上没有乙的邮件信箱,那么主机B返回给发送端一个“无此收件地址”的报错信息。

但在这个例子中,主机B上恰好有乙的收件箱,所以主机B和收件人乙能够收到电子邮件的正文。邮件会被保存到本机的硬盘上。如果保存也能正常进行,那么接收端会返回一个“处理正常”的回执给发送端。反之,一旦出现磁盘满、邮件未能成功保存等问题,就会发送一个“处理异常”的回执给发送端。

由此,用户乙就可以利用主机B上的邮件客户端,接收并阅读由主机A上的用户甲所发送过来的电子邮件——“早上好”。

摘选整理自:图解TCP/IP(第5版)

附:知识点列举

  • TCP/IP协议包括传输控制协议网际协议

  • TCP/IP协议定义了如何对**传输的信息进行分组 **

  • TCP/IP协议包括有关路由选择的协议

  • TCP负责将信息拆分为数据包,并在数据包达到目的地后对其进行装配

  • IP负责为数据包选择路由以使将其传递到正确的目的地

  • IP、ICMP和IGMP都是网络层的协议

  • 地址解析协议 ARP/RARP 也属于网络层协议(网际协议)

  • TCP协议是可靠的服务,客户端与服务端经过三次握手后,才把数据传输过去

  • TCP、UDP 协议都要通过IP 协议来发送、接收数据

  • TCP 协议提供可靠的面向连接服务,UDP 协议提供简单的无连接服务

  • TCP是Internet传输层的协议,可以为应用层的不同协议提供服务

  • TCP是面向连接的协议,提供可靠、全双工的、面向字节流的端到端的服务

  • TCP每发送一个报文段,就对该报文段设置一次计时器

  • TCP/IP可用于多种操作系统

  • ICMP用于控制数据报传送中的差错情况。(网际控制报文协议 Internet Control Message Protocol)

  • RIP协议根据交换的路由信息动态生成路由表(路由信息协议 Routing Information Protocol)

  • FTP协议在客户端/服务器之间建立起两条连接(文件传输协议 File Transfer Protocol)

  • ARP 协议通过IP地址获得物理(MAC)地址(地址解析协议 Address Resolution Protocol)

  • RARP协议根据MAC地址获取IP(反向地址解析协议 Reverse Address Resolution Protocol)