计算机网络

关于TCP/IP协议那些事(一)

2017-12-28  本文已影响62人  Eternal丶King
16pic_753377_b.jpg

前言:年底将至突然忙碌了起来,连续两个通宵,还真是有些吃不消,闲下来时候决定写几篇关于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讨论。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每个分层功独立使用,即使系统中某些分层发生变化,也不会波及整个系统,因此通过分层能够细分通信功能,可以构造一个扩展性和灵活性都较强的系统,更易于单独实现每个分层的协议,并界定各个分层的具体职责和功能。

3.各分层之间的关系
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 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协议那些事(二)》我会抽空尽快写出来,希望大家多多理解,支持,文章中如有错误,还请立即指出。欢迎大家提出宝贵意见。

原创文章,纯手写,欢迎转载!尊重作者,转载请注明出处并标注源链接!

上一篇 下一篇

猜你喜欢

热点阅读