TCP/IP协议栈

上学时、入职培训时、HCNP培训时都学了协议,但一直没能好好地、系统地梳理一下这方面的知识。我现在想将TCP/IP协议栈的每一层都好好学学。

OSI参考模型和TCP/IP模型大家都看过无数遍了吧,我也把图片贴上。

首先说下为什么需要协议。
举个例子,有两个国家的人,一个说葡萄牙语,一个说汉语,这两个国家的人语言不同,要想彼此和谐发展,该如何做呢?那么大家就商量一个办法,那咱们都用英语说吧,这样都能听懂,有利于人民发展。这个英语就是他们共同遵守的规则、协议,这个协议保证了双方的正常通信。那么网络协议就是实现PC之间正常通信的原则。

OSI参考模型由ISO制定,但较繁琐,不利于实际工作,因此出现了TCP/IP模型。TCP/IP被大家开始接受的时间应该追溯到上个世纪90年代E-mail和www的流行。

看上面的图就可明白,TCP/IP模型是吧应用层,表示层和会话层合并为一层,即应用层。应用层的协议有HTTP、FTP、SMTP、POP3、NFS、SSH、DNS等等。具体见下图:

一个以太网的数据格式如下:

应用层由用户进程提供,而传输层及以下由内核提供,应用层负责对数据做出解释,传输层及以下负责将数据从一个电脑传到另外一个电脑上。

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理,这个过程叫分用。

下面说下每一层的具体作用。

1、链路层

其实在链路层之下还有物理层,指的是电信号的传递方式,比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)是工作在物理层的网络设备,用于双绞线的连接和信号中继(将已衰减的信号再次放大使之传得更远)。

其实网络通信的本质就是不同网卡之间的数据传递。链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧(比如十兆以太网和百兆以太网之间、以太网和令牌环网之间),由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层首部重新封装之后再转发。

2、网络层

网络层的IP协议是构成Internet的基础。Internet上的主机通过IP地址来标识,Internet上有大量路由器负责根据IP地址选择合适的路径转发数据包,数据包从Internet上的源主机到目的主机往往要经过十多个路由器。路由器是工作在第三层的网络设备,同时兼有交换机的功能,可以在不同的链路层接口之间转发数据包,因此路由器需要将进来的数据包拆掉网络层和链路层两层首部并重新封装。IP协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应用程序中提供支持。

3、传输层

网络层负责点到点(point-to-point)的传输(这里的“点”指主机或路由器),而传输层负责端到端(end-to-end)的传输(这里的“端”指源主机和目的主机)。 说的更明白点,就是IP是门牌号,传输层是楼层。每一个TCP链接都会对应一个IP地址和端口。 传输层可选择TCP或UDP协 议。TCP是一种面向连接的、可靠的协议,有点像打电话,双方拿起电话互通身份之后就建立了连接,然后说话就行了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接。也就是说TCP传输的双方需要首先建立连接,之后由TCP协议保证数据收发的可靠性,丢失的数据包自动重发,上层应用程序收到的总是可靠的数据流,通讯之后关闭连接。UDP协议不面向连接,也不保证可靠性,有点像寄信,写好信放到邮筒里,既不能保证信件在邮递过程中不会丢失,也不能保证信件是按顺序寄到目的地的。使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作。

一个数据从一台主机发送到另外一个主机,是经历封装和分用的过程。

应用程序产生一数据,回家经历从上到下封装的过程。上面的数据格式就很明了,先加入传输层头,再加入IP头,再加入以太网帧头,最后经过物理层传输到目的主机。目的主机接收到以太网数据后,会经历一个反过程,最后发送到目标服务程序上。

--------EOF---------
微信分享/微信扫码阅读