x1184的小站
x1184的小站

TCP/IP协议族 – 概述

历史和背景

1983年1月1日,在因特网的前身(ARPA网)中通信方式换成新的定义,TCP/IP取代旧的网络控制协议(NCP,Network Control Protocol),从而成为今天的互联网的基石。最早的TCP/IP由文顿·瑟夫和罗伯特·卡恩两位开发,慢慢地通过竞争战胜其他一些网络协议的方案,比如国际标准化组织ISO的OSI模型。TCP/IP的蓬勃发展发生在1990年代中期。当时一些重要而可靠的工具的出世,例如页面描述语言HTML和浏览器Mosaic,促成了互联网应用的飞速发展。
TCP/IP成功的另一个因素在于对为数众多的低层协议的支持。这些低层协议对应OSI模型中的第一层(物理层)和第二层(数据链路层)。每层的所有协议几乎都有一半数量支持TCP/IP,例如:以太网(Ethernet)、令牌环(Token Ring)、光纤数据分布接口(FDDI)、点对点协议(PPP)、X.25、帧中继(Frame Relay)、ATM、Sonet、SDH等通信方法中都可以应用

正式介绍TCP/IP及相关概念科普

TCP/IP是一组用于实现网络互连的通信协议。Internet网络体系结构以TCP/IP为核心。基于TCP/IP的参考模型将协议分成四个层次,它们分别是:网络访问层、网际互联层(主机到主机)、传输层、和应用层。 互联网协议套件(英语:Internet Protocol Suite,缩写IPS)是一个网络通信模型,以及一整个网络传输协议家族,为网际网络的基础通信架构。它常被通称为TCP/IP协议族(英语:TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP

因为该协议家族的两个核心协议:TCP传输控制协议)和IP网际协议),为该家族中最早通过的标准。由于在网络通讯协议普遍采用分层的结构,当多个层次的协议共同工作时,类似计算机科学中的堆栈,因此又被称为TCP/IP协议栈(英语:TCP/IP Protocol Stack) 。这些协议最早发源于美国国防部(缩写为DoD)的ARPA网项目,因此也被称作DoD模型(DoD Model)。这个协议族由互联网工程任务组负责维护。

TCP/IP提供了点对点链接的机制,将数据应该如何封装、定址、路由、传输、以及在目的地如何接收,都加以标准化。它将软件通信过程抽象化为四个抽象层,采取协议堆栈的方式,分别实现出不同通信协议。协议族下的各种协议,依其功能不同,被分别归属到这四个层次结构之中,常被视为是简化的七层OSI模型

必须协议和可选协议

必须协议

所有的TCP/IP应用都必须实现IPICMP。对于一个路由器(router) 而言,有这两个协议就可以运作了,虽然从应用的角度来看,这样一个路由器 意义不大。实际的路由器一般还需要运行许多“推荐“使用的协议,以及一些其它的协议。

可选协议(常用)

  • 支撑万维网WWW的超文本传输协议HTTP,
  • 动态配置IP地址的DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),
  • 收邮件用的POP3 (Post Office Protocol,version 3,邮局协议) ,
  • 用于加密安全登陆用的SSH (Secure Shell,用于替代安全性差的TELNET)
  • 用于动态解析以太网硬件地址的ARP (Address Resolution Protocol,地址解析协议)。

TCP/IP参考模型(针对TCP/IP协议族的参考模型)

TCP/IP参考模型是一个抽象的分层模型,这个模型中,所有的TCP/IP系列网络协议都被归类到4个抽象的”层”中。每一抽象层创建在低一层提供的服务上,并且为高一层提供服务。 完成一些特定的任务需要众多的协议协同工作,这些协议分布在参考模型的不同层中的,因此有时称它们为一个协议栈

http://x1184.blog.quxing.org/wp-content/uploads/2019/10/IP协议栈之分层概览图.png
参考模型中的数据流动
http://x1184.blog.quxing.org/wp-content/uploads/2019/10/RFC1122中描述的不同层应用数据封装递减.png
RFC1122中描述的不同层应用数据封装递减

TCP/IP参考模型为TCP/IP协议栈订身制作。其中IP协议只关心如何使得数据能够跨越本地网络边界的问题,而不关心如何利用传输媒体,数据如何传输。整个TCP/IP协议栈则负责解决数据如何通过许许多多个点对点通路(一个点对点通路,也称为一”跳”, 1 hop)顺利传输,由此不同的网络成员能够在许多”跳”的基础上创建相互的数据通路。

https://ae01.alicdn.com/kf/Ub81d36c4fac94e91b9c41bc1127854a2b.png
网络体系简图
http://x1184.blog.quxing.org/wp-content/uploads/2019/10/简单概括2.png
传输时关于层的概念简图

提个问题:为何是五层协议的体系结构?

整个大的计算机网络体系结构中主要有两种(OSI七层网络体系结构或TCP/IP四层网络体系结构)
OSI七层协议体系结构概念清楚,理论完整,但复杂且不实用。TCP/IP体系结构不同,已经有非常广泛的应用,同时其是四层的体系结构,但实质上说,TCPIP最下层网络接口层(链路层)和OSI负责通信链路的部分在功能上没有太大区别,故学习时通常采取折中方式,采用一种五层协议的体系结构。这里注意要和标准的TCP/IP体系结构要区分。

各层功能细节详细概述

0、物理介质(物理层)

物理介质就是把电脑连接起来的物理手段,常见的有光纤、双绞线,以及无线电波,它决定了电信号(0和1)的传输方式,物理介质的不同决定了电信号的传输带宽、速率、传输距离以及抗干扰性等等。注意,物理介质并不在物理层协议之内而在物理层协议的下面。

TCP/IP协议栈分为四层,每一层都由特定的协议与对方进行通信,而协议之间的通信最终都要转化为 0 和 1 的电信号,通过物理介质进行传输才能到达对方的电脑,因此物理介质是网络通信的基石

当通过http发起一个请求时,应用层、传输层、网络层和链路层的相关协议依次对该请求进行包装并携带对应的首部,最终在链路层生成以太网数据包,以太网数据包通过物理介质传输给对方主机,对方接收到数据包以后,然后再一层一层采用对应的协议进行拆包,最后把应用层数据交给应用程序处理。在进程看来,对等层之间通信像是沿着最短的直线直接通信,但背后的实际过程是必须得一层层封包后一层层拆包的。

https://ae01.alicdn.com/kf/U89542e6411414890aacf7fd14060028bg.png
物理层传输说明

1、链路层

网络通信就是把有特定意义的数据通过物理介质传送给对方,单纯的发送 0 和 1 是没有意义的,要传输有意义的数据,就需要以字节为单位对 0 和 1 进行分组,并且要标识好每一组电信号的信息特征,然后按照分组的顺序依次发送。以太网规定一组电信号就是一个数据包,一个数据包被称为一帧,每一帧包括数据和必要的控制信息,制定这个规则的协议就是以太网协议(类似的还有802.2协议)。以太网协议通过对电信号进行分组并形成数据帧,然后通过物理介质把数据帧发送给接收方。

整个数据帧由首部、数据和尾部三部分组成,首部固定为14个字节,包含了目标MAC地址、源MAC地址和类型;数据最短为46个字节,最长为1500个字节(MTU最大传输单元),如果需要传输的数据很长,就必须分割成多个帧进行发送;尾部固定为4个字节(。CRC校验码),表示数据帧校验序列,用于确定数据包在传输过程中是否损坏。(数据链路层,不仅要纠错,还要改错)

以太网协议如何来识接收方的身份呢?

以太网规协议定,接入网络的设备都必须安装网络适配器,即网卡, 数据包必须是从一块网卡传送到另一块网卡。而网卡地址就是数据包的发送地址和接收地址,也就是帧首部所包含的MAC地址,MAC地址是每块网卡的身份标识,就如同我们身份证上的身份证号码,具有全球唯一性。MAC地址采用十六进制标识,共6个字节,前三个字节是厂商编号,后三个字节是网卡流水号,例如 4C-0F-6E-12-D2-19
有了MAC地址以后,以太网采用广播形式,把数据包发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取首部里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃这个包。(ARP协议内容)

所以链路层的主要工作就是对电信号进行分组并形成具有特定意义的数据帧,然后通过物理介质发送给接收方。

ARP协议(发送者如何知道接收者的MAC地址?)

ARP即地址解析协议,是根据IP地址获取MAC地址的一个网络层协议。其工作原理如下:

ARP首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包会在链路层进行再次包装,生成以太网数据包,最终由以太网广播给子网内的所有主机,每一台主机都会接收到这个数据包,并取出标头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃该数据包。ARP接收返回消息,以此确定目标机的MAC地址;与此同时,ARP还会将返回的MAC地址与对应的IP地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。cmd输入 arp -a 就可以查询本机缓存的ARP数据。

http://www.tp-link.com.cn/pages/imageuploadfolder/201071317453963.jpg

2、网络层

a.IP协议(发送者如何知道接收者和自己同属一个子网?)

通过前面的介绍我们知道,MAC地址只与厂商有关,与所处的网络无关,所以无法通过MAC地址来判断两台主机是否属于同一个子网。因此,网络层引入了IP协议,制定了一套新地址,使得我们能够区分两台主机是否同属一个网络,这套地址就是网络地址,也就是所谓的IP地址。

IP地址目前有两个版本,分别是IPv4IPv6,IPv4是一个32位的地址,常采用4个十进制数字表示。IP协议将这个32位的地址分为两部分,前面部分代表网络地址,后面部分表示该主机在局域网中的地址。由于各类地址的分法不尽相同,以C类地址192.168.24.1为例其中前24位就是网络地址,后8位就是主机地址。因此, 如果两个IP地址在同一个子网内,则网络地址一定相同。为了判断IP地址中的网络地址,IP协议还引入了子网掩码, IP地址和子网掩码通过按位与运算后就可以得到网络地址。

http://www.elecfans.com/uploads/allimg/171226/2755783-1G226163I1311.png
两种版本区别
https://images.weserv.nl/?url=https://img03.sogoucdn.com/app/a/100520146/6a29963b13e424d6f5a997a109f50fdd
IPv4和IPv6格式区别

由于发送者和接收者的IP地址是已知的(应用层的协议会传入), 因此我们只要通过子网掩码对两个IP地址进行AND运算后就能够判断双方是否在同一个子网了。

b.路由协议(如果接收者和自己不在同一个子网,数据包如何发给对方? )

通过ARP协议的工作原理可以发现,ARP的MAC寻址还是局限在同一个子网中。

因此网络层引入了路由协议,首先通过IP协议来判断两台主机是否在同一个子网中,如果在同一个子网,就通过ARP协议查询对应的MAC地址,然后以广播的形式向该子网内的主机发送数据包;如果不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由。网关是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标IP所在的子网中,然后再通过ARP获取目标机MAC,最终也是通过广播形式将数据包发送给接收方。

而完成这个路由协议的物理设备就是路由器,在错综复杂的网络世界里,路由器扮演者交通枢纽的角色,它会根据信道情况,选择并设定路由,以最佳路径来转发数据包。

https://ae01.alicdn.com/kf/Ude6bc9a8ed22498e9b7d4b4b53152f41b.jpg

c. IP数据包(数据报)

在网络层被包装的数据包就叫IP数据包IP数据包由首部和数据两部分组成,首部长度为20个字节,主要包含了目标IP地址和源IP地址,目标IP地址是网关路由的线索和依据;数据部分的最大长度为65515字节,理论上一个IP数据包的总长度可以达到65535个字节,而以太网数据包的最大长度是1500个字符,如果超过这个大小,就需要对IP数据包进行分割,分成多帧发送。

所以,网络层的主要工作是定义网络地址并依靠其通信,分组传输,逻辑编址(ABCDE类地址),判断是否同网段,相同子网内物理地址寻址,不同子网的数据包进行路由跳转。

3、传输层

链路层定义了主机的身份,即MAC地址, 而网络层定义了IP地址,明确了主机所在的网段,有了这两个地址,数据包就从可以从一个主机发送到另一台主机。但实际上数据包是从一个主机的某个应用程序发出,然后由对方主机的应用程序接收。而每台电脑都有可能同时运行着很多个应用程序,所以当数据包被发送到主机上以后,是无法确定哪个应用程序要接收这个包。而传输层任务就是负责两个主机中进程之间的通信

因此传输层引入了UDP协议来解决这个问题,为了给每个应用程序标识身份,UDP协议定义了端口,同一个主机上的每个应用程序都需要指定唯一的端口号,并且规定网络中传输的数据包必须加上端口信息。 这样,当数据包到达主机以后,就可以根据端口号找到对应的应用程序了。UDP定义的数据包就叫做UDP数据包。

UDP协议比较简单,实现容易,但它没有确认机制,数据包一旦发出,无法知道对方是否收到,因此可靠性较差,为了解决这个问题,提高网络可靠性,TCP协议就诞生了,TCP即传输控制协议,是一种面向连接的、可靠的、基于字节流的通信协议。简单来说TCP就是有确认机制的UDP协议,每发出一个数据包都要求确认,如果有一个数据包丢失,就收不到确认,发送方就必须重发这个数据包。

https://puep.qpic.cn/coral/Q3auHgzwzM4fgQ41VTF2rABHwdshL4kubvkbv9u7KhC7Miaaal3LUHg/0

为了保证传输的可靠性,TCP 协议在 UDP 基础之上建立了三次对话的确认机制(TCP三次握手),也就是说,在正式收发数据前,必须和对方建立可靠的连接。由于建立过程较为复杂,我们在这里做一个形象的描述:

主机A:我想发数据给你,可以么?

主机B:可以,你什么时候发?

主机A:我马上发,你接着!

https://i.loli.net/2020/01/03/dUHNxohpWycGq1m.jpg

经过三次对话之后,主机A才会向主机B发送正式数据,而UDP是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发过去了。所以 TCP 能够保证数据包在传输过程中不被丢失,但相比 UDP,TCP 实现过程复杂,消耗连接资源多,传输速度慢。

TCP 数据包和 UDP 一样,都是由首部和数据两部分组成,唯一不同的是,TCP 数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常 TCP 数据包的长度不会超过IP数据包的长度,以确保单个 TCP 数据包不必再分割。

总结一下,传输层的主要工作是端与端间连接,也会分割数据,TCP协议可以保证数据传输的可靠性。通过定义端口,标识应用程序身份,实现端口到端口的通信。

4、应用层

应用层协议的定义是应用进程间通信和交互的规则。

应用层的定义就是应用主机上各进程间的交互来完成特定网络应用,而交互就是一个约定应用层协议并依照协议解析的过程。

应用程序交互的数据单元称为报文。

理论上讲,有了以上三层协议的支持,数据已经可以从一个主机上的应用程序传输到另一台主机的应用程序了,但此时传过来的数据是字节流,不能很好的被程序识别,操作性差。因此,应用层定义了各种各样的。协议来规范数据格式,常见的有 HTTP、FTP、SMTP 等,HTTP 是一种比较常用的应用层协议,主要用于B/S架构之间的数据通信,其报文的部分参数意义为:

  • Resquest Headers 中,Accept 表示客户端期望接收的数据格式,而 ContentType 则表示客户端发送的数据格式;
  • 在 Response Headers 中,ContentType 表示服务端响应的数据格式,这里定义的格式,一般是和  Resquest Headers 中 Accept 定义的格式是一致的。
https://img.mukewang.com/climg/5d05ed8d0001b43119201080.jpg

有了这个规范以后,服务端收到请求以后,就能正确的解析客户端发来的数据,当请求处理完以后,再按照客户端要求的格式返回,客户端收到结果后,按照服务端返回的格式进行解析。

在传输层,应用程序最常用的是TCP或者UDP,并且服务器应用程序经常与一个公开的端口号相联系。服务器应用程序的端口由互联网号码分配局(IANA)正式地分配,但是现今一些新协议的开发者经常选择它们自己的端口号。由于在同一个系统上很少超过少数几个的服务器应用,端口冲突引起的问题很少。应用软件通常也允许用户强制性地指定端口号作为运行参数

链接外部的客户端程序通常使用系统分配的一个随机端口号。

一些特定的程序被认为运行在这个层上。它们提供服务直接支持用户应用。一旦从应用程序来的数据被编码成一个标准的应用层协议,它将被传送到IP栈的下一层。常见协议有:

运行在TCP协议上的协议

  • HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。
  • HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。
  • FTP(File Transfer Protocol,文件传输协议),由名知义,用于文件传输。
  • POP3(Post Office Protocol, version 3,邮局协议),收邮件用。
  • SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件。
  • TELNET(Teletype over the Network,网络电传),通过一个终端(terminal)登陆到网络。
  • SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用

运行在UDP协议上的协议:

  • BOOTP(Boot Protocol,启动协议),应用于无盘设备。
  • NTP(Network Time Protocol,网络时间协议),用于网络同步。
  • DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。
  • 其他:
  • DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作(运行在TCPUDP协议上)。
  • ECHO(Echo Protocol,回绕协议),用于查错及测量应答时间(运行在TCPUDP协议上)。
  • SNMP(Simple Network Management Protocol,简单网络管理协议),用于网络信息的收集和网络管理。
  • ARP(Address Resolution Protocol,地址解析协议),用于动态解析以太网硬件的地址。

链路层补充

链路层并不经常这样简单。它也可能是一个虚拟专有网络(VPN)或者隧道,在这里从网络层来的包使用隧道协议和其他(或者同样的)协议组发送而不是发送到实体的接口上。VPN和信道通常预先建好,并且它们有一些直接发送到实体接口所没有的特殊特点(例如,它可以加密经过它的数据)。由于现在链路“层”是一个完整的网络,这种协议组的递归使用可能引起混淆。但是它是一个实现常见复杂功能的一个优秀方法。(尽管需要注意预防一个已经封装并且经隧道发送下去的数据包进行再次地封装和发送)。

引用

赞赏
欢迎留言交流讨论,留言必回。

admin

文章作者

一个平凡的追梦人

发表评论

textsms
account_circle
email

x1184的小站

TCP/IP协议族 – 概述
TCP/IP协议族概述,从发展背景到理清概念,再谈每层功能细节。
扫描二维码继续阅读
2019-10-24