TCP/IP通信过程(以发送电子邮件为例)(转)
1.应用程序处理
(1)A用户启动邮件应用程序,填写收件人邮箱和发送内容,点击“发送”,开始TCP/IP通信;
(2)应用程序对发送的内容进行编码处理,这一过程相当于OSI的表示层功能;
(3)由A用户所使用的邮件软件决定何时建立通信连接、何时发送数据的管理,这一过程相当于OSI的会话层功能;
(4)现在可以发送了,就在发送的那一刻,建立连接,通过这个TCP连接发送数据。首先是将应用层数据发送给下一层的TCP,再做实际转发处理。
2.TCP模块的处理
传输层TCP负责建立连接、发送数据以及断开连接。TCP要将应用层发来的数据实现可靠传输至对端,需要在应用层数据前段加上TCP首部。(TCP首部包括源端口号和目标端口号,序列号,校验和)。然后,就可以将附加了TCP首部的包发送给IP。
3.IP模块的处理
IP层将上层传来的附加了TCP首部的包当做自己的数据,又在该数据前段加上自己的IP首部,生成IP包。然后参考路由控制表决定接受此IP包的路由或主机,以此发送到对应的路由器或主机的网络接口的驱动程序,实现真正发送数据。接下来将MAC地址(若果位置,可以利用ARP查找)和IP地址交给以太网的驱动程序,实现数据传输。
4.网络接口(以太网驱动)的处理
把上层传来的IP包附加上以太网首部(该首部包括收、发端的MAC地址,以及标志以太网类型的以太网数据的协议),生成以太网数据包,通过物理层传输给接收端。此外,还要对该太网数据包进行发送处理,生成FCS(frame check sequence),由硬件计算添加到包的后面,主要是为了判断数据包是否由于噪声而破坏。
现在可以通过物理层传输了
现在的数据包是这个样子的(截图于《图解TCP/IP》)
以下就是包的接收处理了
5.网络接口(以太网驱动)的处理
对以太网数据包首部进行解析,如果发现是发给自己的包,则识别上一层为IP,否则丢弃包。
6.IP模块的处理
IP包首部的解析,如果发现是发给自己的包,则识别上一层为TCP,否则丢弃包。
7.TCP模块的处理
TCP包首部的解析。数据接收完毕后,接收端发送一个“确认回执”给发送端,如果该回执信息未能到达发送端,则发送端会认为接收端没有接收到数据则一直发送。数据被完整接收后,传递给端口号识别的应用程序。
8.应用程序的处理
接收端应用程序接收发送端发来的数据,确认地址,若无此地址,则返回给发送端一个“无此收件地址”的报错信息。若有此地址,则邮件被保存到本地硬盘,若保存也能正常进行,则发送一个“处理正常”给发送端,否则,如磁盘满等异常导致未能保存成功,则发送一个“处理异常”给发送端。
现在,接收端就可以阅读邮件了
总结,整个流程如图(截图于《图解TCP/IP》)