TCP/IP 分层模型与通信示例

本文详细介绍了TCP/IP通信中,从应用层发送邮件到物理媒介的传输过程,包括数据包首部、TCP/IP各层处理、网络接口和接收处理等关键环节。
摘要由CSDN通过智能技术生成

TCP/IP 是如何在媒介上进行传输的呢?本文将介绍使用 TCP/IP 时,从应用层到物理媒介为止数据处理的流程。
Note:本文整理自『图解 TCP/IP』的第二章节,内容有所改动和删减,如有兴趣请阅读原文。


1. 数据包首部

在这里插入图片描述

图 1 数据包首部的层次化

每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。如图 1,在下一层的角度看,从上一分层收到的包全部都被认为是本层的数据。

2. 发送数据包

假设甲给乙发送电子邮件,内容为:“早上好”。而从 TCP/IP 通信上看,是从一台计算机 A 向另一台计算机 B 发送电子邮件。我们就通过这个例子来讲解一下 TCP/IP 通信的过程。

2.1 应用程序处理

启动应用程序新建邮件,将收件人邮箱填好,再由键盘输入邮件内容“早上好”,鼠标点击“发送”按钮就可以开始 TCP/IP 的通信了。
首先,应用程序中会进行编码处理。例如,中文电子邮件使用 GBK2312 或 UTF-8 进行编码。这些编码相当于 OSI 的表示层功能。
编码转化后,实际邮件不一定会马上被发送出去,因为有些邮件的软件有一次同时发送多个邮件的功能,也可能会有用户点击“收信”按钮以后才一并接收新邮件的功能。像这种何时建立通信连接何时发送数据的管理功能,从某种宽泛的意义上看属于 OSI 参考模型中会话层的功能。
应用在发送邮件的那一刻建立 TCP 连接,从而利用这个 TCP 连接发送数据。它的过程首先是将应用的数据发送给下一层的 TCP,再做实际的转发处理。

2.2 TCP 模块的处理

TCP 根据应用的指示(这种关于连接的指示相当于 OSI 参考模型中的会话层),负责建立连接、发送数据以及断开连接。TCP 提供将应用层发来的数据顺利发送至对端的可靠传输。
为了实现 TCP 的这一功能,需要在应用层数据的前端附加一个 TCP 首部。TCP 首部中包括源端口号和目标端口号(用以识别发送主机跟接收主机上的应用)、序号(用以发送的包中哪部分是数据)以及校验和(Check Sum,用来检验数据的读取是否正常进行的方法,用以判断数据是否被损坏)。随后将附加了 TCP 首部的包再发送给 IP。

2.3 IP 模块的处理

IP 将 TCP 传过来的 TCP 首部和 TCP 数据合起来当做自己的数据,并在 TCP 首部的前端在加上自己的 IP 首部。因此,IP 数据包中 IP 首部后面紧跟着 TCP 首部,然后才是应用的数据首部和数据本身。IP 首部中包含接收端 IP 地址 [[同网段及跨网段主机间通信原理]] 以及发送端 IP 地址。紧随 IP 首部的还有用来判断其后面数据是 TCP 还是 UDP 的信息。
IP 包生成后,参考路由控制表决定接受此 IP 包的路由或主机。随后,IP 包将被发送给连接这些路由器或主机网络接口的驱动程序,以实现真正发送数据。
如果尚不知道接收端的 MAC 地址,可以利用 ARP(Address Resolution Protocol)查找。只要知道了对端的 MAC 地址,就可以将 MAC 地址和 IP 地址交给以太网的驱动程序,实现数据传输。

2.4 网络接口 (以太网驱动)的处理

从 IP 传过来的 IP 包,对于以太网驱动来说不过就是数据。给这数据附加上以太网首部并进行发送处理。以太网首部中包含接收端 MAC 地址 [[同网段及跨网段主机间通信原理]]、发送端 MAC 地址以及标志以太网类型的以太网数据的协议。根据上述信息产生的以太网数据包将通过物理层传输给接收端。发送处理中的 FCS(Frame Check Sequence) 由硬件计算,添加到包的最后。设置 FCS 的目的是为了判断数据包是否由于噪声而被破坏。
在这里插入图片描述

图 2 TCP/IP 各层对邮件的收发处理

3. 经过数据链路的包

分组数据包(以下简称包)经过以太网的数据链路时的大致流程如图 3 所示。不过请注意,该图对各个包首部做了简化。
在这里插入图片描述

图 3 分层中包的结构

包流动时,从前往后依此被附加了以太网包首部、IP 包首部、TCP 包首部(或者 UDP 包首部)以及应用自己的包首部和数据。而包的最后则追加了以太网包尾(包首部附加于包的前端,而包尾则指追加到包的后端的部分。) (Ethernet Trailer)。
每个包首部中至少都会包含两个信息:一个是发送端和接收端地址,另一个是上一层的协议类型
经过每个协议分层时,都必须有识别包发送端和接收端的信息。以太网会用 MAC 地址,IP 会用 IP 地址,而 TCP/UDP 则会用端口号作为识别两端主机的地址。即使是在应用程序中,像电子邮件地址这样的信息也是一种地址标识。这些地址信息都在每个包经由各个分层时,附加到协议对应的包首部里边。
此外,每个分层的包首部中还包含一个识别位,它是用来标识上一层协议的种类信息。例如以太网的包首部中的以太网类型,IP 中的协议类型以及 TCP/UDP 中两个端口的端口号等都起着识别协议类型的作用。就是在应用的首部信息中,有时也会包含一个用来识别其数据类型的标签。

4. 数据包接收处理

包的接收流程是发送流程的逆序过程。

4.1 网络接口 (以太网驱动)的处理

主机收到以太网包以后,首先从以太网的包首部找到 MAC 地址判断是否为发给自己的包。如果不是发给自己的包则丢弃数据(很多 NIC 产品可以设置为即使不是发给自己的包也不丢弃数据。这可以用于监控网络流量。) 。
而如果接收到了恰好是发给自己的包,就查找以太网包首部中的类型域从而确定以太网协议所传送过来的数据类型。在这个例子中数据类型显然是 IP 包,因此再将数据传给处理 IP 的子程序,如果这时不是 IP 而是其他诸如 ARP 的协议,就把数据传给 ARP 处理。总之,如果以太网包首部的类型域包含了一个无法识别的协议类型,则丢弃数据。

4.2 IP 模块的处理

IP 模块收到 IP 包首部及后面的数据部分以后,也做类似的处理。如果判断得出包首部中的 IP 地址与自己的 IP 地址匹配,则可接收数据并从中查找上一层的协议。如果上一层是 TCP 就将 IP 包首部之后的部分传给 TCP 处理;如果是 UDP 则将 IP 包首部后面的部分传给 UDP 处理。对于有路由器的情况下,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送达的主机或路由器以后再转发数据。

4.3 TCP 模块的处理

在 TCP 模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。最后检查端口号,确定具体的应用程序。
数据接收完毕后,接收端则发送一个“确认回执”给发送端。如果这个回执信息未能达到发送端,那么发送端会认为接收端没有接收到数据而一直反复发送。
数据被完整地接收以后,会传给由端口号识别的应用程序。

4.4 应用程序的处理

接收端应用程序会直接接收发送端发送的数据。通过解析数据可以获知邮件的收件人地址是乙的地址。如果主机 B 上没有乙的邮件信箱,那么主机 B 返回给发送端一个“无此收件地址”的报错信息。
但在这个例子中,主机 B 上恰好有乙的收件箱,所以主机 B 和收件人乙能够收到电子邮件的正文。邮件会被保存到本机的硬盘上。如果保存也能正常进行,那么接收端会返回一个“处理正常”的回执给发送端。反之,一旦出现磁盘满、邮件未能成功保存等问题,就会发送一个“处理异常”的回执给发送端。
由此,用户乙就可以利用主机 B 上的邮件客户端,接收并阅读由主机 A 上的用户甲所发送过来的电子邮件——“早上好”。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值