关于TCP/IP与数据传输

一、TCP/IP的具体含义:

从字面意思来讲,很多人会认为TCP/IP是指TCP与IP这两种协议。有时确实也可以说是这两种协议,但是大部分情况下所说的是利用IP进行通信时所必须用到的协议群的统称。具体来说IP,ICMP,TCP,UDP,FTP以及HTTP等都属于TCP/IP协议。他们与TCP/IP之间关系密切,是互联网不可缺少的部分。因此大部分情况下TCP/IP是泛指这些协议,有时也称为TCP/IP为国际协议族。如图:

 二、TCP/IP协议分层模型

TCP/IP是当今计算机网络界使用最为广泛的协议,了解TCP/IP不仅是网络工程师的必须,而且也是我们小猿需要学习的东西。那么什么是TCP/IP呢,看下图先来简单的了解一下:

上图列出了OSI参考模型与TCP/IP分层模型的大致关系,从图上就可以看出,这两者之间还是有很多差别的。但是和OSI参考模型对应起来看,能够帮助我们更好的理解TCP/IP中每个协议具体的功能。OSI主要注重“通信协议必要的功能是什么”,而TCP/IP主要是“在计算机上实现协议应该开发那些程序”。看上去好像传统开发模型和敏捷开发模型似的。

 1、硬件(物理层):

TCP/IP的最底层是负责数据传输的硬件,这种硬件就相当于以太网或者是电话线等物理层设备。

2、网络接口层(数据链路层):

网络接口层利用以太网中的数据链路层进行通信,因此属于接口层。也就是说把他当做让NIC起作用的“驱动程序”也无妨。驱动程序是在操作系统与硬件之间起桥梁作用的软件。

3、互联网层(网络层):

互联网层使用的是IP协议,相当于OSI参考模型中的网络层。IP协议依靠IP地址进行转发分包数据。TCP/IP分层模型中的互联网层与传输层的功能通常是有操作系统提供的。尤其是路由器他必须具有互联网层转发分组数据包的功能。所以连接互联网的所有的主机与路由器都必须实现IP的功能。

4、传输层:

TCP/IP分层模型中的传输层与OSI模型中的传输层有点类似,主要的功能就是让应用程序之间实现通信。其中TC是一种面向有链接的传输层协议,他可以保证两端通信主机的通信可达,但是建立与断开连接至少需要多次的发包与收包。UDP是一种有别于与TCP的无连接的传输层协议,他不会关注接收端是不是接收到了数据。

5、应用层(会话层以上的分层):

TCP/IP分层模型中的应用层从图中可以看出他不仅实现了OSI参考模型中的应用层,同时也实现了其中的表示层与会话层。我们常用的WWW,电子邮件,文件传输等应用都包含在其中。其中WWW中浏览器与服务器之间通信所用的协议就是HTTP(HyperText Transfer Protocol)协议,他所传输的数据的格式主要是HTML。www中的HTTP协议是属于应用层的协议,而HTML是一种属于表示层的协议。电子邮件中的使用协议是SMTP(Simple Mail Transfer Protocol)协议。文件传输中使用的协议是FTP协议。

三、TCP/IP通信的实例

我们都很好奇TCP/IP是怎么实现数据的传输的呢??接下来就来看一下从应用层到物理层的数据处理流程。

在TCP/IP分层模型中每个分层都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,比如发送的目标地址与协议的信息等。从下一层的角度来看,从上一层收到的包全部都被认为是本层的数据。

发送数据包:

我们还是用电子邮件作为例子,假设A给B发送电子邮件,内容为”早上好“。从TCP/IP的角度来看就是从计算机A把数据发送到计算机B。下面我们来了解一下具体的过程:

1、应用程序处理:

启动邮件程序,输入内容与收件人,当鼠标点击“发送”后就可以开始TCP/IP的通信了。

首先会在应用程序中进行编码处理。利用电子邮件使用UTF-8的编码格式等,这相当于OSI中的表示层的功能。编码完成后,实际的邮件不一定会马上发送出去,因为有的邮件软件可以一次发送多个,或者是定时发送,或者是接收端点击接收才可以接收新的邮件。。像这种何时建立通信连接,何时发送数据的管理功能可以看做是OSI中的会话层。

应用在发送邮件的那一刻建立了TCP连接,从而利用这个TCP连接进行发送数据。在这个过程中首先是把数据发送给TCP,然后再进行传递与转发。

2、TCP模块的处理:

TCP根据应用的指示,负责建立连接,发送数据以及断开连接。TCP提供了把应用层发来的数据顺利发送至对端的可靠传输。为了实现TCP这个功能,需要在应用层数据的前端加上一个TCP首部。这个TCP的首部包括源端口号与目标端口号(用于识别发送主机与接收主机上的应用),序号(用于标示发送的包中哪部分是数据),以及效验和(用来判断数据是否被损坏)。然后把数据交给IP.

3、IP模块的处理:

IP将TCP传过来的TCP首部与数据当做自己的数据,并在TCP首部前端加上自己的IP首部。IP首部包含接收端IP与发送端的IP,紧跟IP首部的还有判断其后面的数据是TCP还是UDP的信息。IP包生成后,参考路由控制表决定接受此IP包的路由或主机。

4、网络接口(以太网驱动)的处理:

在接收到IP的包,这些IP的包对于以太网来说只不过是数据。给这些数据加上以太网首部并进行发送处理。以太网首部中包含接收端的MAC地址,发送端的MAC地址以及标致以太网类型的协议。

每一个包的首部至少包含两个信息,一个是发送端与接收端的地址,另一个是上一层的协议类型。经过每个协议分层时,都必须有识别发送端与接收端的信息。以太网会用MAC地址,IP会用IP地址,而TCP/UDP则会使用端口号来识别,即使是在应用层像电子邮件这样的地址也是一种识别。这些信息都包含在经过各个分层的数据的包的首部信息中。此外包首部中还包含了一个识别位,用来标识上一层协议的种类信息。详细信息如图:

数据包的接受处理:

包的接收过程与发送过程是一个逆过程。

1、网络接口(以太网驱动)的处理:

主机接收到以太网发来的数据包之后,首先从以太网的包首部找到MAC地址来判断这个包是不是发给自己的。不是发给自己的就丢弃,是发给自己的就解析数据包,然后转给IP。

2、IP模块的处理:

IP接收到从下层发来的数据包之后解析,判断包首部的IP地址与自己的IP地址是不是同一个IP地址,如果地址相匹配,并从这个数据包中检查上一层的数据类型,如果是TCP则会转发给TCP进行处理,如果是UDP则会转发给UDP进行处理。

3、TCP模块的处理:

在TCP接收到数据之后首先会校验数据,判断数据是否有损坏。然后检验是否是按照序号接收数据,最后检查端口号确定具体的应用程序是哪个。与此同时接收端接收到数据之后会发送一个“确认回执”到发送端,来确认数据是否发到。如果没有确认发送端会认为数据没有发送到,所以继续重复发送。

4、应用程序的处理:

接收端的应用程序接收到从TCP发来的数据包之后在进行解码,然后显示发送数据的内容。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

geohash php_空间索引-geohash算法实现

算法简介geohash是实现空间索引的一种算法,其他实现空间索引的算法有:R树和其变种GIST树、四叉树、网格索引等算法基本原理geohash算法将地球理解为一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码,这种方…

ActiveReports 报表控件V12新特性 -- 新增JSON和CSV导出

ActiveReports 报表控件V12新特性 -- 新增JSON和CSV导出 ActiveReports 是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求,作为专业的报表工具为全球超过 300,000 开发人员提…

php imap配置,怎么为PHP编译imap扩展?

为PHP编译imap扩展的方法:首先安装“imap-open2007e”;然后下载源代码;接着准备好系统的“imap-open”环境;最后进入“./ext/extension/imap/”文件夹下执行“make”命令即可。怎么为PHP编译imap扩展?最近为项目增加了…

vmware安装minimal centos报错/etc/rc5.d/s99local : line

2019独角兽企业重金招聘Python工程师标准>>> 有人用vmware安装minimal centos报错/etc/rc5.d/s99local : line:25 : eject : command not found 。我们看下完整报错内容: Installing VMware Tools, please wait...mount: special device /dev/hda does n…

后缀树(Suffix Trie)子串匹配结构

Suffix Trie 又称后缀Trie或后缀树。它与Trie树的最大不同在于,后缀Trie的字符串集合是由指定字符串的后缀子串构成的。比如、完整字符串"minimize"的后缀子串组成的集合S分…

java中的线程和进程,Java | 线程和进程,创建线程

一、线程与进程线程定义进程中执行的一个代码段,来完成不同的任务组成:线程ID,当前指令指针(PC),寄存器集合(存储一部分正在执行线程的处理器状态的值)和堆栈进程定义执行的一段程序,一旦程序被载入到内存中准备执行就…

Maven的pom报错的解决方法

如果在MyEclipse里面导入项目,导入不了,如下图 接下来可以点击Import Maven Projects里的Action那一行Resolve Later. 点击Do Not Execute(add to pom)就可以正常导入了转载于:https://www.cnblogs.com/JimmySeraph/p/8068299.html

django零开始

2019独角兽企业重金招聘Python工程师标准>>> 安装。。。后查看 import django django.VERSION #输出版本号,目前自己是py2.7.9和django1.8 1,新建一个django-project django-admin.py startproject project-name 一个project一般为一个项目 …

关于Python3.6下登陆接口的尝试

编者按:README:此代码为用户登陆界面,添加了寻求帮助选项。1.学习了基本数据类型,string, int,以及while循环,continue, break, if, elif, else条件语句,“x".format(x)变量替代…

php 命令安装tp5,tp5.1框架的下载与安装方法步骤(图文)

大家可以都知道啊,tp框架5.1之前的版本都是可以在thinkphp的官网进行下载压缩包来安装框架的,那么在从tp5.1开始啊,就取消了下载压缩包安装的方法,那么我们如何进行下载呢?tp5.1的手册中开始就有提到tp5.1框架有两种安…

[连载]《C#通讯(串口和网络)框架的设计与实现》- 13.中英文版本切换设计

目 录 第十三章 中英文版本切换设计... 2 13.1 不用自带的资源文件的理由... 2 13.2 配置文件... 2 13.3 语言管理类... 3 13.4 应用管理类... 12 13.5 小结... 12 第十三章 中英文版本切换设计 13.1 不用自带的资源文件…

Mybaitis JdbcType 和javaType

2019独角兽企业重金招聘Python工程师标准>>> MyBatis 通过包含的jdbcType类型 BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINEDTINYINT REAL VARCHAR BINARY BLOB NVARCHARSMALLINT DOUBLE …

php数据趋势曲线,数据曲线图怎么做

数据曲线图怎么做?1、在电脑桌面上,新建一个excel文件(操作过程即为点击右键,在选项中选择“新建”选项,然后再选择“excel文件”,即可成功新建excel文件了)2、双击将新建的excel文件打开,输入你需要统计制…

ceph 分布式存储安装

[rootlocalhost ~]# rm -rf /etc/yum.repos.d/*.repo 下载阿里云的base源 [rootlocalhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [rootlocalhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/r…

STM32学习之路-SysTick的应用(时间延迟)

开发板:奋斗V5 好~ 菜B要来搞实验了.. 前面已经说了SysTick的工作原理什么的了,这里就不说了.. 先来做第一个实验: 盗自奋斗的样例,嘿嘿, 用SysTick产生1ms的基准时间,产生中断,每秒闪烁一次(LED1 V6) (1)外围时钟初始化&#xf…

凡事预则立(Beta)

听说——凡事预则立 吸取之前alpha冲刺的经验教训,也为了这次的beta冲刺可以更好更顺利地进行,更是为了迎接我们的新成员玮诗。我们开了一次组内会议,进行beta冲刺的规划。 上一张我们的合照: 具体会议议程如下: 1、讨…

用Vue.js开发一个电影App的前端界面

我们要构建一个什么样的App? 我们大多数人使用在线流媒体服务(如Netflix)观看我们最喜欢的电影或者节目。这篇文章将重点介绍如何通过使用vue.js 2 建立一个类似风格的电影流媒体WEB交互界面(见上图)。 最终的产品可以…

eclipse 函数折叠展开

为什么80%的码农都做不了架构师?>>> 一、eclipse 代码块折叠显示 核查是否开启折叠功能全局folding(window->preference->Gerneral->Editor-Structured Text)右侧Appearance 勾选Enable folding检测对应源编辑(java/javaScript&…

mysql 引擎 校对,MySQL 字符集和校对

字符集是指一种从二进制编码到某类字符符号的映射,校对是一组用于某个字符集的排序规则。每一类编码字符都有其对应的字符集和校对规则MySQL 如何使用字符集每种字符集都可能有多种校对规则,并且都有一个默认的校对规则。每个校对规则都是针对某个特定的…

【研究】Metasploit自动攻击模块

环境:kali-linux-2017.3-vm-amd64 一、安装postgresql数据库 apt-get install postgresql apt-get install rubygems libpq-dev apt-get install libreadline-dev apt-get install libssl-dev apt-get install libpq5 apt-get install ruby-dev apt-get install lib…