您好,欢迎访问三七文档
TCPUDP数据包发送程序Windows下winpcap实现讲解流程(目录)TCPUDPTCP/UDP校验以及计算方法TCP(协议简介)维基百科给出的定义:是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF(互联网工程任务小组)的RFC793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。TCP(数据包结构)URG:紧急指针有效标志位,当它被置为1时,紧急指针才有效。ACK:确认序号有效,当它被置为1时,确认序号才有效。PSH:接受方应该尽快将这个报文交给应用层。RST:重建连接。SYN:同步序号用来发起一个新连接。FIN:发端完成发送任务。seqack=seq+1TCP(三次握手)1.建立连接时,客户端发送SYN包以及seq到服务器,并进入到SYN-SEND状态,等待服务器确认2.服务器收到SYN包,必须确认客户的SYN(ack=seq+1),同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN-RECV状态3.客户端收到服务器的SYN+ACK包,向服务器发送确认报ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手TCP(四次挥手)1.如图所示,发送端先发送带有FIN标志的报文给服务端,表面自己这端已经无数据可以发送了,希望关闭TCP连接。报文的seq为x2.服务端接受到这个报文之后发送带有ACK标志的报文,其ack为x+13.服务端无数据发送之后,也向客户端发送带有FIN标志的报文,seq为z4.客户端接受到该报文之后,发送一个带有ACK标志的报文,其ack为z+1UDP(协议简介)UDP,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETFRFC768是UDP的正式规范。UDP在IP报文的协议号是17。UDP协议全称是用户数据报协议[1],在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据UDP(特点)UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。UDP(使用条件)在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人不十分满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。举个例子校验TCP校验和是一个端到端的校验和,由发送端计算,然后由接收端验证。其目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到校验和有差错,则TCP段会被直接丢弃。TCP校验和覆盖TCP首部和TCP数据,而IP首部中的校验和只覆盖IP的首部,不覆盖IP数据报中的任何数据。TCP的校验和是必需的,而UDP的校验和是可选的。TCP和UDP计算校验和时,都要加上一个12字节的伪首部校验UDP的检验和所需要用到的所有信息,包括三个部分:1.UDP伪首部2.UDP首部3.UDP的数据部分校验首先解释下伪首部的概念,伪首部包含IP首部一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地,只是单纯为了做校验用的。还有一个概念十分重要,那就是16位UDP总长度,请注意该长度不是报文的总长度,而只是UDP(包括UDP头和数据部分)的总长度计算校验和checksum1.把伪首部添加到UDP上;2.计算初始时是需要将检验和字段添零的;3.把所有位划分为16位(2字节)的字4.把所有16位的字相加,如果遇到进位,则将高于16字节的进位部分的值加到最低位上5.将所有字相加得到的结果应该为一个16位的数,将该数取反则可以得到检验和checksum。程序执行流程
本文标题:TCP和UDP讲解
链接地址:https://www.777doc.com/doc-2093424 .html