关于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发来的数据包之后在进行解码,然后显示发送数据的内容。
关于TCP/IP与数据传输的更多相关文章
- TCP/IP网络通信-数据传输
1.通过网络IP实现数据的传输. 2.服务器端代码 [ 服务端主要通过Socket类来创建一个监听等待客户端连接,服务端发送用send方法,接收用Receive方法] using System.Ne ...
- TCP/IP的Socket编程
1. TCP/IP.UDP的基本概念 TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,他是一个工业标准的协议集, ...
- http和tcp/ip,socket的区别
http协议和tcp/ip协议乍看起来,感觉是同一类的东西,其实不然,下面简单的说说他们的区别. http协议是应用层的一种数据封装协议,类似的还有ftp,telnet等等,而tcp/ip是数据传输层 ...
- Linux--网络基础(概念+协议的了解+OSI七层模型,TCP/IP五层协议,网络数据传输流程)
网络的发展 网络的发展有下面几个阶段: 独立模式:计算机最开始是以单机模式被广泛使用的.每一台计算机都是独立的,之间不能够进行数据共享与通信 网络互联: 计算机之间可以链接在一起,完成数据共享,计算机 ...
- TCP/IP协议的数据传输过程详解——IP与以太网的包收发操作
MTU:一个网络包的最大长度,以太网中一般是1500字节:(含有头部长度,包括IP头部,TCP头部,不包括MAC头部) MSS:除去头部后,一个网络包所能容纳的TCP的数据的最大长度 下图为TCP/I ...
- TCP/IP基础
TCP/IP 是用于因特网 (Internet) 的通信协议. 计算机通信协议是对那些计算机必须遵守以便彼此通信的规则的描述. 什么是 TCP/IP? TCP/IP 是供已连接因特网的计算机进行通信的 ...
- 《图解TCP/IP》读书笔记
一.国际惯例:书托 这是一本图文并茂的网络管理技术书籍,旨在让广大读者理解TCP/IP的基本知识.掌握TCP/IP的基本技能. 书中讲解了网络基础知识.TCP/IP基础知识.数据链路.IP协议.IP协 ...
- Atitit osi tcp ip 对应attilax总结
Atitit osi tcp ip 对应attilax总结 Atitit 网络摄像机又叫IP CAMERA(简称IPC)常见的协议组合 网络摄像机又叫IP CAMERA(简称IPC)由网络编码模块和模 ...
- 门面模式的典型应用 Socket 和 Http(post,get)、TCP/IP 协议的关系总结
门面模式的一个典型应用:Socket 套接字(Socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息: 连接使用的 ...
随机推荐
- matlab中,怎样把矩阵中所有的0改为2
一句话搞定:>> a(find(a==0))=[2]:把矩阵中所有的0改为2
- [Javascipt] Immediately-Invoker 2
Now the people at Poplar Puzzles would like you to treat an array of functions like a Queue, passing ...
- 翻译记忆软件-塔多思TRADO经典教程_2
Trados 中文简明教程Trados 中文简明教程1. 准备工作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
- windows系统上安装Redis,并且设置Redis密码
一.Windows版本的Redis下载 下载地址:https://github.com/MSOpenTech/redis/releases 我下载的是最新版的3.2 二.安装Redis 我下载的是安装 ...
- php json数据处理中文编码
<?php function Notice(){ include './include/conn.php'; //数据库链接文件 $sql_notice = mysql_query('SELEC ...
- uva 696 - How Many Knights
题目链接:uva 696 - How Many Knights 题目大意:给出一个n * m的网格,计算最多可以放置几个国际象棋中的骑士. 解题思路:分成三类来讨论: 1)min(n, m) == 1 ...
- Oracle function实现根据输入的日期以及天数,获取此日期之后的天数的工作日
前提:在法定节日表(t_fdjr )中维护法定节日包括周六周天 /** * 功能描述:根据输入的日期以及天数,获取此日期之后的天数的工作日 * 输入参数: * i_date YYYY-MM-DD * ...
- PyQt5教程——组件(7)
PyQt5中的组件(widgets) 组件(widgets)是构建一个应用的基础模块.PyQt5有广泛的各式各样的组件,包含按钮,复选按钮,滑块条,和列表框.在这个部分的教程中,我们将学习几种有用的组 ...
- 教您使用java爬虫gecco抓取JD全部商品信息
gecco爬虫 如果对gecco还没有了解可以参看一下gecco的github首页.gecco爬虫十分的简单易用,JD全部商品信息的抓取9个类就能搞定. JD网站的分析 要抓取JD网站的全部商品信息, ...
- Java多线程系列目录(共43篇)(转)
Java多线程系列目录(共43篇) http://www.cnblogs.com/skywang12345/p/java_threads_category.html