TCP/IP协议族
互联网协议套件（，縮寫IPS）是网络通訊模型，以及整個网络传输协议家族，為網際网络的基礎通訊架構。它常通稱為TCP/IP协议族（，或TCP/IP Protocols），简称TCP/IP。因為该協定家族的兩個核心協定：TCP（传输控制协议）和IP（网际协议），為该家族中最早通過的標準。由於在網絡通讯协议普遍采用分层的结构，当多个层次的协议共同工作时，类似计算机科学中的堆栈，因此又称为TCP/IP协议栈（） 。这些协议最早发源于美国国防部（縮寫為DoD）的ARPA网项目，因此也稱作DoD模型（DoD Model）。這個協定套組由互联网工程任务组負責維護。
TCP/IP提供了點對點連結的機制，將資料應該如何封裝、定址、傳輸、路由以及在目的地如何接收，都加以標準化。它將軟體通信過程抽象化為四個抽象層，採取協定堆疊的方式，分別實作出不同通信協定。協定套組下的各種協定，依其功能不同，分別歸屬到這四個階層之中，常視為是簡化的七層OSI模型。
1983年1月1日，在因特网的前身（ARPA网）中通訊方式換成新的定義，TCP/IP取代旧的网络控制协议（NCP，Network Control Protocol），从而成为今天的互联网的基石。最早的TCP/IP由文顿·瑟夫和罗伯特·卡恩两位开发，慢慢地通过竞争战胜其他一些网络协议的方案，比如国际标准化组织ISO的OSI模型。TCP/IP的蓬勃发展发生在1990年代中期。当时一些重要而可靠的工具的出世，例如页面描述语言HTML和浏览器Mosaic，促成了互联网应用的飞速发展。 随着互联网的发展，目前流行的IPv4协议（网际协议版本四）已经接近它的功能上限。IPv4最致命的两个缺陷在于： TCP/IP成功的另一个因素在於对为数众多的低层协议的支持。这些低层协议对应OSI模型中的第一层（物理层）和第二层（数据链路层）。每层的所有协议几乎都有一半数量支持TCP/IP，例如：以太网（Ethernet）、令牌环（Token Ring）、光纤数据分布接口（FDDI）、点对点协议（PPP）、X.25、帧中继（Frame Relay）、ATM、Sonet、SDH等通訊方法中都可以應用。
最初想到让不同电脑之间实现连接的，是美国加州大学洛杉矶分校网络工作小组的斯蒂芬·克罗克（Stephen D. Crocker）。1970年，克罗克及其小组着手制定最初的主机对主机通信协议，它称为网络控制协议（Network Control Protocol，缩写NCP）。该协议用于阿帕网，并在局部网络条件下运行稳定，但随着阿帕网用户的增多，NCP逐渐暴露出两大缺陷：
在构建阿帕网先驱之后，DARPA开始其他数据传输技术的研究。NCP诞生后两年，1972年，罗伯特·卡恩（Robert E. Kahn）受僱於DARPA的信息技术处理办公室，在那里他研究卫星数据包网络和地面无线数据包网络，并且意识到能够在它们之间沟通的价值。在1973年春天，已有的ARPANET网络控制程序（NCP）协议的开发者文顿·瑟夫（Vinton Cerf）加入到卡恩为ARPANET设计下一代协议而开发开放互连模型的工作中。到了1973年夏天，卡恩和瑟夫很快开发出基本的改进形式，其中的网络协议之间的差异通过使用公用互联网协议而隐藏起来，且可靠性由主机保证而不是ARPANET那样由网络保证。瑟夫称赞了Hubert Zimmerman和Louis Pouzin（CYCLADES网络的设计者）在这个设计上发挥重要影响。
由于网络的作用减少到最小的程度，更有可能将任何网络连接到一起，而不用管它们不同的特点，这样能解决卡恩最初的问题。流行的说法提到瑟夫和卡恩工作的最终产品TCP/IP将在运行“两个罐子和一根弦”上，实际上它已经用在信鸽上。一个称为网关（后来改为路由器以免与网关混淆）的计算机为每个网络提供一个接口并且在它们之间来回传输数据包。这个设计思想更细的形式由瑟夫在斯坦福的网络研究组的1973年–1974年期间开发出来。处于同一时期诞生PARC通用包协议组的施乐PARC早期网络研究工作也有着重要的技术影响；人们在两者之间摇摆不定。DARPA于是与BBN、斯坦福和伦敦大学签署协议开发不同硬件平台上协议的运行版本。有四个版本开发出来——TCP v1、TCP v2、在1978年春天分成TCP v3和IP v3的版本，后来就是稳定的TCP/IP v4——目前因特网仍然使用的标准协议。
1975年，两个网络之间的TCP/IP通信在斯坦福和伦敦大学（UCL）之间进行测试。1977年11月，三个网络之间的TCP/IP测试在美国、英国和挪威之间进行。在1978年到1983年间，其他一些TCP/IP原型在多个研究中心之间开发出来。ARPANET完全转换到TCP/IP在1983年1月1日发生。1984年，美国国防部将TCP/IP作为所有计算机网络的标准。1985年，因特网架构理事会举行爲期三天有250家厂商代表参加的关于计算产业使用TCP/IP的工作会议，帮助协议的推广并且引领它日渐增长的商业应用。
2005年9月9日卡恩和瑟夫由于对美国文化的卓越贡献獲总统自由勋章。 整個通信網絡的任務，可以劃分成不同的功能區塊，即所謂的層級（layer）。用於互聯網的協議可以比照TCP/IP參考模型進行分類。TCP/IP協議棧起始於第三層協議IP（網際協議）。所有這些協議都在相應的RFC文檔中討論及標準化。重要的協議在相應的RFC文檔中均標記狀態：“必須”（required），“推薦”（recommended），“可選”（selective）。其他的協議還可能有“試驗”（experimental）或“歷史”（historic）的狀態。”
所有的TCP/IP应用都必须实现IP和ICMP。对于一个路由器（router）而言，有这两个协议就可以运作，虽然从应用的角度来看，这样一个路由器意义不大。实际的路由器一般还需要运行许多「推荐」使用的协议，以及一些其他的协议。 几乎所有连接到互联网上的電腦上都存在的IPv4协议出生在1981年，今天的版本和最早的版本并没有多少改变。升级版IPv6的工作始于1995年，目的在于取代IPv4。ICMP协议主要用于收集有关网络的信息查找错误等工作。
TCP/IP参考模型是一个抽象的分层模型，这个模型中，所有的[[TCP/IP]]系列[[网络协议]]都归类到4个抽象的「层」中。每一抽象层建立在低一层提供的服务上，并且为高一层提供服务。 完成一些特定的任务需要众多的协议协同工作，这些协议分布在参考模型的不同层中的，因此有时称它们为一个"协议栈"。 TCP/IP参考模型为[[TCP/IP]]协议栈订身制作。其中IP协议只关心如何使得数据能够跨越本地网络边界的问题，而不关心如何利用传输媒体，数据如何传输。整个[[TCP/IP]]协议栈则负责解决数据如何通过许许多多个点对点通路（一个点对点通路，也称为一「跳」, 1 hop）顺利传输，由此不同的网络成员能够在许多「跳」的基础上建立相互的数据通路。 如想分析更普遍的网络通信问题，ISO的[[OSI模型]]也能起更好的帮助作用。 因特网协议族是一组实现支持[[因特网]]和大多数商业网络运行的[[协议栈]]的[[网络传输协议]]。它有时也称为TCP/IP协议组，这个名称来源于其中两个最重要的协议：[[传输控制协议]]（[[传输控制协议|TCP]]）和[[网际协议|因特网协议]]（[[网际协议|IP]]），它们也是最先定义的两个协议。 同许多其他协议一样[[网络传输协议]]也可以看作一个多层组合，每层解决数据传输中的一组问题并且向使用这些低层服务的高层提供定义好的服务。高层逻辑上与用户更为接近，所处理[[数据]]更为抽象，它们依赖于低层将数据转换成最终能够进行實體控制的形式。 [[网络传输协议]]能够大致匹配到一些厂商喜欢使用的固定7层的[[OSI模型]]。然而这些层并非都能够很好地与基于IP的网络对应（根据应用的设计和支持网络的不同它们确实是涉及到不同的层）并且一些人认为试图将[[因特网协议组]]对应到OSI会带来混淆而不是有所帮助。 人们已经进行一些讨论关于如何将[[#TCP/IP参考模型|TCP/IP参考模型]]映射到[[OSI模型]]。由于[[TCP/IP]]和[[OSI模型|OSI]]模型组不能精确地匹配，还没有一个完全正确的答案。 另外，[[OSI模型]]下层还不具备能够真正占据真正层的位置的能力；在传输层和网络层之间还需要另外一个层（网络互连层）。特定网络类型专用的一些协议应该运行在网络层上，但是却运行在基本的硬件帧交换上。类似协议的例子有[[地址解析协议|ARP]]和[[生成树协议|STP]]（用来保持冗余[[Network bridge|网桥]]的空闲状态直到真正需要它们）。然而，它们是本地协议并且在网络互连功能下面运行。不可否认，将两个组（更不用说它们只是运行在如[[互联网控制消息协议|ICMP]]等不同的互连网络协议上的逻辑上的网络层的一部分）整个放在同一层会引起混淆，但是OSI模型还没有复杂到能够做更好的工作。 下面的图表试图显示不同的TCP/IP和其他的协议在最初[[OSI模型]]中的位置：
通常人们认为OSI模型的最上面三层（应用层、表示层和会话层）在TCP/IP组中是一个应用层。由于TCP/IP有一个相对较弱的会话层，由TCP和RTP下的打开和关闭连接组成，并且在TCP和UDP下的各种应用提供不同的端口号，这些功能能够由单个的应用程序（或者那些应用程序所使用的库）增加。与此相似的是，IP是按照将它下面的网络当作一个黑盒子的思想设计的，这样在讨论TCP/IP的时候就可以把它当作一个独立的层。 该层包括所有和应用程序协同工作，利用基础网络交换应用程序专用的数据的协议。 [[应用层]]是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。这个层的处理过程是应用特有的；数据从网络相关的程序以这种应用内部使用的格式进行传送，然后编码成标准协议的格式。
一些特定的程序視爲在此層運行。它们提供服务直接支持用户应用。这些程序和它们对应的协议包括[[超文本传输协议|HTTP]]（万维网服务）、[[文件传输协议|FTP]]（文件传输）、[[简单邮件传输协议|SMTP]]（电子邮件）、[[Secure_Shell|SSH]]（安全远程登录）、[[域名系统|DNS]]（名称⇔IP地址寻找）以及许多其他协议。
一旦从应用程序来的数据编码成一个标准的应用层协议，它将传送到IP栈的下一层。
在传输层，应用程序最常用的是TCP或者UDP，并且服务器应用程序经常与一个[[TCP/UDP端口列表|公开的端口号]]相联系。服务器应用程序的端口由[[互联网号码分配局]]（IANA）正式地分配，但是现今一些新协议的开发者经常选择它们自己的端口号。由于在同一个系统上很少超过少数几个的服务器应用，端口冲突引起的问题很少。应用软件通常也允许用户强制性地指定端口号作为运行[[参数]]。
连结外部的客户端程序通常使用系统分配的一个随机端口号。监听一个端口并且通过服务器将那个端口发送到应用的另外一个副本以建立对等连结（如[[IRC]]上的[[dcc]]文件传输）的应用也可以使用一个随机端口，但是应用程序通常允许定义一个特定的端口范围的规范以允许端口能够通过实现[[网络地址转换]]（NAT）的路由器映射到内部。
每一个应用层（[[#TCP/IP参考模型|TCP/IP参考模型]]的最高层）协议一般都会使用到两个传输层协议之一： 面向连接的[[传输控制协议|TCP传输控制协议]]和无连接的包传输的[[用户数据报协议|UDP用户数据报文协议]]。 常用的应用层协议有：
[[传输层]]（transport layer）的协议，能够解决诸如端到端可靠性（“数据是否已经到达目的地？”）和保证数据按照正确的顺序到达这样的问题。在TCP/IP协议组中，传输协议也包括所给数据应该送给哪个应用程序。 在TCP/IP协议组中技术上位于这个层的动态路由协议通常认为是网络层的一部分；一个例子就是[[OSPF]]（IP协议89）。 [[传输控制协议|TCP]]（IP协议6）是一个“可靠的”、[[連接導向式通訊|面向连结]]的传输机制，它提供一种可靠的字节流保证数据完整、无损并且按顺序到达。TCP尽量连续不断地测试网络的负载并且控制发送数据的速度以避免网络过载。另外，TCP试图将数据按照规定的顺序发送。这是它与UDP不同之处，这在实时数据流或者路由高[[网络层]]丢失率应用的时候可能成为一个缺陷。 较新的[[流控制传输协议|SCTP]]也是一个“可靠的”、[[連接導向式通訊|面向连结]]的传输机制。它是面向记录而不是面向字节的，它在一个单独的连结上提供通过多路复用提供的多个子流。它也提供多路自寻址支持，其中连结终端能够以多个IP地址表示（代表多个實體接口），这样的话即使其中一个连接失败了也不中断。它最初是为电话应用开发的（在[[网际协议|IP]]上传输[[七号信令系统|SS7]]），但是也可以用于其他的应用。 [[用户数据报协议|UDP]]（IP协议号17）是一个[[無連接式通訊|无连结]]的数据报协议。它是一个“尽力传递”（best effort）或者说“不可靠”协议——不是因为它特别不可靠，而是因为它不检查数据包是否已经到达目的地，并且不保证它们按顺序到达。如果一个应用程序需要这些特性，那它必须自行检测和判断，或者使用[[传输控制协议|TCP]]协议。 UDP的典型性应用是如流媒体（音频和视频等）这样按时到达比可靠性更重要的应用，或者如[[DNS]]查找这样的简单查询／响应应用，如果建立可靠的连结所作的额外工作将是不成比例地大。 [[DCCP]]目前正由IETF开发。它提供TCP流动控制语义，但对于用户来说保留UDP的数据报服务模型。 TCP和UDP都用来支持一些高层的应用。任何给定网络地址的应用通过它们的TCP或者UDP"[[TCP/UDP端口列表|端口号]]"区分。根据惯例使一些"大众所知的端口"与特定的应用相联系。 [[实时传输协议|RTP]]是为如音频和视频流这样的实时数据设计的数据报协议。RTP是使用UDP包格式作为基础的会话层，然而据说它位于因特网协议栈的传输层。
"TCP/IP协议族中的网络互连层（internet layer）在OSI模型中叫做网络层（network layer）。"
正如最初所定义的，[[网络层]]解决在一个单一网络上传输数据包的问题。类似的协议有[[X.25]]和[[ARPANET]]的[[Host/IMP Protocol]]。 随着[[Internet|因特网]]思想的出现，在这个层上添加附加的功能，也就是将数据从源[[computer network|网络]]传输到目的网络。这就牵涉到在网络组成的网上选择路径将数据包传输，也就是[[因特网]]。 在因特网协议组中，[[网际协议|IP]]完成数据从源发送到目的的基本任务。IP能够承载多种不同的高层协议的数据；这些协议使用一个唯一的"IP协议号"进行标识。ICMP和IGMP分别是1和2。 一些IP承载的协议，如[[互联网控制消息协议|ICMP]]（用来发送关于IP发送的诊断信息）和[[因特网组管理协议|IGMP]]（用来管理[[多播]]数据），它们位于IP层之上但是完成网络层的功能，这表明因特网和OSI模型之间的不兼容性。所有的路由协议，如[[Border Gateway Protocol|BGP]]、[[OSPF]]、和[[路由信息协议|RIP]]实际上也是网络层的一部分，尽管它们似乎应该属于更高的协议栈。
网络存取(连结)层实际上并不是因特网协议组中的一部分，但是它是数据包从一个设备的网络层传输到另外一个设备的网络层的方法。这个过程能够在[[网卡]]的[[软件]][[驱动程序]]中控制，也可以在[[韧体]]或者专用[[芯片]]中控制。这将完成如添加[[报头]]准备发送、通过[[physical layer|實體]][[transmission medium|媒介]]实际发送这样一些[[data link layer|数据链路]]功能。另一端，链路层将完成数据帧接收、去除报头并且将接收到的包传到网络层。 然而，链路层并不经常这样简单。它也可能是一个[[虚拟专有网络]]（VPN）或者隧道，在这里从网络层来的包使用[[隧道协议]]和其他（或者同样的）协议组发送而不是发送到實體的接口上。VPN和通道通常预先建好，并且它们有一些直接发送到實體接口所没有的特殊特点（例如，它可以加密经过它的数据）。由于现在链路“层”是一个完整的网络，这种协议组的[[递归 (计算机科学)|递归]]使用可能引起混淆。但是它是一个实现常见复杂功能的一个优秀方法。（尽管需要注意预防一个已经封装并且经隧道发送下去的数据包进行再次地封装和发送）。
在長期的發展過程中，IP逐漸取代其他網路。這裏是簡單的解釋。IP传输通用数据。数据能够用于任何目的，并且能够很轻易地取代以前由专有数据网络传输的数据。下面是普通的过程：
如今，大多数商业操作系统包括TCP/IP栈并且缺省安装它们，对于大多数用户来说，没有必要去探求它们如何实现。TCP/IP包含在所有的商业Unix和Linux发布包中，同样也包含在Mac OS X、Windows系统和Windows Server中。 [[Category:TCP/IP]]