前言:年底将至突然忙碌了起来,连续两个通宵,还真是有些吃不消,闲下来时候决定写几篇关于TCP/IP的文章,查阅、参考了一些资料,进行一下知识梳理与总结。关于TCP/IP我将分几个篇章介绍相关内容,由于TCP/IP协议的知识体系非常庞大,我也只能选其中几个点,简单概括一下其中的主要内容(如遇大神指点,荣幸之至),此文为第一篇。
一、从TCP/IP协议的制定说起
1. 什么是计算机中的协议?什么是TCP/IP协议?
计算机网络中的协议就好比A、B、C、三人说话,A:只会说中文,B:只会说英文,C:既会中文,也会英文。
- 将汉语和英语比作“协议”
- 将聊天比作“通信”
- 将聊天的内容比作“数据”
A如果与B聊天,由于所持“协议”不同,无法“通信”;A与C聊天,由于所持“协议”相同,可以正常“通信”,也可以理解聊天内容,即所谓的“数据”。也就是说,为了使A与B能够正常沟通,必须约定或者选择一种语言,一种双方都能理解的规则,那么,这种双方都能理解的规则,其实就是“协议”。
那么什么是TCP/IP协议呢?
从字面上可能会认为TCP/IP是指TCP与IP两种协议,而实际上,在很多情况下,它是指利用IP进行通信时所必须用到的协议群的统称。具体来说,IP或者ICMP、TCP或UDP、TELNET或者FTP,及HTTP都属于TCP/IP协议,TCP/IP 一词泛指这些协议。
2. OSI(Open System Interconnection:开放式通信系统互联参考模型)
为了解决类似A于B无法沟通的问题,ISO(International Organization for Standardization:国际标准化组织)制定了一个国际标准OSI(Open System Interconnection:开放式通信系统互联参考模型),对通信系统机型标准化,即是我们通常熟悉的:7层模型,由高到低层分别为:
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
现在,OSI所定义的协议虽然没有得到普及,但是在OSI设计之初作为其指导方针的OSI参考模型却常被用于网络协议的制定当中。为什么说OSI所定义的协议没有得到普及呢?OSI参考模型的建议是比较理想化的,他希望实现从第一层到第七层的所有模块,并将它们组合起来实现网络通信。因为他的制定与设想是由理想化的成分在的,与我们所要说的TCP/IP协议的制定产生方式是不同的,由此我们来说明一下TCP/IP协议的制定过程。
3. TCP/IP协议的制定
- IETF,国际互联网工程任务组(The Internet Engineering Task Force,简称 IETF)是一个公开性质的大型民间国际团体,汇集了与互联网架构和互联网顺利运作相关的网络设计者、运营者、投资人和研究人员,并欢迎所有对此行业感兴趣的人士参与。
- IESG :互联网工程指导小组 IESG负责IETF活动和标准制定程序的技术管理工作,核准或纠正IETF各工作组的研究成果,有对工作组的设立终结权,确保非工作组草案在成为请求注解文件(RFC)时的准确性。并根据ISOC理事会批准的规定和程序对标准的制定过程进行管理。 IESG特成立了AgentX工作组。目标是为snmp代理定义可以遵循的标准技术。该技术规范必须允许独立发展的子代理能和运行在因特网设备的主代理通信。
一个协议的标准化一定要经过IETF讨论。IETF虽然每年只组织3次会议,但是日常都会通过邮件组的形式进行讨论,并且该邮件组不限制订阅。
TCP/IP协议的标准化流程大致分为几个阶段:首先是互联网草案阶段;其次,如果认为可以进行标准化,就计入RFC(Request For Comments,是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件。)进入提议标准阶段;第三,是草案标准阶段,最后,才进入真正的标准阶段。每一步都是基于一些文档内容通过邮件等方式进行讨论而成。
互联网草案的有效期为6个月,也就是说只要进入讨论流程,就必须在6个月内将所要论的结果反映到草案,否则将以长时间无任务进展为由自动消除。在这个信息泛滥的时代,TCP/IP草案也是漫天横飞,因此,去伪存真非常重要。
经过充分讨论没如果得到IESG批准,将被编入RFC文档。如果在实际应用当中遇到问题,则可以在成为草案标准前进行修订。
要从草案标准达到真正的标准,还需要更多的设备实现并应用这个特定的协议,如果所有参与该协议制定的人都觉得它“实用性强,没什么问题”,并得到IESG的最终批准,那么这个草案标准就可以成为真正的标准。
说到这里大家应该明白了,标准化的过程是漫长的,有风险的。如果未在互联网上被广泛使用,就无法最终成为一个提案标准。TCP/IP的标准化过程与一般的标准化过程不同。它不是由标准化组织制定为标准后才投入使用,而是到其成为标准的时候,已经被较为充分的实验并得较广的普及。因此,TCP/IP标准化流程的特点就是:开放性、注重实用性。
二、TCP/IP协议分层模型
1. TCP/IP分层
TCP/IP诞生以来的各种协议其实也可以对应到OSI参考模型中,如果了解了这些协议分属于OSI的哪一层,就能对该协议的目的有一个初步的认识。实际中的TCP/IP分层与OSI分层是有所区别的,TCP/IP分层为:
- 应用层
- 传输层
- 网络层
- 数据链路层
- 物理层
TCP/IP模型中缺少了表示层和会话层,但是其实这两个在OSI中的分层功能被包含在了TCP/IP模型中的应用层,就是说TCP/IP中的应用层 相当于OSI中的7、6、5这三层。到这里大家应该明白了OSI的中文译文:“开放式通信系统互联参考模型”的意思了吧,GET到重点了么?参考模型,并不是实际模型。
2.各分层的简单介绍(后续博文将具体介绍)
由于OSI参考模型的分层比较清晰,所以在介绍各个分层时,将以OSI参考模型为基准进行介绍。OSI每个分层功独立使用,即使系统中某些分层发生变化,也不会波及整个系统,因此通过分层能够细分通信功能,可以构造一个扩展性和灵活性都较强的系统,更易于单独实现每个分层的协议,并界定各个分层的具体职责和功能。
应用层
应用层协议为应用程序之间的通信提供规则,为确保通信畅通,源主机和目的主机上所实现的应用层协议必须一致。就好比上面我讲到的A与B通话的故事,两人必须使用互相能听懂的语言,规则,约定,听到对方的话才可以明白对方索要表达的内容。HTTP协议、远程登录协议、文件传输协议(FTP)、SMTP(Simple Mail Transfer Protocol:简单邮件传输协议)等协议就位于这一层。表示层
作为发送端:将应用处理的信息转换为适合网络传输的格式,或者作为接收端:将来自下层的数据转换为上层能够处理的格式,因此它主要负责数据格式的转换。由于现实的网络环境中,连接到网络中的计算机不同,具有差异性,那么将数据从“本计算机特定的数据格式”转换为“网络通用标准数据格式”后再发送出去,以便接收端的计算机把“网络通用标准数据格式”转换为“本计算机特定的数据格式”,最实际的例子就是,我们有时候会发现收到的邮件是乱码,就是因为编码格式的不同。会话层
我们知道,传输层的主要功能功能就是建立连接,数据传输,那么什么时候建立连接,什么时候关闭连接呢?这就是会话层的主要功能,就是何时建立通信连接何时发送数据,何时断开连接的管理功能。传输层
这一层主要的功能就是让应用程序之间实现通信。计算机内部,通常在同一时间运行多个程序,为此必须分清是哪些程序与哪些程序之间通信,不同的传输层的协议也会有区别,例如:TCP协议 是一种面向有连接的传输层协议,具有保证消息传输顺序,消息重发,有效利用网络带宽,缓解网络拥堵等功能。UDP则是一种无连接的传输层协议,多用于多播、广播通信及视频通信等多媒体领域。网络层
网络层的主要作用是将数据从发送端发送至接收端,根据目标地址,在众多路由中选择一条路径发送数据,IP协议就位于这一层。发送数据包时用到的地址就是IP地址,仅仅有IP地址是不足以实现数据发送的,在数据发送过程中还需要路由信息,路由信息会指明数据发送方向,保存这种信息的就是路由控制表,实现IP通信的主机和路由器必须持有这样的一张表,在这个表格的基础上才得以进行数据的发送。数据链路层
通信的数据传输实际上是通过物理传输介质实现的,数据链路层的作用就是在这些通过传输介质互联的设备之间进行数据处理,数据链路层的协议定义了通过通信媒介互联的设备之间传输的规范,数据链路也可以被数位网路传输中的最小单位。(先理解下这些书本定义,稍后我再做个比喻,便于加深理解)。物理层
负责将上层的0、1比特流与电压的高低、光的闪灭之间的转换。
3.各分层之间的关系
- 网络层与传输层
在不同的网络体系下,网络层有时是不能保证数据的可达性的,例如在IP协议中,就不能保证数据一定会发送到对端地址。因此,数据传送过程中出现的丢失、顺序混乱等问题的可能性会大大增加,像这样没有可靠性传出要求的网络层中,可以由传输层负责提供可靠传输的功能,TCP/IP中,网络层与传输层相互协议以确保数据包能够传送到网络中的任意位置,实现数据的可靠传输。 - 网络层与数据链路层
网络层与数据链路层都是基于目标地址将数据发送给接收端的,但是网络层负责将整个数据发送给最终目标地址,而数据链路层则只负责发送一个分段内的数据。
做个比喻:比如有一个人要去很远的地方旅游,并且计划先后乘坐飞机、火车、公交车到达目的地。为此,他决定先去旅行社购买机票和火车票,旅行社不仅为他预定好旅途中的机票和火车票,还为他制定了一个详细的行程表,详细到了几点几分需要乘坐飞机,几点几分需要乘坐火车,当然,机票和火车票只在一个特定的路段内有效,你不可能拿着北京飞往香港的机票去做火车,对吧?每张票只能够在某个特定的区间内使用,这个区间就如同网络上的数据链路,区间内的起始点和目的地点就是一个数据链路的源地址和目标地址,而全程的行程表的作用就相当于路由表,就相当于网络层。只有行程表而没有车票,是无法到达目的地的,反之,除了车票以外什么都没有,也是无法到达目标地址的,因为你不知道该做什么车,也不知道在哪里换乘,在哪里下车,没有人给你规划路线嘛!因此,只有两者互相协作,既有某个区间的车票,又有整个行程表,才可以到达目的地,类似的,数据链路层与网络层的关系就是这样了。
3.数据是怎样在各分层中传输的
在每个分层中,都会对所发送的数据添加一个首部,首部包含了该层的必要信息,如发送端地址,目标地址等等,通常,为协议提供的信息为首部,所要发送的内容为数据,在下层看上层的数据包,整体都是本层的数据部分。
经过应用层时候,数据被添加了一个HTTP请求首部,在经过传输层时候,上层数据又被添加了一个TCP首部,在经过网络层时,被添加了一个IP首部,在经过数据链路层时,被添加了一个以太网首部,最终经由物理层进行传输到达目标地址,目标主机 会由下层开始到上层,逐步拆分数据的首部,和数据体,获取首部必要信息,将数据交给上层处理,达到应用层时,就看到了原始数据。
关于数据是怎样在各分层中传输的,有两篇大神前辈的文章写的很详细,也便于理解,我也转载了过来,附上传送门:
三、TCP/IP协议分层之 物理层与数据链路层
1.物理层
我们知道数据的传输最终是要通过物理介质来进行传输的,这些介质包括双绞线电缆、同轴电缆、光纤、电波及红外线等介质。此外,各个设备之间有时也会通过交换机、网桥、中继器等中转数据。实际上,各个设备之间在数据传输时,数据链路层和物理层都是必不可少的,物理层通过把上层的比特流(0、1的二进制流)转换为电压的高低、灯光的闪灭等物理信号,将数据传输出去。而接收端收到这些物理的信号以后再将这些电压的高低、灯光的闪灭恢复为比特流。因此,物理层的规范中包括比特流转换规则、缆线结构和质量以及接口形状等。
TCP/IP中对于OSI参考模型的数据链路层及以下(物理层)未作出定义,而物理层对于程序员来说,我觉得,简单了解即可,所以并不详细介绍,大家感兴趣的可以自行查阅。
2.数据链路层
为了了解数据链路层,我们需要知道几个概念:
-
以太网:
在众多数据链路中最为著名、使用最广泛的莫过于以太网,它规范简单,易于(NIC)网卡及驱动程序的实现,因此在LAN(Local Area Network,局域网)普及初期,以太网网卡相对其他网卡,价格低廉,同时也促进了以太网自身的发展和普及。
摘抄一段百度定义:以太网(Ethernet)指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带局域网规范,是当今现有局域网采用的最通用的通信协议标准。以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以10M/S的速率运行在多种类型的电缆上。以太网与IEEE802.3系列标准相类似。
包括标准的以太网(10Mbit/s)、快速以太网(100Mbit/s)和10G(10Gbit/s)以太网。它们都符合IEEE802.3。
好吧,说人话!!通俗的讲,就是实现LAN(局域网)的一种技术规范!
-
MAC地址:
MAC地址(MAC Address)就是网卡地址,任何一个网卡的MAC地址都是唯一的,在全世界都不会重复(其实也有例外情况,有兴趣的可以自己查查,在这里不做详细介绍,只是了解)。
MAC地址总长48比特,前24位标识厂商识别码,每个NIC(网卡)厂商都有特定唯一的识别数字,25至48位是厂商内部为识别每个网卡而用,因此可以保证全世界都不会有相同的MAC地址的网卡。
实际上,即使MAC地址相同,只要不是同属一个数据链路就不会出现问题。
-
以太网帧格式:
大致区分一下包、帧、数据报、段、消息:
以上五个数据都用来表达数据的单位,包可以说是全能性术语。帧用于表示数据链路层中包的单位,数据报是IP和UDP等网络层以上的分层中包的单位。段则表示TCP数据流中的信息,消息是指应用协议中数据的单位。
上层的数据包在经过链路层时,从前往后一次被附件了以太网包首部、IP包首部、TCP/UDP包首部及应用层协议首部和数据,包的最后追加了以太网的包尾。
每个包的首部都会包含至少两个信息:发送端和接收端MAC地址,上层协议类型,经过每个协议分层时,都必须有识别包发送端和接收端的信息,以太网后用MAC地址,IP会用IP地址,而TCP/UDP会用端口号作为识别两端主机的地址。
以太网前端有一个叫做前导码的部分,标识一个以太网帧的开始,在他之后是帧的本体,帧本体前端是以太网首部,紧跟首部后的是帧数据,最后,在帧尾部是一个叫做FCS(Frame Check Sequence,帧检验序列)的4个字节,用以检查帧是否有所损坏。如果在传输过程中出现干扰,可能会影响数据导致乱码位的出现,可以通过检查FCS这个字段的值将受到干扰的错误帧丢弃,具体的检查步骤请大家自行查阅,这里不做详细介绍。
-
以太网交换机:
以太网交换机是一种基于MAC地址识别、完成以太网数据帧转发的网络设备。
在交换机内部会维护一个MAC地址表,通过这个地址表就会知道数据帧从哪里来,要到哪里去,那么这个MAC地址表示怎么生成的呢?
交换机有自学功能,通过“学习”可以了解到每个端口上所连接设备的MAC地址;将MAC地址与端口编号的对应关系“记忆”在内存中,生产MAC地址表;从一个端口“接收”到数据帧后,在MAC地址表中“查找”与帧头中目的MAC地址相对应的端口编号,然后,将数据帧从查到的端口上“转发”出去。
还记得前面讲过的旅行的故事么?旅行中最短的路段的车票,就是从这里发出的。
其实无论是物理层还是数据链路层,内容是非常多的,在这里只是精简出有用的便于我们理解的知识点来说,相信大家看到数据链路中这几个关键知识点,应该能对数据链路层有一个初步的认识。
后语: 关于TCP/IP协议的第一篇文章,就写到这里吧,介绍了从整体到局部的两个分层,希望能给大家一些启发。个人觉得,如果不是专业方向如此,工作中只需了解即可,工作不是考试,重要的是我们遇到问题,解决问题的思维和能力。
年底了,非常忙碌,下一篇《关于TCP/IP协议那些事(二)》我会抽空尽快写出来,希望大家多多理解,支持,文章中如有错误,还请立即指出。欢迎大家提出宝贵意见。
原创文章,纯手写,欢迎转载!尊重作者,转载请注明出处并标注源链接!