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》)

TCP/IP通信过程(以发送电子邮件为例)(转)的更多相关文章
- TCP/IP通信过程
一.参考网址 1.以太网帧格式.IP数据报格式.TCP段格式+UDP段格式 详解 2. 二.TCP的建立过程 1.例子: 192.168.22.66 telenet到192.168.22.74的tcp ...
- TCP/IP通信网络基础
TCP/IP是互联网相关的各类协议族的总称. TCP/IP的分层管理 分层的优点:如果只有一个协议在互联网上统筹,某个地方修改就要把所有的部分整体换掉,采用分层则只需要改变相应的层.把各个接口部分规划 ...
- 使用Boost asio实现异步的TCP/IP通信
可以先了解一下Boost asio基本概念,以下是Boost asio实现的异步TCP/IP通信: 服务器: #include "stdafx.h" #include <io ...
- TCP/IP 通信
TCP/IP 通信又叫socket 通信,是基于TCP/IP协调面向连接的一个数据传输技术.是属于OSI国际标准的传输层,三次握手 提供数据,有序,安全,端到端的传输和接收.它有三个主要协议:传输控制 ...
- tcp/ip通信第5期之服务器端程序
/* 此程序是tcp/ip通信服务器端程序,测试运行在redhat5上 重构readline函数,解决粘包问题——利用“\n”识别一个消息边界 */ #include<stdio.h> # ...
- tcp/ip通信第5期之客户机端程序
/*此程序是tcp/ip通信的客户机端程序, 测试运行在redhat6系统上 重构readline函数,解决粘包问题——利用“\n”识别一个消息边界 */ #include<stdio.h> ...
- 第4章 TCP/IP通信案例:访问Internet上的Web服务器
第4章 TCP/IP通信案例:访问Internet上的Web服务器 4.2 部署代理服务器 书中为了演示访问Internet上的Web服务器的全过程,使用了squid代理服务器程序模拟了一个代理服务器 ...
- linux高性能服务器编程 (四) --TCP/IP通信案例
第四章 TCP/IP通信案例 HTTP代理服务器的大致工作原理 在HTTP通信链上,客户端和服务器之间通常存在某些中转代理服务器.它们提供对目标资源的中转访问.一个HTTP请求可能被多个 ...
- [转帖]Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点
Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点 http://network.51cto.com/art/201909/603780.htm 可以毫不夸张的说现如今的互联网是基于TC ...
随机推荐
- Linux文件内容查看相关命令
1.more命令 在Linux中,more命令是一个基于vi编辑器的文本过滤器,它能以全屏的方式按页显示文本文件的内容,more里面内置了一些快捷键. (1)命令语法 more(选项)(参数) (2) ...
- 内网服务器离线编译安装mysql5.7并调优
目录 内网服务器离线编译安装mysql5.7并调优 前言 关于MySQL 一.MySQL安装篇 部署环境 前期准备工具 挂载系统ISO镜像,配置yum源 二.MySQL调优篇 1.对MySQL进行安全 ...
- Mysql 表分区分类
针对Mysql数据库,表分区类型简析. [1]表分区类型 (1)Range分区:按范围分区.按列值的范围区间进行分区存储:比如:id小于10存储在一个分区:id大于10小于20存储在另外一个分区: ( ...
- 排行榜 和 zset
ZSET 使用 https://blog.csdn.net/weixin_37490221/article/details/78135036 https://www.cnblogs.com/chenz ...
- c++11多线程记录0
两种并发编程模型 多进程 进程间通信常用的几种方式: 文件 管道 消息队列 多线程 一个进程中存在的多个线程,通常通过共享内存来通信,(说的非常非常粗俗,就是通过类似"全局变量"的 ...
- Java学习:List接口
List接口 java.util.list接口 extends Collection接口 List接口的特点: 有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123) 有索引,包含了一 ...
- Logstash配置文件修改自动加载和指定目录进行启动
检查配置并启动Logstash,修改后自动加载 指定配置文件目录并启动Logstash
- C# Dapper 的简单实用
首先引入dapper PM>Install-Package Dapper -Version 2.0.4 (可能会出现因版本问题而安装失败详情见官网:https://stackexchange. ...
- HDFS文件浏览页返回上级目录功能
1.效果预览 Hadoop自带的效果 修改后,多了一个../按钮,点击可以回到上级目录 2.查找页面和JS文件 我们在浏览器上可以看到访问了explorer.html页面,可以尝试使用find命令查找 ...
- nodejs npm vue yarn 环境搭建
1.nodejs中文网http://nodejs.cn/download/下载最新版本 2.安装注意,虽然.msi包没有右键用管理员权限运行,如果直接双击安装可能会存在安装失败的问题.使用管理员权限运 ...