从一封邮件的发送看TCP/IP网络通信

总所周知,邮件是采用SMTP协议进行传输,但从TCP分层模块上看,这个其实是站在物理层的角度,而在传输层,还是依赖TCP/IP协议,假设A向B发送了一封邮件,本质是一次TCP/TP的通信过程。

一、应用层

启动应用程序,填写好对应邮箱和内容,点击发送按钮便开始了一个TCP/IP的通信。首先程序会进行编码处理,设置对应的编码,例如UTF-8。编码转换后,并不一定立即就会把邮件发出去,有可能是接收端主动接收或者被动接收,只有当开始接收邮件的时候,才会真正去建立通信连接,从一定的角度看是属于表示层和会话层的功能。

应用在发送邮件的那一刻建立TCP连接,通过建立的TCP连接将数据传输给下一层。

二、传输层

TCP模块提供可靠的端对端传输,负责连接建立、发送数据以及断开连接。为了实现端对端传输,需要在应用曾传过来的数据前附加一个TCP首部,TCP首部包含源端口、目的端口、序号(用以发送包中的那部分数据)、校验和(判断数据是否被损坏),随后将附加了TCP首部的包再发送给IP。
在这里插入图片描述

三、网络层

IP将TCP传过来的头部和应用数据组合和起来作为自己的数据,并在其基础加上自己的首部做为传输数据。因此,在IP数据包中IP首部后面紧跟着TCP首部,之后才是本身的数据,IP首部包含接收端IP地址、发送端IP地址以及判断数据是TCP和UDP。

IP包生成后,通过路由控制表决定接收此包的路由或主机。确定了路由或主机后,IP数据包会被发送给连接该路由或主机网络接口的驱动程序。如果还不知道具体接收的路由或主机,会通过ARP协议获取对端的MAC地址。
在这里插入图片描述

四、数据链路层

驱动接收到IP传过来的数据包,会在其基础上加上以太网首部并将通过物理层传输给到接收端。以太网首部包含接收端MAC地址、发送端MAC地址以及以太网类型,以太网类型用于表示首部的下一个协议,跟IP层中的标识是类似的作用。发送过程还会通过硬件计算校验序列FCS(循环冗余校验),主要是为了判断数据包是否被破坏。
在这里插入图片描述
最后通过物理层传输给接收端的数据包格式如下:
在这里插入图片描述

五、数据包的接收处理

包的接收流程跟发送流程是逆序的处理。主机收到以太网包后,首先会从以太网首部找到MAC地址判断是否是发给自己的,如果不是则丢弃。如果是,则查找以太网类型确认下数据的协议。从而传给对于处理,如果无法识别,则丢弃,此时这里是IP协议。

IP模块收到数据包后,也做类型处理,判断是TCP协议就交给TCP去处理,如果是有路由器的情况,此时接收端地址往往不是自己的地址,会进行转发。

TCP模块收到之后,会计算校验和,判断数据是否被破坏,然后检查是否按照序号接收数据,最后检查端口号,确定具体交付的应用程序。数据接收完毕,接收端会返回一个确认回执,如果发送端没收到确认回执,那么会认为接收端没收到而数据会一直反复发送。

应用程序收到具体的数据后,通过解析得到邮件的收件人地址,如果接收端不存在对应的邮箱地址,会返回错误信息,如果存在会接收并解析内容,此时用户便可以看到邮件的具体内容。
在这里插入图片描述
所以,一封邮件的发送其实就是一次TCP/IP的传输通信,跟HTTP传输类似,只是应用层的通信协议不同而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自平衡Azure

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值