udp传输过程(Udp传输TS流的过程)

      最后更新:2024-03-08 05:07:12 手机定位技术交流文章

      如何实现TCP和UDP传输

      划分为使用TCP端口(面向连接如打电话)和使用UDP端口(无连接如写信)两种。网络中可以被命名和寻址的通信端口是操作系统的一种可分配资源。由网络OSI(开放系统互联参考模型,OpenSystemInterconnectionReferenceModel)七层协议可知,传输层与网络层最大的区别是传输层提供进程通信能力,网络通信的最终地址不仅包括主机地址,还包括可描述进程的某种标识。所以TCP/IP协议提出的协议端口,可以认为是网络通信进程的一种标识符。应用程序(调入内存运行后一般称为:进程)通过系统调用与某端口建立连接(binding,绑定)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都从该端口输出。在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写方式访问类似于文件描述符,每个端口都拥有一个叫端口号的整数描述符,用来区别不同的端口。由于TCP/IP传输层的TCP和UDP两个协议是两个完全独立的软件模块,因此各自的端口号也相互独立。如TCP有一个255号端口,UDP也可以有一个255号端口,两者并不冲突。端口号有两种基本分配方式:第一种叫全局分配这是一种集中分配方式,由一个公认权威的中央机构根据用户需要进行统一分配,并将结果公布于众,第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回本地唯一的端口号,进程再通过合适的系统调用,将自己和该端口连接起来(binding,绑定)。TCP/IP端口号的分配综合了以上两种方式,将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。每一个标准服务器都拥有一个全局公认的端口叫周知口,即使在不同的机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。TCP和UDP规定,小于256的端口才能作为保留端口。按端口号可分为3大类:(1)公认端口(WellKnownPorts):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。(2)注册端口(RegisteredPorts):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。(3)动态和/或私有端口(Dynamicand/orPrivatePorts):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。系统管理员可以"重定向"端口:一种常见的技术是把一个端口重定向到另一个地址。例如默认的HTTP端口是80,不少人将它重定向到另一个端口,如8080。如果是这样改了,要访问本文就应改用这个地址.cn:8080。端口漏洞:8080端口可以被各种病毒程序所利用,比如BrownOrifice(BrO)特洛伊木马病毒可以利用8080端口完全遥控被感染的计算机。另外,RemoConChubo,RingZero木马也可以利用该端口进行攻击。操作建议:一般我们是使用80端口进行网页浏览的,为了避免病毒的攻击,我们可以关闭该端口。端口:21服务:FTP说明:FTP服务器所开放的端口,用于上传、下载。最常见的攻击者用于寻找打开anonymous的FTP服务器的方法。这些服务器带有可读写的目录。木马DolyTrojan、Fore、InvisibleFTP、WebEx、WinCrash和BladeRunner所开放的端口。端口:22服务:Ssh说明:PcAnywhere建立的TCP和这一端口的连接可能是为了寻找ssh。这一服务有许多弱点,如果配置成特定的模式,许多使用RSAREF库的版本就会有不少的漏洞存在。端口:23服务:Telnet说明:远程登录,入侵者在搜索远程登录UNIX的服务。大多数情况下扫描这一端口是为了找到机器运行的操作系统。还有使用其他技术,入侵者也会找到密码。木马TinyTelnetServer就开放这个端口。端口:25服务:SMTP说明:SMTP服务器所开放的端口,用于发送邮件。入侵者寻找SMTP服务器是为了传递他们的SPAM。入侵者的帐户被关闭,他们需要连接到高带宽的E-MAIL服务器上,将简单的信息传递到不同的地址。木马Antigen、EmailPasswordSender、HaebuCoceda、ShtrilitzStealth、WinPC、WinSpy都开放这个端口。端口:80服务:HTTP说明:用于网页浏览。木马Executor开放此端口。端口:102服务:Messagetransferagent(MTA)-X.400overTCP/IP说明:消息传输代理。端口:109服务:PostOfficeProtocol-Version3说明:POP3服务器开放此端口,用于接收邮件,客户端访问服务器端的邮件服务。POP3服务有许多公认的弱点。关于用户名和密码交换缓冲区溢出的弱点至少有20个,这意味着入侵者可以在真正登陆前进入系统。成功登陆后还有其他缓冲区溢出错误。端口:110服务:SUN公司的RPC服务所有端口说明:常见RPC服务有rpc.mountd、NFS、rpc.statd、rpc.csmd、rpc.ttybd、amd等端口:119服务:NetworkNewsTransferProtocol说明:NEWS新闻组传输协议,承载USENET通信。这个端口的连接通常是人们在寻找USENET服务器。多数ISP限制,只有他们的客户才能访问他们的新闻组服务器。打开新闻组服务器将允许发/读任何人的帖子,访问被限制的新闻组服务器,匿名发帖或发送SPAM。端口:135服务:LocationService说明:Microsoft在这个端口运行DCERPCend-pointmapper为它的DCOM服务。这与UNIX111端口的功能很相似。使用DCOM和RPC的服务利用计算机上的end-pointmapper注册它们的位置。远端客户连接到计算机时,它们查找end-pointmapper找到服务的位置。HACKER扫描计算机的这个端口是为了找到这个计算机上运行ExchangeServer吗?什么版本?还有些DOS攻击直接针对这个端口。端口:137、138、139服务:NETBIOSNameService说明:其中137、138是UDP端口,当通过网上邻居传输文件时用这个端口。而139端口:通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于windows文件和打印机共享和SAMBA。还有WINSRegisrtation也用它。端口:161服务:SNMP说明:SNMP允许远程管理设备。所有配置和运行信息的储存在数据库中,通过SNMP可获得这些信息。许多管理员的错误配置将被暴露在Internet。Cackers将试图使用默认的密码public、private访问系统。他们可能会试验所有可能的组合。SNMP包可能会被错误的指向用户的网络端口:177服务:XDisplayManagerControlProtocol说明:许多入侵者通过它访问X-windows操作台,它同时需要打开6000端口。端口:389服务:LDAP、ILS说明:轻型目录访问协议和NetMeetingInternetLocatorServer共用这一端口。限制端口防非法入侵[分享]一般来说,我们采用一些功能强大的反黑软件和防火墙来保证我们的系统安全,本文拟用一种简易的法——通过限制端口来帮助大家防止非法入侵。非法入侵的方式简单说来,非法入侵的方式可粗略分为4种:1、扫描端口,通过已知的系统Bug攻入主机。2、种植木马,利用木马开辟的后门进入主机。3、采用数据溢出的手段,迫使主机提供后门进入主机。4、利用某些软件设计的漏洞,直接或间接控制主机。非法入侵的主要方式是前两种,尤其是利用一些流行的黑客工具,通过第一种方式攻击主机的情况最多、也最普遍;而对后两种方式来说,只有一些手段高超的黑客才利用,波及面并不广泛,而且只要这两种问题一出现,软件服务商很快就会提供补丁,及时修复系统。对于个人用户来说,您可以限制所有的端口,因为您根本不必让您的机器对外提供任何服务;而对于对外提供网络服务的服务器,我们需把必须利用的端口(比如WWW端口80、FTP端口21、邮件服务端口25、110等)开放,其他的端口则全部关闭。这里,对于采用Windows2000或者WindowsXP的用户来说,不需要安装任何其他软件,可以利用“TCP/IP筛选”功能限制服务器的端口。具体设置如下:1、右键点击“网上邻居”,选择“属性”,然后双击“本地连接”(如果是拨号上网用户,选择“我的连接”图标),弹出“本地连接状态”对话框。2、点击[属性]按钮,弹出“本地连接属性”,选择“此连接使用下列项目”中的“Internet协议(TCP/IP)”,然后点击[属性]按钮。3、在弹出的“Internet协议(TCP/IP)”对话框中点击[高级]按钮。在弹出的“高级TCP/IP设置”中,选择“选项”标签,选中“TCP/IP筛选”,然后点击[属性]按钮。4、在弹出的“TCP/IP筛选”对话框里选择“启用TCP/IP筛选”的复选框,然后把左边“TCP端口”上的“只允许”选上。这样,您就可以来自己添加或删除您的TCP或UDP或IP的各种端口了。添加或者删除完毕,重新启动机器以后,您的服务器就被保护起来了。最后,提醒个人用户,如果您只上网浏览的话,可以不添加任何端口。但是要利用一些网络联络工具,比如OICQ的话,就要把“4000”这个端口打开,同理,如果发现某个常用的网络工具不能起作用的时候,请搞清它在您主机所开的端口,然后在“TCP/IP“里把此端口打开以上来源于网络,不过分析得很好了相同点:都处于传输层不同点:TCP~面向连接、可靠、传输慢、保证数据的顺序UDP~面向无连接、不可靠、传输快、数据按照不同路径到,不保证数据顺序且两者传输的模式不一样
      面向连接的TCP “面向连接”就是在正式通信前必须要与对方建立起连接。比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用TCP协议传输数据。面向非连接的UDP协议“面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。这与现在风行的手机短信非常相似:你在发短信的时候,只需要输入对方手机号就OK了。UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包(如图2所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。 TCP协议和UDP协议各有所长、各有所短,适用于不同要求的通信环境。
      如何实现TCP和UDP传输

      传输层协议(TCP, UDP)

      传输层定义了主机应用程序之间端到端的连通性。传输层中最为常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram Protocol)。为了简化问题说明,本课程以Telnet为例描述相关技术。设备支持通过Telnet协议和Stelnet协议登录。使用Telnet,Stelnet v1协议存在安全风险,建议你使用STelnet v2登录设备。为了简化问题说明,本课程以FTP为例来描述相关技术。设备支持通过FTP协议,TFTP以及SFTP传输文件。使用FTP,TFTP,SFTP v1协议存在风险,建议使用SFTP v2方式进行文件操作。TCP是一种面向连接的传输层协议,提供可靠的传输服务。TCP是一种面向连接的端到端协议。TCP作为传输控制协议,可以为主机提供可靠的数据传输。TCP需要依赖网络协议为主机提供可用的传输路径。TCP允许一个主机同事运行多个应用进程。每台主机可以拥有多个应用端口,没对端口号,源和目标IP地址的组合唯一地标识了一个会话。端口分为知名端口和动态端口。有些网络服务会使用固定的端口,这类端口称为知名端口,端口号范围为 0~1023 。比如:FTP,HTTP,Telnet,SNMP服务均使用知名端口。动态端口范围 1024~65535 ,这些端口号一般不会固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。TCP通常使用IP作为网络层协议,这是TCP数据被封装在IP数据包内。TCP数据段由TCP Header(头部)和TCP Data(数据)组成。TCP最多可以有60个字节的头部,如果没有Options字段,正常的长度是20字节。TCP Header是由如上图标识一些字段组成,这里列出几个常用字段。注意:1)主机A(通常也叫客户端)发送一个标识了SYN数据段,标识期望与服务器A建立连接,此数据段的序列号(seq)为a;2)服务器A回复标识了SYN+ACK的数据段,此数据段的序列号(seq)为b,确认序列号为主机A的序列号加1(a+1),以此作为对主机A的SYN报文的确认。3)主机A发送一个标识了ACK的数据段,此数据段的序列号(seq)为a+1,确认序列号为服务器A的序列号加1(b+1),以此作为对服务器A的SYN报文段的确认。TCP是一种可靠的,面向连接的全双工传输层协议。TCP连接的简历是一个三次握手的过程。TCP的可靠传输还提现在TCP使用了确认技术来确保目的设备收到了从源设备发来的数据,并且是准确无误的。确认技术的工作原理如下:目的设备接收到源设备发送的数据段时,会向源端发送确认报文,源设备收到确认报文后,继续发送数据段,如此重复。如图所示,主机A向服务器A发送TCP数据段,为描述方便假设每个数据段的长度都是500个字节。当服务器A成功收到序列号是M+1499的字节以及之前的所有字节时,会以序列号M+1400+1=M+1500进行确认。另外,由于数据段N+3传输失败,所以服务器A未能收到序列号为M+1500的字节,因此服务器A还会再次以序列号M+1500进行确认。注意:上面说到,数据段 N+3 传输失败,那么第二次确认号M+1500,主机A会将N+3,N+4,N+5全部发送一次。TCP滑动窗口技术通过动态改变窗口大小来实现对端到端设备之间的数据传输进行流量控制。如图所示,主机A和服务器A之间通过滑动窗口来实现流量控制。为了方便理解,此例中只考虑主机A发送数据给服务器A时,服务器A通过滑动窗口进行流量控制。例子中:主机A向服务器发送4个长度为1024字节的数据段,其中主机的窗口大小为4096个字节。服务器A收到第3个字节之后,缓存区满,第4个数据段被丢弃。服务器以ACK3073(1024*3=3072)响应,窗口大小调整为3072,表明服务器的缓冲区只能处理3072个字节的数据段。于是主机A改变其发送速率,发送窗口大小为3072的数据段。主机在关闭连接之前,要确认收到来自对方的ACK。TCP支持全双工模式传输数据,这意味着统一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,一次在传输完毕后,两个方向的连接必须都关闭。TCP连接的建立是一个三次握手过程,而TCP连接的终止则要经过四次挥别。如图:1.主机A想终止连接,于是发送一个标识了FIN,ACK的数据段,序列号为a,确认序列号为b。2.服务器A回应一个标识了ACK的数据段,序列号为b,确认序号为a+1,作为对主机A的FIN报文的确认。3.服务器A想终止连接,于是向主机A发送一个标识了FIN,ACK的数据段,序列号为b,确认好为a+1。4.主机A回应一个标识了ACK的数据段,序列号为a+1,确认序号为b+1,作为对服务器A的FIN报文的确认。以上四次交互完成了两个方向连接的关闭。TCP断开连接的步骤,这个比较详细:https://blog.csdn.net/ctrl_qun/article/details/52518479UDP是一种面向无连接的传输层协议,传输可靠性没有保证。当应用程序对传输的可靠性要求不高时,但是对传输速度和延迟要求较高时,可以用UDP协议来替代TCP协议在传输层控制数据的转发。UDP将数据从源端发送到目的端时,无需事先建立连接。UDP采用了简单,容易操作的机制在应用程序间传输数据,没有使用TCP中的确认技术或滑动窗口机制,因此UDP不能保证数据传输的可靠性,也无法避免接受到重复数据的情况。UDP头部仅占8个字节,传输数据时没有确认机制(注意,但是有校验和)。UDP报文分为UDP报文头和UDP数据区域两个部分。报头由源端口,目的端口,报文长度以及校验和组成。UDP适合于实时数据传输,比如语音和视频通信。相比TCP,UDP的传输效率更高,开销更小,但是无法保证数据传输可靠性。UDP头部的标识如下:1)16位源端口号:源主机的应用程序使用的端口号。2)16位目的端口号:目的主机的应用程序使用的端口号。3)16位UDP长度:是指UDP头部和UDP数据的字节长度。因为UDP头部长度是8字节,所以字段的最小值为8。4)16位UDP校验和:该字段提供了与TCP校验字段同样的功能;该字段是可选的。使用UDP传输数据时,由应用程序根据需要提供报文到达确认,排序,流量控制等功能。主机A发送数据包时,这些数据包是以有序的方式发送到网络中的,每个数据包独立地在网络中被发送,所以不同的数据包可能会通过不同的网路径叨叨主机B。这样的情况下,先发送的数据包不一定先到达主机B。因为UDP数据包没有序号,主机B将无法通过UDP协议将数据包按照原来的顺序重新组合,所以此时需要应用程序提供报文的到达确认,排序和流量控制等功能(也就是说UDP报文的到达确认,排序和流量控制是应用程序来确定的)。通常情况下,UDP采用实时传输机制和时间戳来传输语音和视频数据。UDP适合传输对延迟敏感的流量,如语音和视频。在使用TCP协议传输数据时,如果一个数据段丢失或者接受端对某个数据段没有确认,发送端会重新发送该数据段。TCP重新发送数据会带来传输延迟和重复数据,降低了用户的体验。对于延迟敏感的应用,少量的数据丢失一般可以被忽略,这是使用UDP传输能够提升用户的体验。总结:1.TCP头部中的确认标识位有什么作用呢?TCP报文头中的ACK标识位用于目的端对已接受到数据的确认。目的端成功收到序列号为x的字节后,会以序列号x+1进行确认。2.TCP头部中有哪些标识位参与TCP三次握手?在TCP三次握手过程中,要使用SYN和ACK标识位来请求建立连接和确认建立连接。
      传输层协议(TCP, UDP)

      计算机网络——TCP/UDP协议

      计算机网络七层模型中,传输层有两个重要的协议:(1)用户数据报协议UDP (User Datagram Protocol)(2)传输控制协议TCP (Transmission Control Protocol)UDP 在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP 报文后,不需要给出任何确认。虽然UDP 不提供可靠交付,但在某些情况下UDP 却是一种最有效的工作方式。TCP 则提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP 不提供广播或多播服务。由于TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销,如确认、流量控制、计时器以及连接管理等。UDP 的主要特点是:首部手段很简单,只有8 个字节,由四个字段组成,每个字段的长度都是两个字节。前面已经讲过,每条TCP 连接有两个端点,TCP 连接的端点叫做套接字(socket)或插口。套接字格式如下:套接宁socket= (IP 地址:端口号’)每一条TCP 连接唯一地被通信两端的两个端点(即两个套接宇)所确定。即:TCP 连接= {socket1, socket2} = {(IP1: port1), (IP2: port2)}3次握手链接4次握手释放链接断开连接请求可以由客户端发出,也可以由服务器端发出,在这里我们称A端向B端请求断开连接。各个状态节点解释如下:下面为了讨论问题的万便,我们仅考虑A发送数据而B 接收数据并发送确认。因此A 叫做发送方,而B 叫做接收方。“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。像上述的这种可靠传输协议常称为自动重传请求ARQ (Automatic Repeat reQuest)。意思是重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组。滑动窗口协议比较复杂,是TCP 协议的精髓所在。这里先给出连续ARQ 协议最基本的概念,但不涉提到许多细节问题。详细的滑动窗口协议将在后面讨论。下图表示发送方维持的发送窗口,它的意义是:位于发送窗口内的5 个分组都可连续发送出去,而不需要等待对方的确认。这样,信道利用率就提高了。连续ARQ 协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。接收方一般都是采用累积确认的方式。这就是说,接收方不必对收到的分组逐个发送确认,而是可以在收到几个分组后,对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都己正确收到了。累积确认的优点是容易实现,即使确认丢失也不必重传。但缺点是不能向发送方反映出接收方己经正确收到的所有分组的信息。例如,如果发送方发送了前5 个分组,而中间的第3 个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。这就叫做Go-back-N (回退N ),表示需要再退回来重传己发送过的N 个分组。可见当通信线路质量不好时,连续ARQ 协议会带来负面的影响。TCP 的滑动窗口是以字节为单位的。现假定A 收到了B 发来的确认报文段,其中窗口是20 (字节),而确认号是31 (这表明B 期望收到的下一个序号是31 ,而序号30 为止的数据己经收到了)。根据这两个数据, A 就构造出自己的发送窗口,其位置如图所示。发送窗口表示:在没有收到B 的确认的情况下, A可以连续把窗口内的数据都发送出去。凡是己经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。发送窗口后沿的后面部分表示己发送且己收到了确认。这些数据显然不需要再保留了。而发送窗口前沿的前面部分表示不允许发送的,因为接收方都没有为这部分数据保留临时存放的缓存空间。现在假定A 发送了序号为31 ~ 41 的数据。这时发送窗口位置并未改变,但发送窗口内靠后面有11个字节(灰色小方框表示)表示己发送但未收到确认。而发送窗口内靠前面的9 个字节( 42 ~ 50 )是允许发送但尚未发送的。】再看一下B 的接收窗口。B 的接收窗口大小是20,在接收窗口外面,到30 号为止的数据是已经发送过确认,并且己经交付给主机了。因此在B 可以不再保留这些数据。接收窗口内的序号(31~50)足允许接收的。B 收到了序号为32 和33 的数据,这些数据没有按序到达,因为序号为31 的数据没有收到(也许丢失了,也许滞留在网络中的某处)。请注意, B 只能对按序收到的数据中的最高序号给出确认,因此B 发送的确认报文段中的确认号仍然是31 (即期望收到的序号)。现在假定B 收到了序号为31 的数据,并把序号为31~33的数据交付给主机,然后B删除这些数据。接着把接收窗口向前移动3个序号,同时给A 发送确认,其中窗口值仍为20,但确认号是34,这表明B 已经收到了到序号33 为止的数据。我们注意到,B还收到了序号为37, 38 和40 的数据,但这些都没有按序到达,只能先存在接收窗口。A收到B的确认后,就可以把发送窗口向前滑动3个序号,指针P2 不动。可以看出,现在A 的可用窗口增大了,可发送的序号范围是42~53。整个过程如下图:A 在继续发送完序号42-53的数据后,指针P2向前移动和P3重合。发送窗口内的序号都已用完,但还没有再收到确认。由于A 的发送窗口己满,可用窗口己减小到0,因此必须停止发送。上面已经讲到, TCP 的发送方在规定的时间内没有收到确认就要重传已发送的报文段。这种重传的概念是很简单的,但重传时间的选择却是TCP 最复杂的问题之一。TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间RTT,TCP 保留了RTT的一个加权平均往返时间RTTs (这又称为平滑的往返时间, S 表示Smoothed 。因为进行的是加权平均,因此得出的结果更加平滑)。每当第一次测量到RTT样本时, RTTs值就取为所测量到的RTT样本值。但以后每测量到一个新的RTT样本,就按下式重新计算一次RTTs:新的RTTs = (1 - α)×(旧的RTTs) + α ×(新的RTT样本)α 越大表示新的RTTs受新的RTT样本的影响越大。推荐的α 值为0.125,用这种方法得出的加权平均往返时间RTTs 就比测量出的RTT值更加平滑。显然,超时计时器设置的超时重传时间RTO (RetransmissionTime-Out)应略大于上面得出的加权平均往返时间RTTs。RFC 2988 建议使用下式计算RTO:RTO = RTTs + 4 × RTTdRTTd是RTT 的偏差的加权平均值,它与RTTs和新的RTT样本之差有关。计算公式如下:新的RTTd= (1- β)×(旧的RTTd) + β × |RTTs-新的RTT样本|发现问题:如图所示,发送出一个报文段。设定的重传时间到了,还没有收到确认。于是重传报文段。经过了一段时间后,收到了确认报文段。现在的问题是:如何判定此确认报文段是对先发送的报文段的确认,还是对后来重传的报文段的确认?若收到的确认是对重传报文段的确认,但却被源主机当成是对原来的报文段的确认,则这样计算出的RTTs 和超时重传时间RTO 就会偏大。若后面再发送的报文段又是经过重传后才收到确认报文段,则按此方法得出的超时重传时间RTO 就越来越长。若收到的确认是对原来的报文段的确认,但被当成是对重传报文段的确认,则由此计算出的RTTs 和RTO 都会偏小。这就必然导致报文段过多地重传。这样就有可能使RTO 越来越短。Kam 提出了一个算法:在计算加权平均RTTs 时,只要报文段重传了就不采用其往返时间样本。这样得出的加权平均RTTs 和RTO 就较准确。新问题:设想出现这样的情况:报文段的时延突然增大了很多。因此在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。但根据Kam 算法,不考虑重传的报文段的往返时间样本。这样,超时重传时间就无法更新。解决方案:对Kam 算法进行修正,方法是z报文段每重传一次,就把超时重传时间RTO 增大一些。典型的做法是取新的重传时间为2 倍的旧的重传时间。当不再发生报文段的重传时,才根据上面给出的公式计算超时重传时间。流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。利用滑动窗口机制可以很方便地在TCP 连接上实现对发送方的流量控制。接收方的主机B 进行了三次流量控制。第一次把窗口减小到rwnd =300,第二次又减到rwnd = 100 ,最后减到rwnd = 0 ,即不允许发送方再发送数据了。这种使发送方暂停发送的状态将持续到主机B 重新发出一个新的窗口值为止。我们还应注意到,B 向A 发送的三个报文段都设置了ACK=1,只有在ACK=1 时确认号字段才有意义。发生死锁:现在我们考虑一种情况。上图中, B 向A 发送了零窗口的报文段后不久, B 的接收缓存又有了一些存储空间。于是B 向A 发送了rwnd = 400 的报文段。然而这个报文段在传送过程中丢失了。A 一直等待收到B 发送的非零窗口的通知,而B 也一直等待A 发送的数据。如果没有其他措施,这种互相等待的死锁局面将一直延续下去。解决方案:TCP 为每一个连接设有一个持续计时器(persistence timer)。只要TCP 连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1 宇节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。1 TCP连接时是三次握手,那么两次握手可行吗?在《计算机网络》中是这样解释的:已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送ACK包。这样就会白白浪费资源。而经过三次握手,客户端和服务器都有应有答,这样可以确保TCP正确连接。2 为什么TCP连接是三次,挥手确是四次?在TCP连接中,服务器端的SYN和ACK向客户端发送是一次性发送的,而在断开连接的过程中,B端向A端发送的ACK和FIN是是分两次发送的。因为在B端接收到A端的FIN后,B端可能还有数据要传输,所以先发送ACK,等B端处理完自己的事情后就可以发送FIN断开连接了。3 为什么在第四次挥手后会有2个MSL的延时?MSL是Maximum Segment Lifetime,最大报文段生存时间,2个MSL是报文段发送和接收的最长时间。假定网络不可靠,那么第四次发送的ACK可能丢失,即B端无法收到这个ACK,如果B端收不到这个确认ACK,B端会定时向A端重复发送FIN,直到B端收到A的确认ACK。所以这个2MSL就是用来处理这个可能丢失的ACK的。1 文件传送协议文件传送协议FTP (File Transfer Protocol) [RFC 959]是因特网上使用得最广泛的文件传送协议,底层采用TCP协议。盯P 使用客户服务器方式。一个FTP 服务器进程可同时为多个客户进程提供服务。FTP的服务器进程由两大部分组成:一个主进程,负责接受新的请求:另外有若干个从属进程,负责处理单个请求。在进行文件传输时,客户和服务器之间要建立两个并行的TCP 连接:“控制连接”(21端口)和“数据连接”(22端口)。控制连接在整个会话期间一直保持打开, FTP 客户所发出的传送请求,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件。实际用于传输文件的是“数据连接”。服务器端的控制进程在接收到FTP 客户发送来的文件传输请求后就创建“数据传送进程”和“数据连接”,用来连接客户端和服务器端的数据传送进程。2 简单文件传送协议TFTPTCP/IP 协议族中还有一个简单文件传送协议TFfP (Trivial File Transfer Protocol),它是一个很小且易于实现的文件传送协议,端口号69。TFfP 也使用客户服务器方式,但它使用UDP 数据报,因此TFfP 需要有自己的差错改正措施。TFfP 只支持文件传输而不支持交耳。3 TELNETTELNET 是一个简单的远程终端协议,底层采用TCP协议。TELNET 也使用客户服务器方式。在本地系统运行TELNET 客户进程,而在远地主机则运行TELNET 服务器进程,占用端口23。4 邮件传输协议一个电子邮件系统应具如图所示的三个主要组成构件,这就是用户代理、邮件服务器,以及邮件发送协议(如SMTP )和邮件读取协议(如POP3), POP3 是邮局协议(Post Office Protocol)的版本3 。SMTP 和POP3 (或IMAP )都是在TCP 连接的上面传送邮件,使用TCP 的目的是为了使邮件的传送成为可靠的。
      计算机网络——TCP/UDP协议

      udp工作原理是怎样的?

      UDP工作原理:udp用户数据报协议 (RFC 768) 用户数据报协议(UDP)是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 UDP 协议基本上是 IP 协议与上层协议的接口。 UDP 协议适用端口分别运行在同一台设备上的多个应用程序。由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用 UDP 的“端口号”完成的。UDP协议使用IP层提供的服务把从应用层得到的数据从一台主机的某个应用程序传给网络上另一台主机上的某一个应用程序。UDP协议有如下的特点:1、UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。2、UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息(如TCP所采用的序号),而且报文不一定按顺序到达的,所以接收端无从排起。3、UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也不会重发数据。4、UDP传送数据较TCP快速,系统开销也少。 UDP 适用于不需要 TCP 可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。 UDP 是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)。
      udp工作原理是怎样的?

      udp包在传输过程中,会被分包吗

      对于网络传输层来说,小于64K的包都是不分的 对于网络层,就是IP,显然是要分的.不过分的不是UDP包,而是IP包.
      一般所处的以太网,以太网帧最大1500字节,减去20字节ip首部8字节udp首部,一次udp报文也就是说sendto不要超过1472字节,否则ip分片。
      udp包在传输过程中,会被分包吗

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

          热门文章

          文章分类