我手机数据显示其它手机应用tcp业务手机越狱是什么意思思

利用TCP/IP选项优化数据传输
上回,我们对TCP_CORK选项如何减少网络传输包的数量做了一番原理性的解释。减少网络流量当然是非常重要的优化举措之一,不过这种手段也仅仅是实现高性能网络数据传输领域的一个方面。其他TCP选项也可能显着提供传输性能同时在某些条件下减少的响应时间延迟。下面就让我们来了解一些此类选项。
  TCP_DEFER_ACCEPT
  我们首先考虑的第1个选项是TCP_DEFER_ACCEPT(这是Linux系统上的叫法,其他一些操作系统上也有同样的选项但使用不同的名字)。为了理解TCP_DEFER_ACCEPT选项的具体思想,我们有必要大致阐述一下典型的HTTP客户/服务器交互过程。请回想下TCP是如何与传输数据的目标建立连接的。在网络上,在分离的单元之间传输的信息称为IP包(或IP 数据报)。一个包总有一个携带服务信息的包头,包头用于内部协议的处理,并且它也可以携带数据负载。服务信息的典型例子就是一套所谓的标志,它把包标记代表TCP/IP协议栈内的特殊含义,例如收到包的成功确认等等。通常,在经过&标记&的包里携带负载是完全可能的,但有时,内部逻辑迫使TCP/IP协议栈发出只有包头的IP包。这些包经常会引发讨厌的网络延迟而且还增加了系统的负载,结果导致网络性能在整体上降低。
  现在服务器创建了一个套接字同时等待连接。TCP/IP式的连接过程就是所谓&3次握手&。首先,客户程序发送一个设置SYN标志而且不带数据负载的TCP包(一个SYN包)。服务器则以发出带SYN/ACK标志的数据包(一个SYN/ACK包)作为刚才收到包的确认响应。客户随后发送一个ACK包确认收到了第2个包从而结束连接过程。在收到客户发来的这个ACK包之后,服务器会唤醒一个接收进程等待数据到达。当3次握手完成后,客户程序即开始把&有用的&的数据发送给服务器。通常,一个HTTP请求的量是很小的而且完全可以装到一个包里。但是,在以上的情况下,至少有4个包将用来进行双向传输,这样就增加了可观的延迟时间。此外,你还得注意到,在&有用的&数据被发送之前,接收方已经开始在等待信息了。
  为了减轻这些问题所带来的影响,Linux(以及其他的一些操作系统)在其TCP实现中包括了TCP_DEFER_ACCEPT选项。它们设置在侦听套接字的服务器方,该选项命令内核不等待最后的ACK包而且在第1个真正有数据的包到达才初始化侦听进程。在发送SYN/ACK包之后,服务器就会等待客户程序发送含数据的IP包。现在,只需要在网络上传送3个包了,而且还显着降低了连接建立的延迟,对HTTP通信而言尤其如此。这一选项在好些操作系统上都有相应的对等物。例如,在FreeBSD上,同样的行为可以用以下代码实现:
  /* 为明晰起见,此处略去无关代码 */
  struct accept_filter_arg af = { &dataready&, && };
  setsockopt(s, SOL_SOCKET, SO_ACCEPTFILTER, &af, sizeof(af));
  这个特征在FreeBSD上叫做&接受过滤器&,而且具有多种用法。不过,在几乎所有的情况下其效果与TCP_DEFER_ACCEPT是一样的:服务器不等待最后的ACK包而仅仅等待携带数据负载的包。要了解该选项及其对高性能Web服务器的重要意义的更多信息请参考Apache文档上的有关内容。
  就HTTP客户/服务器交互而言,有可能需要改变客户程序的行为。客户程序为什么要发送这种&无用的&ACK包呢?这是因为,TCP协议栈无法知道ACK包的状态。如果采用FTP而非HTTP,那么客户程序直到接收了FTP服务器提示的数据包之后才发送数据。在这种情况下,延迟的ACK将导致客户/服务器交互出现延迟。为了确定ACK是否必要,客户程序必须知道应用程序协议及其当前状态。这样,修改客户行为就成为必要了。
  对Linux客户程序来说,我们还可以采用另一个选项,它也被叫做TCP_DEFER_ACCEPT。我们知道,套接字分成两种类型,侦听套接字和连接套接字,所以它们也各自具有相应的TCP选项集合。因此,经常同时采用的这两类选项却具有同样的名字也是完全可能的。在连接套接字上设置该选项以后,客户在收到一个
  SYN/ACK包之后就不再发送ACK包,而是等待用户程序的下一个发送数据请求;因此,服务器发送的包也就相应减少了。
  TCP_QUICKACK
  阻止因发送无用包而引发延迟的另一个方法是使用TCP_QUICKACK选项。这一选项与 CP_DEFER_ACCEPT不同,它不但能用作管理连接建立过程而且在正常数据传输过程期间也可以使用。另外,它能在客户/服务器连接的任何一方设置。如果知道数据不久即将发送,那么推迟ACK包的发送就会派上用场,而且最好在那个携带数据的数据包上设置ACK 标志以便把网络负载减到最小。当发送方肯定数据将被立即发送(多个包)时,TCP_QUICKACK选项可以设置为0。对处于&连接&状态下的套接字该选项的缺省值是1,首次使用以后内核将把该选项立即复位为1(这是个一次性的选项)。
  在某些情形下,发出ACK包则非常有用。ACK包将确认数据块的接收,而且,当下一块被处理时不至于引入延迟。这种数据传输模式对交互过程是相当典型的,因为此类情况下用户的输入时刻无法预测。在Linux系统上这就是缺省的套接字行为。在上述情况下,客户程序在向服务器发送HTTP请求,而预先就知
  道请求包很短所以在连接建立之后就应该立即发送,这可谓HTTP的典型工作方式。既然没有必要发送一个纯粹的ACK包,所以设置TCP_QUICKACK为0以提高性能是完全可能的。在服务器方,这两种选项都只能在侦听套接字上设置一次。所有的套接字,也就是被接受呼叫间接创建的套接字则会继承原有套接字的所有选项。
  通过TCP_CORK、TCP_DEFER_ACCEPT和TCP_QUICKACK选项的组合,参与每一HTTP交互的数据包数量将被降低到最小的可接受水平(根据TCP协议的要求和安全方面的考虑)。结果不仅是获得更快的数据传输和请求处理速度而且还使客户/服务器双向延迟实现了最小化。
  网络程序的性能优化显然是一项复杂的任务。优化技术包括:尽可能使用零拷贝、用TCP_CORK及其等价选项组装适当的数据包、把传输数据包的数量最小化以及延迟优化等。为了提升网络、系统的性能和可伸缩性,有必要在程序代码中联合一致地采用以上各种可用方法。当然,清楚了解TCP/IP协议栈和操作系统的内部工作原理也是必要的
顶一下(1) 踩一下(0)
热门标签:|||||| 更多
比特客户端
我们也在这里:
移动数据的业务和应用
关键字:多媒体业务 移动数据业务
  摘要 本文简要先介绍了2G和移动数据网的业务和应用,然后着重介绍了目前正在发展的、具有市场潜力的新业务―多媒体业务和业务。
  关键词 移动数据业务 多媒体业务 移动流媒体业务 移动数据应用
  一、概述
  移动数据网的“业务”和“应用”是两个有区别而又相互联系的概念。“业务”主要是指移动数据网为用户提供的数据服务的能力,“应用”主要是指用户利用网络的数据业务来获取各种形式的信息服务或构建特定的应用系统。“业务”是传送信息的手段,“应用”是传送信息目的(信息服务和应用信息系统)。业务和应用又从不同的角度进行分类,业务可以按数据的形式、类型、属性、接入和传送方式等分类,应用可以按服务的对象、目的、类型、场合等分类。
  移动数据业务是从短消息业务(SMS)发展起来的,并很快形成短消息的热潮。移动数据网支持和,极大地促进移动数据业务的使用。目前,运营商正在进一步提供多媒体信息业务(MMS)、和移动流媒体业务(如视频电话、视频点播)、高速上网以及其他移动数据业务。
  二、2G移动数据网的业务和应用
  1. GPRS业务
  GPRS支持两种类型的分组数据业务:点到点(PTP)业务和点到多点(PTM)业务。GPRS也允许短消息业务(SMS)在GPRS无线信道的传送。
  PTP业务有两种:一种是PTP无连接网络业务(PTP-CLNS),无需端到端的呼叫建立,主要支持突发非交互式应用业务,支持基于IP的网络应用;另一种是PTP面向连接的网络业务(PTP-CONS),支持基于面向连接网络协议(CONS),支持突发事件处理和交互式应用业务,或者X.25的应用。PTP-CONS属于虚电路型业务,要求有建立连接、数据传送和连接释放工作程序。PTP的应用有e-mail、远程接入网WEB浏览、无线POS机、无线数据遥测等。
  PTM业务可用来将同一消息传送到多个用户。PTM业务又分为多播业务(PTM-M)和群呼业务(PTM-G)。PTM-M是将信息传一地域内的所有用户,可用于新闻、交息、天气预报、股市行情更新的播送;而PTM-G是利用GPRS多播功能将信息传送给特定的用户群,主要用于集团用户,如出租车和车队管理、无线远程会议等。
  2. GPRS应用
  GPRS应用可以按服务对象分为面向个人用户的横向应用和面向集团用户的纵向应用两种类型。  对于横向应用,如网上冲浪、Email、文件传输、查询、增强型短消息等业务。
  对于纵向应用,例如运输业:车辆管理和调度;金融、证券和商业:无线POS、无线、自动售货机、流动银行等;实时信息发布:股市动态、天气预报、交通信息等;随时随地接入远程数据库;遥测、遥感、遥控:如气象、水文系统收集数据,对灾害进行遥测和告警,远程操作;为企业提供服务,降低企业运作成本。
  3. GPRS业务解决方案
  接入-利用电脑+GPRS接入互联网。
相关文章:
[ 责任编辑:王 钦 ] &&&&
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注Chinabyte其它手机应用 TCP业务 是什么_百度知道
其它手机应用 TCP业务 是什么
提问者采纳
意回答TCP是指传输控制协议,是一种面向连接(连接迹常杠克蕲久减苏导向)的、基于字节流的运输层通信协议、可靠的
具体是什么意思
具体是什么意思
就是和蓝牙,数据传输有关的,他负责传输文件方面
提问者评价
太给力了,你的回答完美的解决了我的问题!
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁只需一步,快速开始
查看: 483|回复: 4
写了一个Tcp客户端和服务端互传数据,出现一个小问题
黑马币技术分主题
中级黑马, 积分 688, 距离下一级还需 312 积分
中级黑马, 积分 688, 距离下一级还需 312 积分
10、 使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。
服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。
@author
思路:
步骤:
*/
import java.io.*;
import java.net.*;
import java.util.S
class TcpServer//服务端
{
& & & & public static void main(String[] args)throws Exception
& & & & {
& & & & & & & & Socket s=
& & & & & & & & try{
& & & & & & & & & & & & while(true)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & ServerSocket serverSocket=new ServerSocket(10001);
& & & & & & & & & & & & & & & & s=serverSocket.accept();
& & & & & & & & & & & & & & & & BufferedReader server_buf=new BufferedReader(new InputStreamReader(s.getInputStream()));
& & & & & & & & & & & & & & & & String str=server_buf.readLine();
& & & & & & & & & & & & & & & & System.out.println(&服务端接受到数据...&);
& & & & & & & & & & & & & & & & Thread.sleep(10000);
& & & & & & & & & & & & & & & & PrintStream pri=new PrintStream(s.getOutputStream());
& & & & & & & & & & & & & & & & System.out.println(&服务端将字符串反转后发送给客户端...&);
& & & & & & & & & & & & & & & & pri.println(new StringBuffer(str).reverse());//将反转后的字符串打印到客户端屏幕上
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & catch(Exception e)
& & & & & & & & {
& & & & & & & & & & & & e.printStackTrace();
& & & & & & & & }
& & & & & & & & finally{
& & & & & & & & & & & & if(s!=null){
& & & & & & & & & & & & & & & & try{
& & & & & & & & & & & & & & & & & & & & s.close();
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & catch(Exception e)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & e.printStackTrace();
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & }
& & & & }
}
class TcpClient//客户端
{
& & & & public static void main(String[] args)throws Exception
& & & & {
& & & & & & & & Socket s=
& & & & & & & & try
& & & & & & & & {
& & & & & & & & & & & & s=new Socket(InetAddress.getLocalHost(),10001);
& & & & & & & & & & & & while(true){
& & & & & & & & & & & & & & & & BufferedReader client_buf=new BufferedReader(new InputStreamReader(s.getInputStream()));
& & & & & & & & & & & & & & & & PrintStream pri=new PrintStream(s.getOutputStream());
& & & & & & & & & & & & & & & & Scanner sc=new Scanner(System.in);
& & & & & & & & & & & & & & & & System.out.println(&请输入一个字符串:&);
& & & & & & & & & & & & & & & & String str=sc.nextLine();
& & & & & & & & & & & & & & & & System.out.println(&正在向服务器发送数据...&);
& & & & & & & & & & & & & & & & pri.println(str);
& & & & & & & & & & & & & & & & System.out.println(&接受来自服务器反转的字符串...&);
& & & & & & & & & & & & & & & & System.out.println(client_buf.readLine());& & & &
& & & & & & & & & & & & & & & & sc.close();
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & catch(Exception e)
& & & & & & & & {
& & & & & & & & & & & & & & & & e.printStackTrace();
& & & & & & & & }
& & & & & & & & finally{
& & & & & & & & & & & & if(s!=null){
& & & & & & & & & & & & & & & & try{
& & & & & & & & & & & & & & & & & & & & s.close();
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & catch(Exception e)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & e.printStackTrace();
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & }& & & &
& & & & }
}
复制代码运行结果是这样的:
QQ截图15.png (83.1 KB, 下载次数: 0)
16:30 上传
QQ截图07.png (62.01 KB, 下载次数: 0)
16:30 上传
求大神解决这是什么错误?
只能完成一次字符串的发送和接受,我写的死循环,可是运行一次后就抛异常了。求解决!
技术分快到碗里来!
黑马币技术分主题
黑马云青年
高级黑马, 积分 1215, 距离下一级还需 785 积分
高级黑马, 积分 1215, 距离下一级还需 785 积分
ServerSocket serverSocket=new ServerSocket(10001);
放在while 外面 只须建立 一次连接即可。
学习中……
黑马币技术分主题
高级黑马, 积分 1397, 距离下一级还需 603 积分
高级黑马, 积分 1397, 距离下一级还需 603 积分
import java.io.*;
import java.net.*;
import java.util.S
public class TcpServer1// 服务端
& & & & public static void main(String[] args) throws Exception {
& & & & & & & & //這兩個都放在外面,
& & & & & & & & ServerSocket serverSocket = new ServerSocket(10001);
& & & & & & & & Socket s = serverSocket.accept();//客服端一直和服务器通信 连接一次就够了
& & & & & & & & try {
& & & & & & & & & & & & while (true) {
& & & & & & & & & & & & & & & & BufferedReader server_buf = new BufferedReader(
& & & & & & & & & & & & & & & & & & & & & & & & new InputStreamReader(s.getInputStream()));
& & & & & & & & & & & & & & & & String str = server_buf.readLine();
& & & & & & & & & & & & & & & & System.out.println(&服务端接受到数据...&);
& & & & & & & & & & & & & & & & Thread.sleep(2000);
& & & & & & & & & & & & & & & & PrintStream pri = new PrintStream(s.getOutputStream(), true);
& & & & & & & & & & & & & & & & System.out.println(&服务端将字符串反转后发送给客户端...&);
& & & & & & & & & & & & & & & & pri.println(new StringBuffer(str).reverse());// 将反转后的字符串打印到客户端屏幕上
& & & & & & & & & & & & }
& & & & & & & & } catch (Exception e) {
& & & & & & & & & & & & e.printStackTrace();
& & & & & & & & } finally {
& & & & & & & & & & & & if (s != null) {
& & & & & & & & & & & & & & & & try {
& & & & & & & & & & & & & & & & & & & & s.close();
& & & & & & & & & & & & & & & & } catch (Exception e) {
& & & & & & & & & & & & & & & & & & & & e.printStackTrace();
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & }
class TcpClient// 客户端
& & & & public static void main(String[] args) throws Exception {
& & & & & & & & Socket s =
& & & & & & & & BufferedReader client_buf =
& & & & & & & & PrintStream pri =
& & & & & & & & Scanner sc =
& & & & & & & & try {
& & & & & & & & & & & & s = new Socket(InetAddress.getLocalHost(), 10001);
& & & & & & & & & & & & while (true) {
& & & & & & & & & & & & & & & & client_buf = new BufferedReader(new InputStreamReader(
& & & & & & & & & & & & & & & & & & & & & & & & s.getInputStream()));
& & & & & & & & & & & & & & & &&&pri = new PrintStream(s.getOutputStream(), true);
& & & & & & & & & & & & & & & &&&sc = new Scanner(System.in);
& & & & & & & & & & & & & & & &&&System.out.println(&请输入一个字符串:&);
& & & & & & & & & & & & & & & &&&String str = sc.nextLine();
& & & & & & & & & & & & & & & & & & & & System.out.println(&正在向服务器发送数据...&);
& & & & & & & & & & & & & & & & & & & & pri.println(str);
& & & & & & & & & & & & & & & & System.out.println(&接受来自服务器反转的字符串...&);
& & & & & & & & & & & & & & & & System.out.println(client_buf.readLine());
& & & & & & & & & & & & }
& & & & & & & & } catch (Exception e) {
& & & & & & & & & & & & e.printStackTrace();
& & & & & & & & } finally {
& & & & & & & & & & & & if (s != null) {
& & & & & & & & & & & & & & & & try {
& & & & & & & & & & & & & & & & & & & & s.close();
& & & & & & & & & & & & & & & & } catch (Exception e) {
& & & & & & & & & & & & & & & & & & & & e.printStackTrace();
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & }
//声明最好都方法try{} 或循环的外面 这个是我的习惯
找方向来了
黑马币技术分主题
中级黑马, 积分 688, 距离下一级还需 312 积分
中级黑马, 积分 688, 距离下一级还需 312 积分
ServerSocket serverSocket=new ServerSocket(10001);
放在while 外面 只须建立 一次连接即可。
原来如此!
技术分快到碗里来!
黑马币技术分主题
中级黑马, 积分 688, 距离下一级还需 312 积分
中级黑马, 积分 688, 距离下一级还需 312 积分
import java.io.*;
import java.net.*;
import java.util.S
可以放在try{}里面 不能放在while里面!谢谢我改了下就可以了!
技术分快到碗里来!
黑马骑士勋章
有了黑马骑士勋章,比白马王子还要牛!
站长推荐 /1
深圳黑马38期,11月3日结课毕业,11月2日在美女班主任的带领下,黑马兄弟们欢聚在一起,吃了丰盛的自助餐,还去唱了K(各种酒仙,食神,麦霸)
Powered by
Copyright &用协议分析工具学习TCP/IP-网络协议
||||||||||||
当前位置 &
用协议分析工具学习TCP/IP
发表日期:
一、前言   目前,网络的速度发展非常快,学习网络的人也越来越多,稍有网络常识的人都知道TCP/协议是网络的基础,是Internet的语言,可以说没有TCP/IP协议就没有互联网的今天。目前号称搞网的人非常多,许多人就是从一把夹线钳,一个测线器联网开始接触网络的,假如只是联网玩玩,知道几个Ping之类的命令就行了,假如想在网络上有更多的发展不管是黑道还是红道,必须要把TCP/IP协议搞的非常明白。   学习过TCP/IP协议的人多有一种感觉,这东西太抽象了,没有什么数据实例,看完不久就忘了。本文将介绍一种直观的学习方法,利用协议分析工具学习TCP/IP,在学习的过程中能直观的看到数据的具体传输过程。   为了初学者更轻易理解,本文将搭建一个最简单的网络环境,不包含子网。 二、试验环境   1、网络环境   如图1所示
  为了表述方便,下文中208号机即指地址为192.168.113.208的计算机,1号机指地址为192.168.113.1的计算机。   2、   两台机器都为windows 2000 ,1号机机器作为服务器,安装FTP服务   3、协议分析工具   Windows环境下常用的工具有:Sniffer o、Natxray、Iris以及windows 2000自带的网络监视器等。本文选用Iris作为协议分析工具。   在客户机208号机安装IRIS软件。 三、测试过程   1、测试例子  将1号机计算机中的一个文件通过FTP下载到208号机中。   2、IRIS的设置   由于IRIS具有网络监听的功能,假如网络环境中还有其它的机器将抓很多别的数据包,这样为学习带来诸多不便,为了清楚地看清楚上述例子的传输过程首先将IRIS设置为只抓208号机和1号机之间的数据包。设置过程如下:   1)用热键CTRL+B弹出如图所示的地址表,在表中填写机器的IP地址,为了对抓的包看得更清楚不要添主机的名字(name),设置好后关闭此窗口。
  2)用热键CTRL+E弹出如图所示过滤设置,选择左栏“IP address”,右栏按下图将address book中的地址拽到下面,设置好后确定,这样就这抓这两台计算机之间的包。
  3、抓包   按下IRIS工具栏中 开始按钮。在浏览器中输入:FTP://192.168.113.1,找到要下载的文件 ,鼠标右键该文件,在弹出的菜单中选择“复制到文件夹”开始下载,下载完后在IRIS工具栏中按 按钮停止抓包。图4显示的就是FTP的整个过程,下面我们将具体分析这个过程。
点击查看大图 图4
  说明:为了能抓到ARP协议的包,在WINDOWS 2000 中运行arpCd 清除arp缓存。
四、过程分析   1、TCP/IP的基本原理   本文的重点虽然是根据实例来解析TCP/IP,但要讲明白下面的过程必须简要讲一下TCP/IP的基本原理。   1)网络是分层的,每一层分别负责不同的通信功能。   TCP/IP通常被认为是一个四层协议系统,TCP/IP协议族是一组不同的协议组合在一起构成的协议族。尽管通常称该协议族为TCP/IP,但TCP和IP只是其中的两种协议而已,如表1所示。每一层负责不同的功能:
TCP/IP层描述
HTTP、Telnet、FTP和E-mail等
负责把数据传输到传输层或接收从传输层返回的数据
主要为两台主机上的应用程序提供端到端的通信,TCP为两台主机提供可靠的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。UPD则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据能到达另一端。
ICMP、IP和IGMP
有时称作互联网层,主要为数据包选择路由,其中IP是TCP/IP协议族中最为核心的协议。所有的TCP、UPD、ICMP及IGMP数据协议都以IP数据包格式传输。
ARP、RARP和设备驱动程序及接口卡
发送时将IP包作为帧发送;接收时把接收到的位组装成帧;提供链路治理、错误检测等。
  分层的概念说起来非常简单,但在实际的应用中非常的重要,在进行网络设置和排除故障时对网络层次理解得很透,将对工作有很大的帮助。例如:设置路由是网络层IP协议的事,要查找MAC地址是链路层ARP的事,常用的Ping命令由ICMP协议来做的。   图5显示了各层协议的关系,理解它们之间的关系对下面的协议分析非常重要。
  2)数据发送时是自上而下,层层加码;数据接收时是自下而上,层层解码。   当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),该过程如图6所示。TCP传给IP的数据单元称作TCP报文段或简称为TCP段。I P传给网络接口层的数据单元称作IP数据报。 通过以太网传输的比特流称作帧(Frame)。   数据发送时是按照图6自上而下,层层加码;数据接收时是自下而上,层层解码。
  3)逻辑上通讯是在同级完成的   垂直方向的结构层次是当今普遍认可的数据处理的功能流程。每一层都有与其相邻层的接口。为了通信,两个系统必须在各层之间传递数据、指令、地址等信息,通信的逻辑流程与真正的数据流的不同。虽然通信流程垂直通过各层次,但每一层都在逻辑上能够直接与远程计算机系统的相应层直接通信。   从图7可以看出,通讯实际上是按垂直方向进行的,但在逻辑上通信是在同级进行的。
  2、过程描述   为了更好的分析协议,我们先描述一下上述例子数据的传输步骤。如图8所示:   1)FTP客户端请求TCP用服务器的IP地址建立连接。   2)TCP发送一个连接请求分段到远端的主机,即用上述IP地址发送一份IP数据报。   3) 假如目的主机在本地网络上,那么IP数据报可以直接送到目的主机上。假如目的主机在一个远程网络上,那么就通过IP选路函数来确定位于本地网络上的下一站路由器地址,并让它转发IP数据报。在这两种情况下,IP数据报都是被送到位于本地网络上的一台主机或路由器。   4) 本例是一个以太网,那么发送端主机必须把32位的IP地址变换成48位的以太网地址,该地址也称为MAC地址,它是出厂时写到网卡上的世界唯一的硬件地址。把IP地址到对应的MAC地址是由ARP协议完成的。   5) 如图的虚线所示,ARP发送一份称作ARP请求的以太网数据帧给以太网上的每个主机,这个过程称作广播。ARP请求数据帧中包含目的主机的IP地址,其意思是“假如你是这个IP地址的拥有者,请回答你的硬件地址。”   6) 目的主机的ARP层收到这份广播后,识别出这是发送端在寻问它的IP地址,于是发送一个ARP应答。这个ARP应答包含I P地址及对应的硬件地址。   7) 收到ARP应答后,使ARP进行请求―应答交换的IP数据包现在就可以传送了。   8) 发送IP数据报到目的主机。
  3、实例分析   下面通过分析用iris捕捉的包来分析一下TCP/IP的工作过程,为了更清楚的解释数据传送的过程,我们按传输的不同阶段抓了四组数据,分别是查找服务器、建立连接、数据传输和终止连接。每组数据,按下面三步进行解释。  显示数据包  解释该数据包  按层分析该包的头信息
第一组 查找服务器   1)下图显示的是1、2行的数据
点击查看大图图9
  2)解释数据包   这两行数据就是查找服务器及服务器应答的过程。   在第1行中,源端主机的MAC地址是00:50:FC:22:C7:BE。目的端主机的MAC地址是FF:FF:FF:FF:FF:FF,这个地址是十六进制表示的,F换算为二进制就是1111,全1的地址就是广播地址。所谓广播就是向本网上的每台网络设备发送信息,电缆上的每个以太网接口都要接收这个数据帧并对它进行处理,这一行反映的是步骤5)的内容,ARP发送一份称作ARP请求的以太网数据帧给以太网上的每个主机。网内的每个网卡都接到这样的信息“谁是192.168.113.1的IP地址的拥有者,请将你的硬件地址告诉我”。   第2行反映的是步骤6)的内容。在同一个以太网中的每台机器都会"接收"到这个报文,但正常状态下除了1号机外其他主机应该会忽略这个报文,而1号的主机的ARP层收到这份广播报文后,识别出这是发送端在寻问它的IP地址,于是发送一个ARP应答。告知自己的IP地址和MAC地址。第2行可以清楚的看出1号回答的信息__自己的MAC地址00:50:FC:22:C7:BE。   这两行反映的是数据链路层之间一问一答的通信过程。这个过程就像我要在一个坐满人的教室找一个叫“张三”的人,在门口喊了一声“张三”,这一声大家都听见了,这就叫广播。张三听到后做了回应,别人听到了没做回应,这样就与张三取得了联系。   3)头信息分析   如下图左栏所示,第1数据包包含了两个头信息:以太网(Ethernet)和ARP。
点击查看大图图10
  下表2是以太网的头信息,括号内的数均为该字段所占字节数,以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全1的非凡地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0806。   第2行中可以看到,尽管ARP请求是广播的,但是ARP应答的目的地址却是1号机的(00 50 FC 22 C7 BE)。ARP应答是直接送到请求端主机的。
以太网目的地址(6)
以太网源地址(6)
帧类型(2)
FF FF FF FF FF FF
00 50 FC 22 C7 BE
00 50 FC 22 C7 BE
00 50 27 F6 50 53
  下表3是ARP协议的头信息。硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0800即表示IP地址。它的值与包含I P数据报的以太网数据帧中的类型字段的值相同。接下来的两个1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。Op即操作(Option),1是ARP请求、2是ARP应答、3是RARP请求和4为RARP应答,第二行中该字段值为2表示应答。接下来的四个字段是发送端的硬件地址、发送端的IP地址、目的端的硬件地址和目的端IP地址。注重,这里有一些重复信息:在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。   表3的第2行为应答,当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。
硬件类型(2)
协议类型(2)
硬件地址长度(1)
协议地址长度(1)
发送端以太网地址(6)
发送端IP地址(4)
目的以太网地址(6)
目的IP地址(4)
推出各大专业服务器评测 服务器的安全性能
DELL服务器
联想服务器
浪潮服务器
曙光服务器
同方服务器
华硕服务器
宝德服务器
第二组 建立连接   1)下图显示的是3-5行的数据
点击查看大图图11
  2)解释数据包   这三行数据是两机建立连接的过程。   这三行的核心意思就是TCP协议的三次握手。TCP的数据包是靠IP协议来传输的。但IP协议是只管把数据送到出去,但不能保证IP数据报能成功地到达目的地,保证数据的可靠传输是靠TCP协议来完成的。当接收端收到来自发送端的信息时,接受端详发送短发送一条应答信息,意思是:“我已收到你的信息了。”第三组数据将能看到这个过程。TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。建立连接的过程就是三次握手的过程。   这个过程就像要我找到了张三向他借几本书,第一步:我说:“你好,我是担子”,第二步:张三说:“你好,我是张三”,第三步:我说:“我找你借几本书。”这样通过问答就确认对方身份,建立了联系。   下面来分析一下此例的三次握手过程。   1))请求端208号机发送一个初始序号(SEQ)给1号机。   2))服务器1号机收到这个序号后,将此序号加1值为作为应答信号(ACK),同时随机产生一个初始序号(SEQ),这两个信号同时发回到请求端208号机,意思为:“消息已收到,让我们的数据流以这个数开始。”   3))请求端208号机收到后将确认序号设置为服务器的初始序号(SEQ)加1为作为应答信号。   以上三步完成了三次握手,双方建立了一条通道,接下来就可以进行数据传输了。   下面分析TCP头信息就可以看出,在握手过程中TCP头部的相关字段也发生了变化。   3)头信息分析   如图12所示,第3数据包包含了三头信息:以太网(Ethernet)和IP和TCP。   头信息少了ARP多了IP、TCP,下面的过程也没有ARP的参与,可以这样理解,在局域网内,ARP负责的是在众多联网的计算机中找到需要找的计算机,找到工作就完成了。   以太网的头信息与第1、2行不同的是帧类型为0800,指明该帧类型为IP。
点击查看大图 图12
  IP协议头信息   IP是TCP/IP协议族中最为核心的协议。从图5可以看出所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输的,有个形象的比喻IP协议就像运货的卡车,将一车车的货物运向目的地。主要的货物就是TCP或UDP分配给它的。需要非凡指出的是IP提供不可靠、无连接的数据报传送,也就是说I P仅提供最好的传输服务但不保证IP数据报能成功地到达目的地。看到这你会不会担心你的E_MAIL会不会送到朋友那,其实不用担心,上文提过保证数据正确到达目的地是TCP的工作,稍后我们将具体解释。   如表4是IP协议的头信息。
点击查看大图表4 IP数据报格式及首部中的各字段
  图12中所公布分45 00―71 01为IP的头信息。这些数是十六进制表示的。一个数占4位,例如:4的二进制是0100   4位版本:  表示目前的协议版本号,数值是4表示版本为4,因此IP有时也称作IPv4;   4位首部长度:  头部的是长度,它的单位是32位(4个字节),数值为5表示IP头部长度为20字节。   8位服务类型(TOS):  00,这个8位字段由3位的优先权子字段,现在已经被忽略,4位的TOS子字段以及1 位的未用字段(现在为0)构成。4位的TOS子字段包含:最小延时、最大吞吐量、最高可靠性以及最小费用构成,这四个1位最多只能有一个为1,本例中都为0,表示是一般服务。   16位总长度:  总长度字段是指整个IP数据报的长度,以字节为单位。数值为00 30,换算为十进制为48字节,48字节=20字节 的IP头+28字节的TCP头,这个数据报只是传送的控制信息,还没有传送真正的数据,所以目前看到的总长度就是报头的长度。   16位标识:  标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1,第3行为数值为30 21,第5行为30 22,第7行为30 23。分片时涉及到标志字段和片偏移字段,本文不讨论这两个字段。   8位生存时间(TTL):  TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。ttl的初始值由源主机设置,一旦经过一个处理它的路由器,它的值就减去1。可根据TTL值判定服务器是什么系统和经过的路由器。本例为80,换算成十进制为128,WINDOWS操作系统TTL初始值一般为128,UNIX操作系统初始值为255,本例表示两个机器在同一网段且操作系统为WINDOWS。   8位协议:  表示协议类型,6表示传输层是TCP协议。   16位首部检验和:  当收到一份IP数据报后,同样对首部中每个16 位进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,假如首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。假如结果不是全1,即检验和错误,那么IP就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。   32位源IP地址和32位目的IP地址:  实际这是IP协议中核心的部分,但介绍这方面的文章非常多,本文搭建的又是一个最简单的网络结构,不涉及路由,本文对此只做简单介绍,相关知识请参阅其它文章。32位的IP地址由一个网络ID和一个主机ID组成。本例源IP地址为C0 A8 71 D0,转换为十进制为:192.168.113.208; 目的IP地址为C0 A8 71 01,转换为十进制为:192.168.113.1。网络地址为192.168.113,主机地址分别为1和208,它们的网络地址是相同的所以在一个网段内,这样数据在传送过程中可直接到达。   TCP协议头信息   如表5是ICP协议的头信息。
点击查看大图 表5 TCP包首部
  第三行TCP的头信息是:04 28 00 15 3A DF 05 53 00 00 00 00 70 02 40 00 9A 8D 00 00 02 04 05 B4 01 01 04 02   端口号:  常说FTP占21端口、HTTP占80端口、TELNET占23端口等,这里指的端口就是TCP或UDP的端口,端口就像通道两端的门一样,当两机进行通讯时门必须是打开的。源端口和目的端口各占16位,2的16次方等于65536,这就是每台电脑与其它电脑联系所能开的“门”。一般作为服务一方每项服务的端口号是固定的。本例目的端口号为00 15,换算成十进制为21,这正是FTP的默认端口,需要指出的是这是FTP的控制端口,数据传送时用另一端口,第三组的分析能看到这一点。客户端与服务器联系时随机开一个大于1024的端口,本例为04 28,换算成十进制为1064。你的电脑中了木马也会开一个服务端口。观察端口非常重要,不但能看出本机提供的正常服务,还能看出不正常的连接。Windows察看端口的命令时netstat。   32位序号:  也称为顺序号(Sequence Number),简写为SEQ,从上面三次握手的分析可以看出,当一方要与另一方联系时就发送一个初始序号给对方,意思是:“让我们建立联系吧?”,服务方收到后要发个独立的序号给发送方,意思是“消息收到,数据流将以这个数开始。”由此可看出,TCP连接完全是双向的,即双方的数据流可同时传输。在传输过程中双方数据是独立的,因此每个TCP连接必须有两个顺序号分别对应不同方向的数据流。   32位确认序号:  也称为应答号(Acknowledgment Number),简写为ACK。在握手阶段,确认序号将发送方的序号加1作为回答,在数据传输阶段,确认序号将发送方的序号加发送的数据大小作为回答,表示确实收到这些数据。在第三组的分析中将看到这一过程。   4位首部长度:  这个字段占4位,它的单位时32位(4个字节)。本例值为7,TCP的头长度为28字节,等于正常的长度2 0字节加上可选项8个字节。,TCP的头长度最长可为60字节(二进制1111换算为十进制为15,15*4字节=60字节)。   6个标志位:   URG 紧急指针,告诉接收TCP模块紧要指针域指着紧要数据   ACK 置1时表示确认号(为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。   PSH 置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。   RST 置1时重建连接。假如接收到RST位时候,通常发生了某些错误。   SYN 置1时用来发起一个连接。   FIN 置1时表示发端完成发送任务。用来释放连接,表明发送方已经没有数据发送了。   图13的3个图分别为3-5行TCP协议的头信息,这三行是三次握手的过程,我们看看握手的过程标志位发生了什么?   如图13-1请求端208号机发送一个初始序号(SEQ)给1号机。标志位SYN置为1。   如图13-2服务器1号机收到这个序号后,将应答信号(ACK)和随机产生一个初始序号(SEQ)发回到请求端208号机,因为有应答信号和初始序号,所以标志位ACK和SYN都置为1。   如图13-3请求端208号机收到1号机的信号后,发回信息给1号机。标志位ACK置为1,其它标志为都为0。注重此时SYN值为0,SYN是标示发起连接的,上两部连接已经完成。
点击查看大图
  16位窗口大小:  TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16字节字段,因而窗口大小最大为65535字节。   16位检验和:  检验和覆盖了整个的TCP报文段: TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。   16位紧急指针:  只有当U R G标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。   选项:图13-1和图13-2有8个字节选项,图13-3没有选项。最常见的可选字段是最长报文大小,又称为MSS (Maximum Segment Size)。每个连接方通常都在握手的第一步中指明这个选项。它指明本端所能接收的最大长度的报文段。图13-1可以看出208号机可以接受的最大字节数为1460字节,1460也是以太网默认的大小,在第三组的数据分析中可以看到数据传送正是以1460字节传送的。 握手小结   上面我们分开讲了三次握手,看着有点散,现在小结一下。
点击查看大图
第三组 数据传输   1)下图显示的是57-60行的数据
点击查看大图图14
  2)解释数据包   这四行数据是数据传输过程中一个发送一个接收的过程。   前文说过,TCP提供一种面向连接的、可靠的字节流服务。当接收端收到来自发送端的信息时,接受端要发送一条应答信息,表示收到此信息。数据传送时被TCP分割成认为最适合发送的数据块。一般以太网在传送时TCP将数据分为1460字节。也就是说数据在发送方被分成一块一块的发送,接受端收到这些数据后再将它们组合在一起。   57行显示1号机给208号机发送了大小为1514字节大小的数据,注重我们前文讲过数据发送时是层层加协议头的,1514字节=14字节以太网头 + 20字节IP头 + 20字节TCP头 + 1460字节数据   58行显示的应答信号ACK为:,这个数是57行得SEQ序号加上传送的数据号机将这个应答信号发给1号机说明已收到发来的数据。   59、60行显示的是继续传送数据的过程。   这个过程就像我向张三借书,借给我几本我要说:“我已借了你几本了。”,他说:“知道了”。   3)头信息   图15-1和图15-2分别是57行和58行的头信息,解释参考第二组。
点击查看大图
推出各大专业服务器评测 Linux服务器的安全性能
DELL服务器
联想服务器
浪潮服务器
曙光服务器
同方服务器
华硕服务器
宝德服务器
第四组 终止连接   1)下图显示的是93-96行的数据
点击查看大图 图16
  2)解释数据包   93-96是两机通讯完关闭的过程。   建立一个连接需要三次握手,而终止一个连接要经过4次握手。这是因为一个TCP连接是全双工(即数据在两个方向上能同时传递),每个方向必须单独地进行关闭。4次握手实际上就是双方单独关闭的过程。   本例文件下载完后,关闭浏览器终止了与服务器的连接图16的93-96行显示的就是终止连接所经过4次握手过程。   93行数据显示的是关闭浏览器后,如图17-1所示208号机将FIN置1连同序号(SEQ)发给1号机请求终止连接。   94行数据和图17-2显示1号机收到FIN关闭请求后,发回一个确认,并将应答信号设置为收到序号加1,这样就终止了这个方向的传输。   95行数据和图17-3显示1号机将FIN置1连同序号(SEQ)发给208号机请求终止连接。   96行数据和图17-4显示208号机收到FIN关闭请求后,发回一个确认,并将应答信号设置为收到序号加1,至此TCP连接彻底关闭。   3)头信息
点击查看大图 点击查看大图
五、扫描实例   下面我们再举个ping的实例,测试某台计算机是否通,最常用的命令就是ping命令。Ping 一台计算机,出现如图18所示界面就是通,出现如图19所示界面就是不通,不通有两种情况,一是该计算机不存在或没接网线,二是该计算机安装了防火墙并设置为不答应ping。如何区别这两种情况呢?下面还是利用iris跟踪上述情况。
  如图20是ping通的情况。   如图21是ping不通该计算机不存在的情况。从图可以看出ARP请求没有回应。   如图22是ping不通,该计算机存在但安装了防火墙的情况。从图可以看出ARP请求有回应。但ICMP请求没回应。   从分析可以看出虽然后两种情况的表面现象是一样的,但实质确是截然相反的。通过头信息可以清楚的看出PING是ICMP协议来完成的,通讯过程是在第三层完成的,没有用到第四层的TCP协议。
点击查看大图图20 点击查看大图图21 点击查看大图 图22
六、后记   本文不是个教程,许多问题都没有涉及到,比如TCP重发、IP分解、路由等,只是提出个学习思路,希望能起到抛砖引玉的作用。TCP/IP协议族是非常复杂的,但只要理解了还是不难学的。最后向感爱好的朋友提个问题:分别telnet三台机器,一台正常23端口开放,一台网是通的但23端口没开放,另外一台是不存在的。用我们学过的方法跟踪一下,比较三个的不同。其实这就是用TCP扫描判定对方机器是否在线的一种方法。
上一篇: (人气:1832)
下一篇:(人气:1785)
教程搜索服务
本月文章推荐
项目外包信息
组网技术文章分类
站长工具:
实用工具:
Copyright &
All rights reserved | 沪ICP备号

我要回帖

更多关于 手机双清是什么意思 的文章

 

随机推荐