分析tcp数据包结构(wireshark分析tcp数据包)

      最后更新:2024-03-25 01:34:36 手机定位技术交流文章

      简单的给我介绍下网络协议中的TCP协议的数据结构是怎么样的?

      sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。它在中定义,并包含很多成员变量供网络代码中的各子系统使用。这个结构在linux内核的发展过程中改动过很多次,或者是增加新的选项,或者是重新组织已存在的成员变量以使得成员变量的布局更加清晰。它的成员变量可以大致分为以下几类:Layout 布局General 通用Feature-specific功能相关Management functions管理函数 这个结构被不同的网络层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。L4向L3传递前会添加一个L4的头部,同样,L3向L2传递前,会添加一个L3的头部。添加头部比在不同层之间拷贝数据的效率更高。由于在缓冲区的头部添加数据意味着要修改指向缓冲区的指针,这是个复杂的操作,所以内核提供了一个函数skb_reserve(在后面的章节中描述)来完成这个功能。协议栈中的每一层在往下一层传递缓冲区前,第一件事就是调用skb_reserve在缓冲区的头部给协议头预留一定的空间。skb_reserve同样被设备驱动使用来对齐接收到包的包头。如果缓冲区向上层协议传递,旧的协议层的头部信息就没什么用了。例如,L2的头部只有在网络驱动处理L2的协议时有用,L3是不会关心它的信息的。但是,内核并没有把L2的头部从缓冲区中删除,而是把有效荷载的指针指向L3的头部,这样做,可以节省CPU时间。1. 网络参数和内核数据结构 就像你在浏览TCP/IP规范或者配置内核时所看到的一样,网络代码提供了很多有用的功能,但是这些功能并不是必须的,比如说,防火墙,多播,还有其他一些功能。大部分的功能都需要在内核数据结构中添加自己的成员变量。因此,sk_buff里面包含了很多像#ifdef这样的预编译指令。例如,在sk_buff结构的最后,你可以找到:struct sk_buff { ... ... ...#ifdef CONFIG_NET_SCHED _ _u32 tc_index;#ifdef CONFIG_NET_CLS_ACT _ _u32 tc_verd; _ _u32 tc_classid;#endif#endif} 它表明,tc_index只有在编译时定义了CONFIG_NET_SCHED符号才有效。这个符号可以通过选择特定的编译选项来定义(例如:"Device Drivers Networking supportNetworking options QoS and/or fair queueing")。这些编译选项可以由管理员通过make config来选择,或者通过一些自动安装工具来选择。前面的例子有两个嵌套的选项:CONFIG_NET_CLS_ACT(包分类器)只有在选择支持“QoS and/or fair queueing”时才能生效。顺便提一下,QoS选项不能被编译成内核模块。原因就是,内核编译之后,由某个选项所控制的数据结构是不能动态变化的。一般来说,如果某个选项会修改内核数据结构(比如说,在sk_buff里面增加一个项tc_index),那么,包含这个选项的组件就不能被编译成内核模块。你可能经常需要查找是哪个make config编译选项或者变种定义了某个#ifdef标记,以便理解内核中包含的某段代码。在2.6内核中,最快的,查找它们之间关联关系的方法,就是查找分布在内核源代码树中的kconfig文件中是否定义了相应的符号(每个目录都有一个这样的文件)。在2.4内核中,你需要查看Documentation/Configure.help文件。2. Layout Fields有些sk_buff成员变量的作用是方便查找或者是连接数据结构本身。内核可以把sk_buff组织成一个双向链表。当然,这个链表的结构要比常见的双向链表的结构复杂一点。就像任何一个双向链表一样,sk_buff中有两个指针next和prev,其中,next指向下一个节点,而 prev指向上一个节点。但是,这个链表还有另一个需求:每个sk_buff结构都必须能够很快找到链表头节点。为了满足这个需求,在第一个节点前面会插入另一个结构sk_buff_head,这是一个辅助节点,它的定义如下:struct sk_buff_head { struct sk_buff * next;struct sk_buff * prev; _ _u32 qlen;spinlock_t lock;}; qlen代表链表元素的个数。lock用于防止对链表的并发访问。sk_buff和sk_buff_head的前两个元素是一样的:next和prev指针。这使得它们可以放到同一个链表中,尽管sk_buff_head要比sk_buff小得多。另外,相同的函数可以同样应用于sk_buff和sk_buff_head。为了使这个数据结构更灵活,每个sk_buff结构都包含一个指向sk_buff_head的指针。这个指针的名字是list。图1会帮助你理解它们之间的关系。Figure 1. List of sk_buff elements
      TCP协议的数据结构是,原IP地址-原端口号-目标IP地址-目标端口号-数据检测-数据-校验。 这就是TCP协议数据的简单传输原理,也是它简单的数据结构, 如果你真想详细的了解这些知道话,可以去长沙新华看下,它们还想有这类的课程。
      简单的给我介绍下网络协议中的TCP协议的数据结构是怎么样的?

      TCP数据包是什么?

      概念性的东西就是以下内容:简单的来说,就是一种传输协议发出的一段数据源传输控制协议(Transmission Control Protocol, TCP) TCP协议主为了在主机间实现高可靠性的包交换传输协议。本文将描述协议标准和实现的一些方法。因为计算机网络在现代社会中已经是不可缺少的了,TCP协议主要在网络不可靠的时候完成通信,对军方可能特别有用,但是对于政府和商用部门也适用。TCP是面向连接的端到端的可靠协议。它支持多种网络应用程序。TCP对下层服务没有多少要求,它假定下层只能提供不可靠的数据报服务,它可以在多种硬件构成的网络上运行。下面的图是TCP在层次式结构中的位置,它的下层是IP协议,TCP可以根据IP协议提供的服务传送大小不定的数据,IP协议负责对数据进行分段,重组,在多种网络中传送。TCP的上面就是应用程序,下面是IP协议,上层接口包括一系列类似于操作系统中断的调用。对于上层应用程序来说,TCP应该能够异步传送数据。下层接口我们假定为IP协议接口。为了在并不可靠的网络上实现面向连接的可靠的传送数据,TCP必须解决可靠性,流量控制的问题,必须能够为上层应用程序提供多个接口,同时为多个应用程序提供数据,同时TCP必须解决连接问题,这样TCP才能称得上是面向连接的,最后,TCP也必须能够解决通信安全性的问题。网络环境包括由网关(或其它设备)连接的网络,网络可以是局域网也可以是一些城域网或广域网,但无论它们是什么,它们必须是基于包交换的。主机上不同的协议有不同的端口号,一对进程通过这个端口号进行通信。这个通信不包括计算机内的I/O操作,只包括在网络上进行的操作。网络上的计算机被看作包传送的源和目的结点。特别应该注意的是:计算机中的不同进程可能同时进行通信,这时它们会用端口号进行区别,不会把发向A进程的数据由B进程接收的。进程为了传送数据会调用TCP,将数据和相应的参数传送给TCP,于是TCP会将数据传送到目的TCP那里,当然这是通过将TCP包打包在IP包内在网络上传送达到的。接收方TCP在接收到数据后会通信上层应用程序,TCP会保证接收数据顺序的正确性。虽然下层协议可能不会保证顺序是正确的。这里需要说明的是网关在接收到这个包后,会将包解开,看看是不是已经到目的地了,如果没有到,应该走什么路由达到目的地,在决定后,网关会根据下一个网络内的协议情况再次将TCP包打包传送,如果需要,还要把这个包再次分成几段再传送。这个落地检查的过程是一个耗时的过程。从上面,我们可以看出TCP传送的基本过程,当然具体过程可能要复杂得多。在实现TCP的主机上,TCP可以被看成是一个模块,和文件系统区别不大,TCP也可以调用一些操作系统的功能,TCP不直接和网络打交道,控制网络的任务由专门的设备驱动模块完成。TCP只是调用IP接口,IP向TCP提供所有TCP需要的服务。通过下图我们可以更清楚地看到TCP协议的结构。上面已经说过了,TCP连接是可靠的,而且保证了传送数据包的顺序,保证顺序是用一个序号来保证的。响应包内也包括一个序列号,表示接收方准备好这个序号的包。在TCP传送一个数据包时,它同时把这个数据包放入重发队列中,同时启动记数器,如果收到了关于这个包的确认信息,将此包从队列中删除,如果计时超时则需要重新发送此包。请注意,从TCP返回的确认信息并不保证最终接收者接收到数据,这个责任由接收方负责。每个用于传送TCP的通道都有一个端口标记,因为这个标记是由每个TCP终端确定的,因此TCP可能不唯一,为了保证这个数值的唯一,要使用网络地址和端口号的组合达到唯一标识的目的,我们称这个为了套接字(Socket),一个连接由连接两端的套接字标识,本地的套接字可能和不同的外部套接字通信,这种通信是全双工的。通过向本地端口发送OPEN命令及外部套接字参数建立连接,TCP返回一个标记这个连接的名称,以后如果用户需要使用这个名称标记这个连接。为了保存这个连接的信息,我们假设有一个称为传输控制块(Transmission Control Block,TCB)的东西来保存。OPEN命令还指定这个连接的建立是主动请求还是被动等待请求。下面我们要涉及具体的功能了,TCP段以internet数据报的形式传送。IP包头传送不同的信息域,包括源地址和目的地址。TCP头跟在internet包头后面,提供了一些专用于TCP协议的信息。下图是TCP包头格式图:源端口:16位;目的端口:16位序列码:32位,当SYN出现,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN+1;确认码:32位,如果设置了ACK控制位,这个值表示一个准备接收的包的序列码;数据偏移量:4位,指示何处数据开始;保留:6位,这些位必须是0;控制位:6位;窗口:16位;校验位:16位;优先指针:16位,指向后面是优先数据的字节;选项:长度不定;但长度必须以字节记;选项的具体内容我们结合具体命令来看;填充:不定长,填充的内容必须为0,它是为了保证包头的结合和数据的开始处偏移量能够被32整除;我们前面已经说过有一个TCB的东西了,TCB里有存储了包括发送方,接收方的套接字,用户的发送和接收的缓冲区指针等变量。除了这些还有一些变量和发送接收序列号有关:发送序列变量SND.UNA - 发送未确认SND.NXT - 发送下一个SND.WND - 发送窗口SND.UP - 发送优先指针SND.WL1 - 用于最后窗口更新的段序列号SND.WL2 - 用于最后窗口更新的段确认号ISS - 初始发送序列号接收序列号RCV.NXT - 接收下一个RCV.WND - 接收下一个RCV.UP - 接收优先指针IRS - 初始接收序列号下图会帮助您了解发送序列变量间的关系:当前段变量SEG.SEQ - 段序列号SEG.ACK - 段确认标记SEG.LEN - 段长SEG.WND - 段窗口SEG.UP - 段紧急指针SEG.PRC - 段优先级连接进程是通过一系列状态表示的,这些状态有:LISTEN,SYN-SENT,SYN-RECEIVED,ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT和 CLOSED。CLOSED表示没有连接,各个状态的意义如下:LISTEN - 侦听来自远方TCP端口的连接请求;SYN-SENT - 在发送连接请求后等待匹配的连接请求;SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;ESTABLISHED - 代表一个打开的连接,数据可以传送给用户;FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;FIN-WAIT-2 - 从远程TCP等待连接中断请求;CLOSE-WAIT - 等待从本地用户发来的连接中断请求;CLOSING - 等待远程TCP对连接中断的确认;LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;TIME-WAIT - 等待足够的时间以确保远程TCP接收到连接中断请求的确认;CLOSED - 没有任何连接状态;TCP连接过程是状态的转换,促使发生状态转换的是用户调用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS;传送过来的数据段,特别那些包括以下标记的数据段SYN,ACK,RST和FIN;还有超时,上面所说的都会时TCP状态发生变化。下面的图表示了TCP状态的转换,但这图中没有包括错误的情况和错误处理,不要把这幅图看成是总说明了。3.3. 序列号请注意,我们在TCP连接中发送的字节都有一个序列号。因为编了号,所以可以确认它们的收到。对序列号的确认是累积性的,也就是说,如果用户收到对X的确认信息,这表示在X以前的数据(不包括X)都收到了。在每个段中字节是这样安排的:第一个字节在包头后面,按这个顺序排列。我们需要认记实际的序列空间是有限的,虽然很大,但是还是有限的,它的范围是0到2的32次方减1。我想熟悉编程的一定知道为什么要在计算两个段是不是相继的时候要使用2的32次方为模了。TCP必须进行的序列号比较操作种类包括以下几种:(a) 决定一些发送了的但未确认的序列号;(b) 决定所有的序列号都已经收到了;(c) 决定下一个段中应该包括的序列号。对于发送的数据TCP要接收确认,处理确认时必须进行下面的比较操作:SND.UNA = 最老的确认了的序列号;SND.NXT = 下一个要发送的序列号;SEG.ACK = 接收TCP的确认,接收TCP期待的下一个序列号;SEG.SEQ = 一个数据段的第一个序列号;SEG.LEN = 数据段中包括的字节数;SEG.SEQ+SEG.LEN-1 = 数据段的最后一个序列号。请注意下面的关系:SND.UNA < SEG.ACK =< SND.NXT如果一个数据段的序列号小于等于确认号的值,那么整个数据段就被确认了。而在接收数据时下面的比较操作是必须的:RCV.NXT = 期待的序列号和接收窗口的最低沿;RCV.NXT+RCV.WND-1 = 最后一个序列号和接收窗口的最高沿;SEG.SEQ = 接收到的第一个序列号;SEG.SEQ+SEG.LEN-1 = 接收到的最后一个序列号;上面几个量有如下关系:RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND 或 RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND测试的第一部分是检查数据段的开始部分是否在接收窗口中,第二部分是检查数据段的结束部分是否也在接收窗口内;上面两个检查通过任何一个就说明它包括窗口要求的数据。实际中的情况会更复杂一些,因为有零窗口和零数据段长,因此我们有下面四种情况:段长度接收窗口测试00SEG.SEQ = RCV.NXT0>0RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND>00不可接受>0>0RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND或RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND请注意接收窗口的大小可以为零,在窗口为零时它只用来接收ACK信息,因此对于一个TCP来说,它可以使用零大小窗口在发送数据的同时接收数据。即使接收窗口的大小为零,TCP必须处理所有接收到信息的RST和URG域。我们也应用计数的方式保护了一些特定的控制信息,这是通过隐式地使用一些控制标记使数据段能够可靠地重新发送(或确认)为达到的。控制信息并不在段数据空间中传送,因此,我们必须采用隐式指定序列号进行控制。SYN和FIN是需要保护的控制量,这两个控制量也只在连接打开和关闭时使用。SYN被认为是在第一个实际数据之间的数据,而FIN是最后一个实际数据之后的数据。段长度(SEG.LEN)包括数据和序列号空间,如果出现了SYN,那么SEG.SEQ是SYN的序列号。初始序列号选择协议对于特定连接被重复使用没有什么限制。连接是由一对套接字定义的。新的连接实例被定义为连接的另一次恢复,这就带来了问题:TCP如果确定多个数据段是从以前连接的另一次恢复中取得的呢?这个问题在连接迅速打开和关闭,或因为内存原因被关闭然后又迅速建立后显示特别突出。为了避免混乱,用户必须避免因此恢复使用某一连接,而使序列号发生混乱。我们必须保证序列号的正确性,即使TCP失败,根本不知道以前的序列号是什么的情况下也要保证序列号的正确性。当新的连接被创建时,产生一个新的初始序列号(ISN)产生子,它用来选择一个新的32位ISN。产生子和32位时钟的低度位字节相关,低位字节的刷新频率大概是4微秒,因此ISN的循环时间大概是4.55小时。因此我们把网络包的最长生存时间(MSL)小于4.55小时,因此我们可以认为ISN是唯一的。对于每个连接都有发送序列号和接收序列号,初始发送序列号(ISS)由发送TCP选择,而初始接收序列号是在连接建立过程中产生的。对于将要连接或初始化的连接,两个TCP必须和对方的初始序列号同步。这通过交换一个控制位SYN和初始序列号完成。我们把带有SYN的数据段称为"SYNs"。同步的获得过程这里就不重复了,每方必须发送自己的序列号并返回对对方序列号的确认。1) A --> B SYN 本方序列号是X2) A <-- B ACK 本方序列号被确认3) A <-- B SYN 对方序列号是Y4) A --> B ACK 确认对方序列号上面的第2步和第3步可以合并,这时可以成为3阶段,所以我们可以称它为三消息握手。这个过程是必须的,因为序列号不和全局时钟关联,TCP也可以有不同的机制选择ISN。接收到第一个SYN的接收方不可能知道这个数据段是不是被延时,除非它记住了在连接上使用的最近的序列号(这通常是不可能的),因此它必须要求发送者确认。为了保证TCP获得的确认是刚才发送的段产生的,而不是仍然在网络中的老数据段产生的,因此TCP必须在MSL时间之内保持沉默。在本文中,我们假设MSL=2小时,这是出于工程的需要,如果用户觉得可以,他可以改变MSL。请注意如果TCP重新初始化,而内存中的序列号正在使用,不需要等待,但必须确认使用的序列号比当前使用的要大。如果一台主机在未保留任何序列号的情况下失败,那么它应该在MSL时间之内不发出任何数据段。下面将会这一情况进行说明。TCP的实现可以不遵守这个规定,但是这会造成老数据被当成新数据接收,而新数据被当成老数据拒绝的情况。每当数据段形成并进入输出队列,TCP会为它指定序列空间中的一个值。TCP中多复本检测和序列算法都依赖于这个地址空间,在对方发送或接收之前不会超过2的32次方个包存在于输出队列中。所有多余的数据段都会被删除。如果没有这个规定,会出现多个数据段被指定同一个序列号的情况,会造成混乱。数据段中序列号的多少和数据段中的字节数一样多。在通常情况下,TCP保留下一个要发送的序列号和还未确认的最老的序列号,不要在没有确认的时候就再次使用,这样会有些风险,也正是因为这样的目的,所以序列空间很大。对于2M的网络,要4.5小时来耗尽序列空间,因为一个数据段可能的最大生存时间也不过十几分之一秒,这就留下了足够的空间;而在100M的网络上需要5.4分钟,虽然少了点,但也可以了。如果在实现TCP时没有为保存序列号留下空间,那清除多余的包可能就不能实现了,因此推荐这种类型的TCP实现最好在失败后等待MSL时间,这样保证多余的包被删除。这种情况有时候也可能会出现在保留序列号的TCP实现中。如果TCP在选择一个另一个TCP连接正在使用的序列号时,这台主机突然失败了,这就产生了问题。这个问题的实质在于主机不知道它失败了多久,也不知道多余的复本是不是还在网络中。处理这种问题的方法是等待MSL时间,如果不这样就要冒着对方错误接收数据的危险,要等待的时间也就称为“沉默时间”。实现者可以让用户选择是不是等待,但是无论用户如何也不见得非要等待MSL时间。3.4. 建立一个连接建立连接应用的是三消息握手。如果双方同时都发送SYN也没有关系,双方会发现这个SYN中没有确认,于是就知道了这种情况,通常来说,应该发送一个"reset"段来解决这种情况。三消息握手减少了连接失败的可能性。下面就是一个例子,在尖括号是的就是数据段中的内容和标记。其它的就不多说了。在第2行,TCP A发送SYN初始化序列号,表示它要使用序列号100;第3行中,TCP B给出确认,并且期待着A的带有序列号101的数据段;第4行,TCP A给出确认,而在第5行,它也给出确认,并发送了一些数据,注意第4行的序列号与第5号的一样,因为ACK信息不占用序列号空间内的序列号。同时产生请求的情况如下图所示,只复杂一点。使用三消息握手的主要原因是为了防止使用过期的数据段。为了这个目的,必须引入新的控制消息,RESET。如果接收TCP处理非同步状态,在接收到RESET后返回到LISTEN状态。如果TCP处理下面几种状态ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT时,放弃连接并通过用户。我们下面就详细说明后一种情况。通过上面的例子,我们可以看出TCP连接是如何从过期数据段的干扰下恢复的。请注意第4行和第5行中的RST(RESET信号)。半开连接和其它非正常状态如果一方在未通过另一方的情况下关闭连接,或双方虽然失败而不同步的情况我们称为半开连接状态。在一方试图发送数据时连接会自动RESET。然而这种情况毕竟属于不正常情况。应该做出相应的处理。如果A处的连接已经关闭,B处并不知道。当B希望发送数据到A时,就会收到RESET信号,表示这个TCP连接有误,要中止当前连接。假设A和B两个进程相互通信的时候A的TCP发生了失败,A依靠操作系统支持TCP的存在,通常这种情况下会有恢复机制起作用,当TCP重新恢复的时候,A可能希望从恢复点开始工作。这样A可能会试图OPEN连接,然后在这个它认为还是打开的连接上传送数据,这时A会从本地(也就是A的)TCP上获得错误消息“未打开连接”。A的TCP将发送包括SYN的数据段。下面的例子将显示这一过程:上面这个例子中,A方收到的信息并没有确认任何东西,这时候A发现出了问题,于是发送了RST控制信息。另一种情况是发生在A失败,而B方仍然试图发送数据时,下面的例子可以表示这种情况,请注意第2行中A对B发送来的信息不知所云。在下面的例子中,A方和B方进行的被动连接,它们都在等待SYN信息。过期的包传送到B方使B回应了,而收到回应的A却发现不对头,传送RST控制信息,B方返回被动LISTEN状态。现实中的情况太多了,我们列举一些产生RST控制信息的规则如下:通常情况下,RST在收到的信息不是期待的信息时产生。如果在不能确定时不要轻易发送RST控制信息。下面有三类情况:如果连接已经不存在,而发送来的消息又不是RST,那么要返回RST。如果想拒绝对不存在的连接进行SYN,可以使用这种办法。如果到达的信息有一个ACK域,返回的RST信息可以从ACK域中取得序列号,如果没有这个域,就把RST的序列号设置为0,ACK域被设备为序列号和到达段长度之和。连接仍然处于CLOSE状态。如果连接处于非同步状态(LISTEN,SYN-SENT,SYN-RECEIVED),而且收到的确认是对未发出包的确认或是接收到数据段的安全级别与不能连接要求的相一一致时,就发送RST。如果SYN未被确认时,而且收到的数据段的优先级比要求的优先级要高,那么要么提高本地优先级(得事先征得用户和系统的许可)要么发送RST;如果接收数据段的优先级比要求的优先级低,就算是匹配了,当然如果对方发现优先级不对提高了优先级,在下一个包中提高了优先级,这就不算是匹配了。如果连接已经进入SYN,那么接收到数据段的优先级必须和本地优先级一样,否则发送RST。如果到达的信息有一个ACK域,返回的RST信息可以从ACK域中取得序列号,如果没有这个域,就把RST的序列号设置为0,ACK域被设备为序列号和到达段长度之和。连接仍然处于与原来相同的状态。 如果连接处于同步状态(ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT),任何超出接收窗口的序列号的数据段都产生如下结果:发出一个空确认数据段,此段中包括当前发送序列号,另外还包括一个确认指出希望接收的下一个数据段的序列号,连接仍然保存在原来的状态。如果因为安全级,优先级之类的问题,那就发送RST信号然后进入CLOSED状态。
      这是电脑的传输数据!!!!!!!!!!!!
      因为迅雷有一个加速程序,TCP/ip协议,主要功能就是加快网络数据流下载速度,写入缓冲文件,都被你拦截掉,那就等于没有启动加速程序.
      TCP简介 TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK); 如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。首先,TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,他是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。在拥塞控制上,采用慢启动算法。TCP所支持的服务类型  不管怎样,TCP/IP是一个协议集。为应用提供一些"低级"功能,这些包括IP、TCP、UDP。其它是执行特定任务的应用协议,如计算机间传送文件、发送电子邮件、或找出谁注册到另外一台计算机。因此, 最重要的"商业"TCP/IP服务有:* 文件传送File Transfer。文件传送协议FTP(File Transfer Protocol)允许用户从一台计算机到另一台取得文件,或发送文件到另外一台计算机。从安全性方面考虑,需要用户指定一个使用其它计算机的用户名和口令。它不同与NFS(Network File System)和Netbios协议。一旦你要访问另一台 系统中的文件,任何时刻都要运行FTP。而且你只能拷贝文件到自己的机器中去来使用它。(RFC 959中关于FTP的说明)* 远程登录Remote login网络终端协议TELNET允许用户登录到网络上任一计算机上。你可启动一个远程进程连接到指定的计算机,直到进程结束,期间你所键入的内容被送到所指定的计算机。值得注意的是,这时你实际上是与你的计算机进行对话。TELENET程序使得你的计算机在整个过程中不见了,所敲的每一个字符直接送到所登录的计算机系统。一般的说,这种远程连接是通过类式拨号连接的,也就是,拨通后,远程系统提示你输入注册名和口令,退出远程系统,TELNET程序也就退出,你又与自己的计算机对话了。微电脑中的TELNET工具一般含有一个终端仿真程序。* 计算机邮件Mail允许你发送消息给其它计算机的用户。通常,人们趋向于使用指定的一台或两台计算机。计算机邮件系统只需你简单地往另一用户的邮件文件中添加信息,但随之产生问题,使用的微电脑的环境不同,还有重要的是宏(MACRO)不适合于接受计算机邮件。为了发送电子邮件,邮件软件希望连接到目的计算机,如果是微电脑,也许它已关机,或者正在运行另一个应用程序呢?出于这种原因,通常由一个较大的系统来处理这些邮件,也就是一个一直运行着的邮件服务器。邮件软件成为用户从邮件服务器取回邮件的一个界面。任何一个的TCP/IP工具提供上述这些服务。这些传统的应用功能在基于TCP/IP的网络中一直扮演非常重要的角色。目前情况有点变化,这些功能使用也发生变化,如老系统的改造,计算机的发展等,出现了各种安装版本,如:微电脑、工作站、小型机、和巨型机等。这些计算机好像在一起完成指定的任务,尽管有时看来像是只用到某个指定 的计算机,但它是通过网络得到其它计算机系统的服务。服务器Server是为网络上其它提供指定服务的系统,客户Client是得到这种服务的另外计算机系统。(值得注意的是,服务/客户机不一定是不同的计算机,有可能是同一计算机中的不同运行程序)。以下是几种目前计算机上典型的一些服务,这些服务可在TCP/IP网络上调用。* 网络文件系统(NFS)这种访问另一计算机的文件的方法非常接近于流行的FTP。网络文件系统提供磁盘或设备服务,而无需特定的网络实用程序来访问另一系统的文件。可以简单地认为它是一个外加的磁盘驱动器。这种额外"虚拟"磁盘驱动器就是其它计算机系统的磁盘。这非常有用。你只需加大几台计算机的磁盘容量,就可使网络上其他用户访问它,且不说所带来的经济效益,它还能够让几台工作的计算机共享相同的文件。它也使得系统维护和备份易如反掌,因为再不必为大量的不同机器上 的文件的升级和备份而担心。* 远程打印(Remote printing)允许你使用其它计算机上的打印机,好像这些打印机直接连到你的计算机上。* 远程执行(Remote execution)允许你请求运行在不同计算机上的特殊程序。当你在一个很小的计算机上运行一个需要大机系统资源的程序时,这时候远程执行非常有用。* 名字服务器(Name servers)在一个大的系统安装过程中,需要用到大量的各种名字,包括用户名、口令,姓名、网络地址、帐号等,管理这些是非常令人乏味的。因此将这些数据形成数据库,放到一个小系统中去,其它系统通过网络来访问这些数据。* 终端服务器(Terminal servers)很多的终端连接安装不再直接将终端连到计算机,取而代之的是,将他们连接到终端服务器上。终端服务器是一个小的计算机,它只需知道怎样运行TELNET(或其它一些完成远程登录的协议)。如果你的终端想连上去,只用键入要连的计算机名就可。通常有可能同时有几个这种连接,这时终端服务器采用快速开关技术来切换。上述所描述的一些协议是由Berkeley, Sun,或其它组织定义的。因此,它们不是互联网协议集(Internet Protocol Suite)的一部分, 只是使用到TCP/IP的工具,如同一般的TCP/IP 应用协议。因为协议的定义不一致,并且商业支持的TCP/IP工具广泛应用,也许会把这些协议作为互联协议集中的一部分。上述列出的只是基于TCP/IP部分服务的一些简单例子,但包含了一些"主要"的应用。 TCP功能:提供计算机程序间连接、检测和丢弃重复的分组、完成数据报的确认、流量控制和网络拥塞。
      TCP数据包是什么?

      数据包的结构是怎样的?

      数据包的结构非常复杂,不是三言两语能够说清的,在这里主要了解一下它的关键构成就可以了,这对于理解TCP/IP协议的通信原理是非常重要的。数据包主要由“目的IP地址”、“源IP地址”、“净载数据”等部分构成。数据包的结构与我们平常写信非常类似,目的IP地址是说明这个数据包是要发给谁的,相当于收信人地址;源IP地址是说明这个数据包是发自哪里的,相当于发信人地址;而净载数据相当于信件的内容。 正是因为数据包具有这样的结构,安装了TCP/IP协议的计算机之间才能相互通信。我们在使用基于TCP/IP协议的网络时,网络中其实传递的就是数据包。理解数据包,对于网络管理的网络安全具有至关重要的意义。
      数据包的结构是怎样的?

      谁能告诉我如何阐述TCP/IP协议体系结构

      、TCP/IP协议栈 四层模型TCP/IP这个协议遵守一个四层的模型概念:应用层、传输层、互联层和网络接口层。网络接口层模型的基层是网络接口层。负责数据帧的发送和接收,帧是独立的网络信息传输单元。网络接口层将帧放在网上,或从网上把帧取下来。互联层互联协议将数据包封装成internet数据报,并运行必要的路由算法。这里有四个互联协议:网际协议IP:负责在主机和网络之间寻址和路由数据包。地址解析协议ARP:获得同一物理网络中的硬件主机地址。网际控制消息协议ICMP:发送消息,并报告有关数据包的传送错误。互联组管理协议IGMP:被IP主机拿来向本地多路广播路由器报告主机组成员。传输层传输协议在计算机之间提供通信会话。传输协议的选择根据数据传输方式而定。两个传输协议:传输控制协议TCP:为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况。并适用于要求得到响应的应用程序。用户数据报协议UDP:提供了无连接通信,且不对传送包进行可靠的保证。适合于一次传输小量数据,可靠性则由应用层来负责。应用层应用程序通过这一层访问网络。网络接口技术IP使用网络设备接口规范NDIS向网络接口层提交帧。IP支持广域网和本地网接口技术。串行线路协议TCP/IPG一般通过internet串行线路协议SLIP或点对点协议PPP在串行线上进行数据传送。(是不是我们平时把它称之为异步通信,对于要拿LINUX提供建立远程连接的朋友应该多研究一下这方面的知识)?2、ARP要在网络上通信,主机就必须知道对方主机的硬件地址(我们不是老遇到网卡的物理地址嘛)。地址解析就是将主机IP地址映射为硬件地址的过程。地址解析协议ARP用于获得在同一物理网络中的主机的硬件地址。解释本地IP地址(要了解地址解析工作过程的朋友看好了)主机IP地址解析为硬件地址:(1)当一台主机要与别的主机通信时,初始化ARP请求。当该IP断定IP地址是本地时,源主机在ARP缓存中查找目标主机的硬件地址。(2)要是找不到映射的话,ARP建立一个请求,源主机IP地址和硬件地址会被包括在请求中,该请求通过广播,使所有本地主机均能接收并处理。(3)本地网上的每个主机都收到广播并寻找相符的IP地址。(4)当目标主机断定请求中的IP地址与自己的相符时,直接发送一个ARP答复,将自己的硬件地址传给源主机。以源主机的IP地址和硬件地址更新它的ARP缓存。源主机收到回答后便建立起了通信。解析远程IP地址不同网络中的主机互相通信,ARP广播的是源主机的缺省网关。目标IP地址是一个远程网络主机的话,ARP将广播一个路由器的地址。(1)通信请求初始化时,得知目标IP地址为远程地址。源主机在本地路由表中查找,若无,源主机认为是缺省网关的IP地址。在ARP缓存中查找符合该网关记录的IP地址(硬件地址)。(2)若没找到该网关的记录,ARP将广播请求网关地址而不是目标主机的地址。路由器用自己的硬件地址响应源主机的ARP请求。源主机则将数据包送到路由器以传送到目标主机的网络,最终达到目标主机。(3)在路由器上,由IP决定目标IP地址是本地还是远程。如果是本地,路由器用ARP(缓存或广播)获得硬件地址。如果是远程,路由器在其路由表中查找该网关,然后运用ARP获得此网关的硬件地址。数据包被直接发送到下一个目标主机。(4)目标主机收到请求后,形成ICMP响应。因源主机在远程网上,将在本地路由表中查找源主机网的网关。找到网关后,ARP即获取它的硬件地址。(5)如果此网关的硬件地址不在ARP缓存中,通过ARP广播获得。一旦它获得硬件地址,ICMP响应就送到路由器上,然后传到源主机。ARP缓存为减少广播量,ARP在缓存中保存地址映射以备用。ARP缓存保存有动态项和静态项。动态项是自动添加和删除的,静态项则保留在CACHE中直到计算机重新启动。ARP缓存总是为本地子网保留硬件广播地址(0xffffffffffffh)作为一个永久项。此项使主机能够接受ARP广播。当查看缓存时,该项不会显示。每条ARP缓存记录的生命周期为10分钟,2分钟内未用则删除。缓存容量满时,删除最老的记录。加入静态(永久)记录通过添加静态ARP项可减少ARP请求访问主机的次数。ARP包的结构ARP结构的字段如下:硬件类型--使用的硬件(网络访问层)类型。协议类型--解析过程中的协议使用以太类型的值。硬件地址长度--硬件地址的字节长度,对于以太网和令牌环来说,其长度为6字节。协议地址长度--协议地址字节的长度,IP的长度是4字节。操作号--指定当前执行操作的字段。发送者的硬件地址--发送者的硬件地址。发送者的协议地址--发送者的协议地址。目的站硬件地址--目标者的硬件地址。目的站协议地址--目标者的协议地址。3、ICMP和IGMPinternet控制消息协议ICMP是用于报告错误并代表IP对消息进行控制。IP运用互联组管理协议IGMP来告诉路由器,某一网络上指导组中的可用主机。ICMPICMP源抑制消息:当TCP/IP主机发送数据到另一主机时,如果速度达到路由器或者链路的饱和状态,路由器发出一个ICMP源抑制消息。ICMP数据包结构类型:一个8位类型字段,表示ICMP数据包类型。代码:一个8位代码域,表示指定类型中的一个功能。如果一个类型中只有一种功能,代码域置为0。检验和:数据包中ICMP部分上的一个16位检验和。指定类型的数据随每个ICMP类型变化的一个附加数据。IGMPIGMP信息传给别的路由器以使每个支持多路广播的路由器获知哪个主机组和哪个网络中。IGMP包结构版本:IGMP的版本,值一般为0x1h。类型:IGMP消息的类型。0x1h类型称为主机成员请求,在多路广播路由器上用于指定多级组中的任何成员轮询一个网络。0x2h类型称为主机成员报告,在主机上用于发布指定组中的成员情况或对一个路由器的主机成员请求进行回答。未用:未用的域名被发送者置零且被接收者忽略。检验和:IGMP头的一个16位检验和。组地址:主机用该组地址在一个主机成员请求中存储IP多路广播地址。在主机成员请求中,组地址被全置零,而且硬件级的多路广播地址被用来标示主机组。4、IPIP是一个无连接的协议,主要就是负责在主机间寻址并为数据包设定路由,在交换数据前它并不建立会话。因为它不保证正确传递,另一方面,数据在被收到时,IP不需要收到确认,所以它是不可靠的。有一些字段,在当数据从传输层传下来时,会被附加在数据包中,我们来看一下这些字段:源IP地址:用IP地址确定数据报发送者。目标IP地址:用IP地址确定数据报目标。协议:告知目的机的IP是否将包传给TCP或UDP。检查和:一个简单的数学计算,用来证实收到的包的完整性。TTL生存有效时间:指定一个数据报被丢弃之前,在网络上能停留多少时间(以秒计)。它避免了包在网络中无休止循环。路由器会根据数据在路由器中驻留的时间来递减TTL。其中数据报通过一次路由器,TTL至少减少一秒。根据我们前面提到关于ARP的知识,如果IP地址目标为本地地址时,IP将数据包直接传给那个主机;如果目标地址为远程地址的话,IP在本地的路由表中查找远程主机的路由(看来好象我们平时拨114一样)。如果找到一个路由,IP用它传送数据包。如果没找到呢,就会将数据包发送到源主机的缺省网关,也称之为路由器。(很多时候一直在搞网关和路由器的定义,其实我觉得在学的时候不一定死抠概念,现在硬件和软件结合的产品越来越多了,一时很分清的,只要我们运用的时候可以解决实际问题嘛。)这样当路由器收到一个包后,该包向上传给IP:(1)如果交通阻塞(听起来蛮可怕的),包在路由器中停滞,TTL至少减1或更多。要是它降到0的话,包就会被抛弃。(2)如果对于下一网络来说包太大的话,IP会将它分割成若干个小包。(3)如果包被分解,IP为每个新包制造一个新头,其中包括:一个标志,用来显示其它小包在其后;一个小包ID,用来确定所有小包是一起的;一个小包偏移,用来告诉接收主机怎么重新组合它们。(4)IP计算一个新的检验和。(5)IP获取一个路由的目标硬件地址。(6)IP转发包。在下一主机,包被发送到TCP或UDP。每个路由器都要重复该过程。直到包到达最终目的地。当包到达最终目的地后,IP将小包组装成原来的包。5、TCPTCP是一种可靠的面向连接的传送服务。它在传送数据时是分段进行的,主机交换数据必须建立一个会话。它用比特流通信,即数据被作为无结构的字节流。通过每个TCP传输的字段指定顺序号,以获得可靠性。如果一个分段被分解成几个小段,接收主机会知道是否所有小段都已收到。通过发送应答,用以确认别的主机收到了数据。对于发送的每一个小段,接收主机必须在一个指定的时间返回一个确认。如果发送者未收到确认,数据会被重新发送;如果收到的数据包损坏,接收主机会舍弃它,因为确认未被发送,发送者会重新发送分段。端口SOCKETS实用程序使用一个协议端口号来标明自己应用的唯一性。端口可以使用0到65536之间的任何数字。在服务请求时,操作系统动态地为客户端的应用程序分配端口号。套接字套接字在要领上与文件句柄类似,因为其功能是作为网络通信的终结点。一个应用程序通过定义三部分来产生一个套接字:主机IP地址、服务类型(面向连接的服务是TCP,无连接服务是UDP)、应用程序所用的端口。TCP端口TCP端口为信息的传送提供定地点,端口号小于256的定义为常用端口。TCP的三次握手TCP对话通过三次握手来初始化。三次握手的目的是使数据段的发送和接收同步;告诉其它主机其一次可接收的数据量,并建立虚连接。我们来看看这三次握手的简单过程:(1)初始化主机通过一个同步标志置位的数据段发出会话请求。(2)接收主机通过发回具有以下项目的数据段表示回复:同步标志置位、即将发送的数据段的起始字节的顺序号、应答并带有将收到的下一个数据段的字节顺序号。(3)请求主机再回送一个数据段,并带有确认顺序号和确认号。TCP滑动窗口TCP滑动窗口用来暂存两台主机间要传送的数据,有点类似CACHE。每个TCP/IP主机有两个滑动窗口:一个用于接收数据,另一个用于发送数据。6、UDP用户数据报协议UDP提供了无连接的数据报服务。它适用于无须应答并且通常一次只传送少量数据的应用软件。UDP端口端口作为多路复用的消息队列使用。15 NETSTAT 网络状态53 DOMAIN 域名服务器69 TFTP 平凡文件传送协议137 NETBIOS-NS NETBIOS命令服务138 NETBIOS-DGM NETBIOS数据报服务161 SNMP SNMP网络监视器IP地址分配1、IP地址IP地址标识着网络中一个系统的位置。我们知道每个IP地址都是由两部分组成的:网络号和主机号。其中网络号标识一个物理的网络,同一个网络上所有主机需要同一个网络号,该号在互联网中是唯一的;而主机号确定网络中的一个工作端、服务器、路由器其它TCP/IP主机。对于同一个网络号来说,主机号是唯一的。每个TCP/IP主机由一个逻辑IP地址确定。网络号和主机号IP地址有两种表示形式:二进制表示(1和0太多了就搞不清)和点分十进制表示。每个IP地址的长度为4字节,由四个8位域组成,我们通常称之为八位体。八位体由句点.分开,表示为一个0-255之间的十进制数。一个IP地址的4个域分别标明了网络号和主机号。2、地址类型为适应不同大小的网络,internet定义了5种IP地址类型。可以通过IP地址的前八位来确定地址的类型:类型 IP形式 网络号 主机号A类 w.x.y.z w x.y.zB类 w.x.y.z w.x y.zC类 w.x.y.z w.x.y z我们来看一下这5类地址:A类地址:可以拥有很大数量的主机,最高位为0,紧跟的7位表示网络号,余24位表示主机号,总共允许有126个网络。B类地址:被分配到中等规模和大规模的网络中,最高两位总被置于二进制的10,允许有16384个网络。C类地址:被用于局域网。高三位被置为二进制的110,允许大约200万个网络。D类地址:被用于多路广播组用户,高四位总被置为1110,余下的位用于标明客户机所属的组。E类地址是一种仅供试验的地址。3、地址分配指南在分配网络号和主机号时应遵守以下几条准则:(1)网络号不能为127。大家知道该标识号被保留作回路及诊断功能,还记得平时ping 127.0.0.1?(2)不能将网络号和主机号的各位均置1。如果每一位都是1的话,该地址会被解释为网内广播而不是一个主机号。(TCP/IP是一个可广播的协议嘛)(3)相应于上面一条,各位均不能置0,否则该地址被解释为“就是本网络”。(4)对于本网络来说,主机号应该是唯一。(否则会出现IP地址已分配或有冲突之类的错误)分配网络号对于每个网络以及广域连接,必须有唯一的网络号,主机号用于区分同一物理网络中的不同主机。如果网络由路由器连接,则每个广域连接都需要唯一的网络号。分配主机号主机号用于区分同一网络中不同的主机,并且主机号应该是唯一的。所有的主机包括路由器间的接口,都应该有唯一的网络号。路由器的主机号,要配置成工作站的缺省网关地址。有效的主机号A类:w.0.0.1--w.255.255.254B类:w.x.0.1--w.x.255.254C类:w.x.y.1--w.x.y.2544、子网屏蔽和IP地址TCP/IP上的每台主机都需要用一个子网屏蔽号。它是一个4字节的地址,用来封装或“屏蔽”IP地址的一部分,以区分网络号和主机号。当网络还没有划分为子网时,可以使用缺省的子网屏蔽;当网络被划分为若干个子网时,就要使用自定义的子网屏蔽了。缺省值我们来看看缺省的子网屏蔽值,它用于一个还没有划分子网的网络。即使是在一个单段网络上,每台主机也都需要这样的缺省值。它的形式依赖于网络的地址类型。在它的4个字节里,所有对应网络号的位都被置为1,于是每个八位体的十进制值都是255;所有对就主机号的位都置为0。例如:C类网地址192.168.0.1和相应的缺省屏蔽值255.255.255.0。确定数据包的目的地址我们说把屏蔽值和IP地址值做“与”的操作其实是一个内部过程,它用来确定一个数据包是传给本地还是远程网络上的主机。其相应的操作过程是这样的:当TCP/IP初始化时,主机的IP地址和子网屏蔽值相“与”。在数据包被发送之前,再把目的地址也和屏蔽值作“与”,这样如果发现源IP地址和目的IP地址相匹配,IP协议就知道数据包属于本地网上的某台主机;否则数据包将被送到路由器上。 注:我们知道“与”操作是将IP地址中的每一位与子网屏蔽中相应的位按逻辑与作比较。
      谁能告诉我如何阐述TCP/IP协议体系结构

      简述TCP与UDP之间的相同点和不同点

      相同点:1、OSI网络层它们都根据OSI参考模型生活在同一层。我们称这层为传输层。在套接字之间的这一层中,传输数据。他们在这方面没有区别。2、安全从安全角度来看,TCP和UDP都是相同的。实际上,TCP由于其会话管理而具有一些小优势,但从总体上看,如果实现SSL,加密等安全机制,则存在安全性。除UDP之外,实现类似TCP的协议的SSL / TLS非常容易。另一方面,像RTP这样的语音通信协议可以升级到SRTP,使底层UDP更安全。不同点:1、数据包结构UDP具有精简包结构。UDP在其标题部分中仅提供源,目标端口,长度,校验和。TCP在包中有更多字段,因为TCP传输有更多的步骤和控件来进行包传递。TCP有12个头字段。2、复杂程度TCP绝对比UDP协议更复杂。正如我们在上侧看到的,TCP具有很多传输相关机制的区域。例如,TCP提供了设置传输缓冲区相关内存的窗口机制。UDP只有校验和机制和数据包计数器,有时候没有实现。3、算法要使用TCP传输数据,必须使用名为3次握手的方法创建会话。第一个客户端发送一个包含SYN标志的数据包,服务器用ACK标志响应,最后一步客户端发送SYNC + ACK以完成与相关服务器的TCP会话。UDP没有任何特殊算法。UDP包直接发送到服务器的端口。管理层通常在上层应用程序层中执行。4、速度TCP协议的复杂性使TCP比UDP慢。至少要发送一个字节,需要进行会话初始化,并在数据传输后关闭会话。这使TCP变慢。关于TCP的速度已经做了一些工作,但架构是有限的新增强功能。如果您通过光纤传输UDP,则UDP 速度很快.UDP速度很快,因为没有会话或会话终止的算法。5、可靠性TCP是一种可靠的协议,因为它运行机制来防止数据丢失或更改。TCP使用会话来提高数据传输的可靠性。同样在数据传输中,在两侧之间检查传输的数据,并且如果发生一些丢失或改变,则再次重新传输数据。UDP也不可靠。真的不是。但是,如果您希望它是可靠的上层应用程序级别机制可以实现,但这些将使传输更复杂。6、协议在这部分中,列出使用UDP或TCP或两者的协议。UDP以下协议使用UDP传输。DHCPDNS流RDPTFTPSNMPVOIPTCP以下协议使用TCP传输。HTTPHTTPSFTPSMTPTELNET
      一、不同点:1、数据包结构不同:UDP具有精简包结构。UDP在其标题部分中仅提供源,目标端口,长度,校验和。TCP在包中有更多字段,因为TCP传输有更多的步骤和控件来进行包传递。TCP有12个头字段。3、算法不同:要使用TCP传输数据,必须使用名为3次握手的方法创建会话。第一个客户端发送一个包含SYN标志的数据包,服务器用ACK标志响应,最后一步客户端发送SYNC + ACK以完成与相关服务器的TCP会话。UDP没有任何特殊算法。UDP包直接发送到服务器的端口。管理层通常在上层应用程序层中执行。二、相同点:从安全角度来看,TCP和UDP都是相同的。实际上,TCP由于其会话管理而具有一些小优势,总体上看,如果实现SSL,加密等安全机制,则存在安全性。除UDP之外,实现TCP的协议的SSL / TLS非常容易。另一方面,像RTP这样的语音通信协议可以升级到SRTP,使底层UDP更安全。传输控制协议(TCP):TCP(传输控制协议)定义了两台计算机之间进行可靠的传输而交换的数据和确认信息的格式,以及计算机为了确保数据的正确到达而采取的措施。协议规定了TCP软件怎样识别给定计算机上的多个目的进程如何对分组重复这类差错进行恢复。协议还规定了两台计算机如何初始化一个TCP数据流传输以及如何结束这一传输。TCP最大的特点就是提供的是面向连接、可靠的字节流服务。以上内容参考:百度百科-TCP/UDP协议
      相同;都是传输层协议,都为用户提供服务不同点;tcp是可靠的,面向链接的,udp是不可靠的,无链接的
      共同点: 都是传输层协议。区别:TCP是面向连接的 可靠传输 ,有三次握手 是有状态的 UDP是无连接的不可靠传输 ,没有状态。
      TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快现在Internet上流行的协议是TCP/IP协议,该协议中对低于1024的端口都有确切的定义,他们对应着Internet上一些常见的服务。这些常见的服务可以分为使用TCP端口(面向连接)和使用UDP端口(面向无连接)两种。说到TCP和UDP,首先要明白“连接”和“无连接”的含义,他们的关系可以用一个形象地比喻来说明,就是打电话和写信。两个人如果要通话,首先要建立连接——即打电话时的拨号,等待响应后——即接听电话后,才能相互传递信息,最后还要断开连接——即挂电话。写信就比较简单了,填写好收信人的地址后将信投入邮筒,收信人就可以收到了。从这个分析可以看出,建立连接可以在需要痛心地双方建立一个传递信息的通道,在发送方发送请求连接信息接收方响应后,由于是在接受方响应后才开始传递信息,而且是在一个通道中传送,因此接受方能比较完整地收到发送方发出的信息,即信息传递的可靠性比较高。但也正因为需要建立连接,使资源开销加大(在建立连接前必须等待接受方响应,传输信息过程中必须确认信息是否传到及断开连接时发出相应的信号等),独占一个通道,在断开连接钱不能建立另一个连接,即两人在通话过程中第三方不能打入电话。而无连接是一开始就发送信息(严格说来,这是没有开始、结束的),只是一次性的传递,是先不需要接受方的响应,因而在一定程度上也无法保证信息传递的可靠性了,就像写信一样,我们只是将信寄出去,却不能保证收信人一定可以收到。TCP是面向连接的,有比较高的可靠性,一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等,而UDP是面向无连接的,使用这个协议的常见服务有DNS、SNMP、QQ等。对于QQ必须另外说明一下,QQ2003以前是只使用UDP协议的,其服务器使用8000端口,侦听是否有信息传来,客户端使用4000端口,向外发送信息(这也就不难理解在一般的显IP的QQ版本中显示好友的IP地址信息中端口常为4000或其后续端口的原因了),即QQ程序既接受服务又提供服务,在以后的QQ版本中也支持使用TCP协议了。 参考资料:http://zhidao.baidu.com/question/79577.html
      简述TCP与UDP之间的相同点和不同点

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/309700.html

          热门文章

          文章分类