zoukankan      html  css  js  c++  java
  • 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》) 

  • 相关阅读:
    三数之和
    罗马数字与整数
    Oracle 开启或关闭归档
    Oracle RMAN scripts to delete archivelog
    Oracle check TBS usage
    Oracle kill locked sessions
    场景9 深入RAC运行原理
    场景7 Data Guard
    场景4 Data Warehouse Management 数据仓库
    场景5 Performance Management
  • 原文地址:https://www.cnblogs.com/inception6-lxc/p/9383607.html
Copyright © 2011-2022 走看看