标签:
基于Jpcap的TCP/IP数据包分析
原作:赵新辉
目 录
第一章 以太网的结构和TCP/IP
1.1 以太网的结构
1.1.1 基于网络架构的以太网
1.1.2 以太网的数据交换
1.1.3 以太网帧的结构
1.2 IP数据报的构成
1.2.1 IP地址
1.2.2 路由
1.2.3 IP数据报的构成
1.2.4 其他报文结构
1.3 TCP/UDP
1.3.1 TCP/UDP的作用
1.3.2 TCP和UDP报文的结构
第二章 Jpcap类库
2.1 Jpcap的使用
2.1.1 Jpcap的运行环境的安装
2.1.2 Jpcap的开发环境的安装
2.2 Jpcap介绍
2.2.1 Packet基类及其子类
2.2.2 Jpcap的主要功能
第三章 数据包监听程序的设计
3.1 数据包监听原理
3.2 以太网帧的解析
3.2.1 获取MAC地址
3.2.2 数据包类型的判断
3.3 IP数据报的监听
3.3.1 IP数据报的解析
3.3.2 ARP和ICMP数据报解析
3.4 TCP和UDP监听
3.4.1 TCP数据报的解析
3.4.2 UDP数据报的解析
第四章 数据包分析
4.1 流量分析
4.1.1 数据包大小的表示
4.1.2 数据包流量观测
4.2 数据包分类分析
4.2.1 数据包过滤
4.2.2 利用数据包分析解决网络问题
第五章 数据包发送
5.1 构造发送IP数据包
5.1.1 IP数据包构造与发送
5.1.2 发送结果分析
5.2 构造发送TCP数据包
5.2.1 TCP数据包构造与发送
5.2.2 发送结果分析
第一章 太网的结构和TCP/IP
1.1 以太网的结构
以太网是当今现有局域网采用的最通用的通信协议标准.该标准定义了在局域网(LAN)中采用的电缆类型和信号处理方法.以太网在互联设备之间以10~100Mbps的速率传送信息包,双绞线电缆10 Base T以太网由于其低成本,高可靠性以及10Mbps的速率而成为应用最为广泛的以太网技术.许多制造商提供的产品都能采用通用的软件协议进行通信,开放性最好.以太网,属网络低层协议,通常在OSI(open system interconnect reference model)模型的物理层和数据链路层操作.它是总线型协议中最常见的,数据速率为10Mbps(兆比特/秒)的同轴电缆系统.
1.1.1 基于网络架构的以太网
在计算机网络构成中,一般都实行使用协议进行层与层之间得通信.通常的OSI中,把协议等级分为七层.第一层是物理层,处理关于硬件上的网络协议.第七层为应用层,处理关于应用程序的协议.第二层到第六层按照其间的顺序被依次设置.
层
名 称
规 定 的 内 容
高层
第七层
应用层
关于邮件,新闻等应用程序的协议
第六层
表示层
数据语法协议
第五层
会话层
基于网络的管理对话协议
低层
第四层
传输层
补充第三层的功能,可靠地在两台计算机间传输数据
第三层
网络层
从网络上多台计算机中选择作为通讯对象地计算机
第二层
数据链路层
在两台计算机上进行一对一数据通信
第一层
物理层
电气信号,连接器规格等关于硬件地协议
OSI参考模型
以太网是20世纪70年代,施乐(Xerox)公司地Palo Alto研究所设计的,其后在80年代由施乐,英特尔,DEC(后被康柏收购)三家公司总结了面向局域网(LAN)的协议集合.而以太网的规格是由美国电气和电子工程师协会(Institute of Electrical and Electronics Engineers)中专门讨论规格的802委员会,从1980年开始标准化讨论的.并把IEEE802.3作为标准规格,其后ISO(International Standard Organization)把它作为ISO802.3标准.
旧的以太网设备是用同轴电缆作为传送媒体的.使用同轴电缆的以太网,设备之间的连接不需要网络集线器,但必须在同轴电缆上讲设备连接起来,是同轴电缆成为多台设备间共享信号的总线(bus),这种网络连接形式被称为总线型.现在,广为使用的传送媒体为双绞线.通常使用的是被称为第五类的双绞线,拥有100Mbit/s的通信速度.在用双绞线连接时要使用被称为网络集线器的设备.它是为实现多台计算机的连接,把多根双绞线相互连接起来的设备.在使用网络集线器的网络重,计算机以网络集线器为中心呈放射状连接,这样的网络被称为星型网络.
由于以太网中集线器的转发功能,也就使得进行数据包监听可以在局域网内进行.本文中的数据包监听程序都是在局域网内进行的.当然,数据包监听也可以在网关等数据包的进出口进行.
1.1.2 以太网的数据交换
在以太网中,数据是以被称为帧的数据结构体为单位进行交换的.通常在计算机网络上交换的数据结构体的单位是数据包,而在以太网中把使用的数据包称为帧.数据包包含着发送给对方所必需信息的报头部分和记录着传送给接收端信息内容的报文部分组成的.报头包含接收端的地址,发送端的地址,数据错误检查和改正所必需的错误检验和修正码.数据包被传送到网络上,通过网络中继装置传送到接收端.
帧是被称为带碰撞检测的载波侦听多址访问(CSMA/CD: Carrier Sense Multiple Access with Collision Detection)发送的.在CSMA/CD技术中,如果网络上没有数据,则任何时候都可以将数据传送出去.因此,传送数据的网络设备,首先要确认网络上是否有数据在传送.如果没有数据则可以将数据发送到网络上.如果网络被使用,那就要等到网络空闲后发送.上面的工作相当于CSMA/CD的CSMA部分.在这种方法中,同时发送数据的网络设备会同时认为网络是空闲的,这样就会产生发送冲突.因此,在CSMA/CD技术中会经常一边检测数据冲突,一边发送数据.如果检测出冲突,为强调冲突的发生,要等待发送出32位数据所必需的时间之后,在等待一个随机决定的时间,而后重新发送.这样同时开始发送的两台网络设备中,随机数小的网络设备先进行发送,随机数大的网络设备要等到网络空闲下来才能发送.这种等到时间被称为补偿时间.
网络拥挤和多次反复发生冲突,就可能造成数据无法发送.因此,为有效利用网络资源,在网络空闲和拥挤时,对等待的最大值进行调整.空闲时即冲突次数少的情况下,把等待时间的最大值缩小;拥挤和冲突频繁发生时,把等待时间的最大值扩大.等待时间的最大值可以用下面的公式表示:
T=Ts×2k
式中Ts为发送512位数据所必需的时间(被称为Slot时间),k为冲突次数和数字10中最小的数字.
这样,在CSMA/CD技术中,网络空间的情况下,任何时候都可以将数据发送出去,万一发生冲突造成发送失败时,可以重新发送帧.所以CSMA/CD在网络比较空闲的情况下是一种高效的通信协议.
但是在网络拥挤的情况下恰好相反.CSMA/CD发生冲突时,在等待和再次发送等方面花费过多的时间,会造成网络反复发送无用的数据,网络设备和传送线路等网络资源被白白占用,结果导致通信效率降低.
在冲突频繁发生的以太网上,CSMA/CD的通信效率非常低,因为无法预测什么时候会发生冲突,因此不能保证对方在一定的限制时间内能接收到数据.这样,在进行声音和图像等对时间依赖性很强的多媒体数据的实时通信的情况下,存在着致命缺陷.所以采用CSMA/CD的以太网不能进行面向多媒体数据的通信.
帧在网络上传输,由网卡接收.一般而言,网卡有几种接收数据帧的状态,如unicast,broadcast,multicast,promiscuous等,unicast是指网卡在工作时接收目的地址是本机硬件地址的数据帧.Broadcast是指接收所有类型为广播报文的数据帧.Multicast是指接收特定的组播报文.Promiscuous则是通常说的混杂模式,是指对报文中的目的硬件地址不加任何检查,全部接收的工作模式.
当局域网内的主机都通过HUB等方式连接时,一般都称为共享式的连接,这种共享式的连接有一个很明显的特点:就是HUB会将接收到的所有数据向HUB上的每个端口转发,也就是说当主机根据mac地址进行数据包发送时,尽管发送端主机告知了目标主机的地址,但这并不意味着在一个网络内的其他主机听不到发送端和接收端之间的通讯,只是在正常状况下其他主机会忽略这些通讯报文而已!如果这些主机不愿意忽略这些报文,网卡被设置为promiscuous状态的话,那么,对于这台主机的网络接口而言,任何在这个局域网内传输的信息都是可以被侦听到的.
1.1.3 以太网帧的结构
以太网帧的结构是这样.开始的64位是前同步码(preamble)和帧首定界符(start frame delimiter).前同步码是使发送端和接收端在数据的交接上步调一致的信号.发送端以56位(10101010…10)反复发送1和0信号.接收端接收到这种信号后,准备读取发送来的信号.
前同步码结束后使表示帧的真正开始的8位(10101011)位列.帧首定界符之后是地址等报头信息.帧首定界符后面是接收端及及发送端的MAC地址.只有在接收端的MAC地址是自己的MAC地址的情况下,才能进行帧的接收;MAC地址为其他机器的情况下,将不接收改帧.但当接收端地址全部都为1时,在同一以太网内连接的所有设备,都要接收该帧.地址全部为1的MAC地址称为广播地址.
接收端和发送端的MAC地址后面是16位的类型字段(type field).类型字段中存放的是以太网帧中传送数据的上层协议的种类代码.以太网帧的报文部最大能存放12000位,即1500字节.以太网是物理层及数据链路层的协议.以太网帧所传送的数据是网络层规定的数据包.如果要使用IP网络协议,则IP数据包就将存储在以太网帧的报文处.
帧的尾部是检查数据错误的错误校验及修正码.一般错误的检验方法有奇偶校验等方法,但以太网中常使用循环冗余校验(CRC: Cyclic Redundancy Check)检查错误.CRC中,将表示帧的位列作为多项式.把多项式与准备好的特定多项式相除,得出的结果与数据一同发送.在接收端重新进行一次除法运算,用其结果确认传送来的数据正确与否.使用CRC不但能检查出是否有错误,而且还能在接收端修正错误.但是,以太网在检查出错误时,该帧将被删除重新发送.
转发网络集线器是不能识别MAC地址的,它将以太网帧向全部端口中继.开关网络集线器也被称为二层开关.这是因为开关网络集线器是按照数据链路层协议即第二层协议来解释以太网帧的.使用开关网络集线器与计算机一对一连接起来后,通信线路也完全变成一对一.即发生不了CSMA/CD所预想的冲突.这时接收和发送是并行的,这样的通信称为全双工通信.而普通的以太网通信线路称为半双工通信.因为在全双工通信中,接收和发送能并列进行,所以通信速度是半双工的2倍.
1.2 IP数据报的构成
以太网帧中的数据段通常IP数据报或与IP有关的其他协议,包括ARP(Address Resolution Protocol),ICMP(Internet Control Message Protocol)等.
1.2.1 IP地址
通常所说IP地址是指现在所使用的第四版本的Ipv4地址协议.其中的IP是以32位的二进制数来表示的.通常按8位分成4段,用十进制的数值表示,中间用点号分开.因此IP地址的数值可以从0.0.0.0到255.255.255.255.
计算机地址除了0和全部为1得数值外都可以使用.计算机地址为0时,在网路地址中指定为指向网络本身.计算机地址全部为1时,网络地址指定为向全体网络进行通信广播.网络地址使用多少位取决于一个局域网能容纳的计算机台数.因此,网络地址的位数决定了IP地址的分类.
A类地址中网络地址有7位,计算机地址被分配为24位.即具有A类地址的网络在全世界只有100个左右,是能够容纳1600万台计算机的网络.B类地址使用方便,网络数量和可容纳的主机数都比较合适,造成现在B类地址资源不足,申请分配十分困难.C类地址目前还有大量剩余,但是由于一个单位中使用一个C类地址,常常不能容纳自己网络上所有的计算机,因此必须分配给相应的多个C类地址.这种情况下,需要使用把这些计算机作为一个网络的无类别域际路由选择(CIDR: Classless Inter-Domain Routing)技术,使用不受本来类别制约的地址.进行地址空间的再分配会扩大网络地址的使用,在此种情况下分配的网络称为子网.使用子网时不能从IP地址的类别上区分IP地址中哪部分是网络地址.D类地址是多点传送地址,向多方传送IP数据报.广播会向所有的网络设备传送IP数据报,但是在多点传送中希望接收数据的多台计算机可以接受到IP数据报.这种多点传送可以将声音,图像等向多台网络设备同时传送,因此常被使用在利用网络进行广播的应用程序上.
在因特网中使用的IP地址,在世界范围内是不重复的.但是对于因特网没有对外公开的IP地址和其他网络中发生重复是没有关系的.因此,作为没有公开的内部私有地址,要规定其使用范围.RFC1918中对私有地址的规定是:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
因此在内部私有网中的IP常常会是在以上范围内.
下一代的IP地址为Ipv6,IP地址的位数达到128位,IP地址的个数可以达到现在的296倍.这样Ipv4地址资源不足的问题将得到解决,而IP地址将域网络结构相对应,更加提高路由的效率.
1.2.2 路由
路由器是工作在OSI参考模型第三层——网络层的数据包转发设备.路由器通过转发数据包来实现网络互连.虽然路由器可以支持多种协议(如TCP/IP,IPX/SPX,AppleTalk等协议),但是在我国绝大多数路由器运行TCP/IP协议.路由器通常连接两个或多个由IP子网或点到点协议标识的逻辑端口,至少拥有1个物理端口.路由器根据收到数据包中的网络层地址以及路由器内部维护的路由表决定输出端口以及下一跳地址,并且重写链路层数据包头实现转发数据包.路由器通过动态维护路由表来反映当前的网络拓扑,并通过与网络上其他路由器交换路由和链路信息来维护路由表.
在IP中,两个以上的网络间进行通讯时要使用路由器.路由器具有连接两个或两个以上网络接口.路由器能将因特网上的IP数据报进行接力传递.路由器从直接连接在其上的网络设备中得到的IP数据报,适当调整IP数据报的传送方向后送出.因为IP数据报本身不含有在因特网上通过怎样的传送的路径到达目的计算机的信息,所以IP数据报只依靠接收端的IP地址信息,通过多个路由器进行IP数据报的接力传递.
路由器具有两大功能.数据通路功能:对于每个到达路由器的数据包,在不丢失的情况下,负责寻路.此功能主要包括:转发决定,经由背板输出链路队列调度.转发功能是通过专门硬件来实现的,每一个通过路由器的分组包都要执行这个操作.数据通路功能对改进路由器的性能是很重要的.控制功能:主要包括路由表的管理和系统的配置与管理,以及与相邻路由器交换路由表信息,通过软件实现等.这些功能不是针对每个数据包的,因此使用频度相对低一些.
路由器要对到达的分组包进行识别,分类以决定其所应接受的服务类型.最初所考虑的方案是在网络的核心,根据IP报头的TOS(Type of Service)域来识别分组,但是在互联网的发展过程中,由于一直采用"尽力"传输,同时由于终端在发送IP包时不考虑TOS,因此,TOS一直没有发挥作用.目前在边缘设备,根据IP分组的源IP地址,目的IP地址,源端口号,目的端口号,传输层协议类型来对分组进行识别.此外,为了实现防火墙的功能也需要对IP分组进行识别.
在识别时,每条识别规则采用的是源IP地址,目的IP地址,源端口号,目的端口号,传输层协议类型.在上述识别规则中,每个域都可能是一个区间.例如有这样一条识别规则"202.66.83.X,202.66.72.X,X,23,TCP"(X表示任意),这条规则识别从网络202.66.83.X到网络202.66.72.X的telnet数据.从几何的角度来看,假如判别时利用了IP报头的K个域,这个问题实际上是在一个K维空间中有许多互相交叠的实体(每条判别规则对应于一个实体),每当有一个分组到达时,该分组相当于K维空间上的一个点,进行判别实际上是要找出包含该点的优先级最高的实体.
IP数据报的路由是按照路由表安排的.路由表即记录着某台网络设备把IP数据报传送到其他网络设备的数据结构.不只是路由器具有路由表,所有使用网络层协议的网络设备都具有路由表.包括计算机,路由器和L3交换器(路由器组)等.
在路由表中,以组的形式记录着IP数据报要传送到目的计算机的IP地址和为达到最终目的地必须经过的路由器IP地址.例如在此网络中的计算机下面这张路由表
接收端
接下来发送地址
192.168.1.0
直接发送到接收端计算机
Default(缺省)
192.168.1.254
路由表
这表示如果接收端的IP地址属于自己的局域网,那就使用数据链路层协议的功能将IP数据报直接发给对方,如果是其它则向局域网中存在的路由器发送IP数据报.路由器具有的路由表是很复杂的.在上面的例子中,路由器两侧连接的计算机可以使用各自具有的数据链路层协议进行直接通信.除此以外在进行计算机通信时,还必须向邻近的路由器发送IP数据报,并进行IP数据报的接力传递.
路由器收到数据包以后,会根据数据包中目的地址到路由表中查找相应的路由条目,如果找到相匹配的路由就会按照该路由处理数据包,否则在缺省情况下会扔弃数据包
.路由表的形成有静态路由和动态路由两种.静态路由时手动记录路由表,适用于小局域网,一点网络的规模稍微增大则会变得非常麻烦,当网络变更时也需要手动修改.动态路由就是自动交换路由信息,生成路由表.动态路由的协议中有网络内部使用的内部网关协议(IGP)和网络间使用的外部网关协议(EGP).
过去,路由器被看作是最佳转发数据包的硬件设备,软件仅提供监视器的功能.但随着路由器的发展,软件在路由器中起的作用越来越大.实际上,实时操作系统(如,通信领域常用PSOS和VxWorks)的选择对一个通信产品来说是至关重要的.如果要开发效率很高的软件,需要操作系统厂商的支持.像Cisco公司,就是自己开发专用的路由器操作系统以及应用软件.如果这种趋势继续发展,终端用户将来可以很方便地在路由器上装载各种应用软件模块,使路由器能够提供防火墙,流量管理策略,特殊应用信令,路由策略等功能.
路由器的数据报处理能力对网络的处理能力影响十分大,所以开发了使用硬件进行高速路由的设备.这样的路由器是在开关网络集线器中附加路由功能,被称为L3交换机.
1.2.3 IP数据报的构成
IP数据报的最开始存放着IP的版本(version).Ipv4版本存放为4.
接下来IHL是一个字符,即以32位为一个单位,存放着从版本开始到填充结束的报头的长度.最短的情况没有选项,这是IHL的值为5.
服务类型字段(type of service)表示IP数据报在传递时发送端要求的品质.第七位是为将来预留的扩展位.
数据报长度字段(total length)以8位为一个单位,即字节表示IP数据报的长度.接下来的标识字段(identification),从TCP等上层协议调用时IP数据报的标识号.
标志字段(flags)和数据块偏移(fragment offset)用于对数据块偏移的处理.IP数据报要在数据链路层的协议规定下装入帧的报文中传送,由于IP数据报中,报文部分最大就有65535为,数据链路层的帧是不能全部容纳的,所以采用叫做分块的方法.分割的数据称为碎块.IP数据报的标志表示有无碎块,数据块偏移用于保证数据块偏移按照正确的顺序处理.
TTL字段是为了防止错误的IP数据报在网络上循环,赋予IP数据报一定的寿命.IP数据报在发送时就在TTL字段中设置其寿命.TTL字段的值在IP数据报每通过一次路由器时,进行一次衰减.当为0时,IP数据报就被删除.通常设为最大值255.
协议字段(protocol)中存放着表示TCP等IP的上层协议的值.包括ICMP,TCP,EGP,IGP,UDP等.
在检查错误的报头校验码(header checksum)的后面是发送端地址和目的地址,他们在Ipv4中都为32位.最后存放的是选项和把报头进行32位整数化后余下的位.
version
IHL
type of service
Total length
Identification
flags
fragment offset
TTL
protocol
Header checksum
96位
IP数据报头的结构
1.2.4 其它报文结构
比较重要的有地址解析协议和Internet控制信息协议.地址解析协议(ARP:Address Resolution Protocol)是连接网络层和数据链路层的,于IP没有直接的联系,它是采用以太网的IP网络中必需的协议.
在ARP中进行的处理是对应于以太网的物理地址(MAC地址)和IP地址.把IP数据报传送到其他计算机时,要从对方的IP地址中查询对方的物理地址,使用对方的物理地址建立新的以太网帧.在使用IP进行通信时,就必须知道IP地址和对应的MAC地址.先进行以太网的广播功能,将要查询的MAC地址的网络设备的IP地址通知给其他网络设备.得到消息的网络设备进行匹配,符合则将自己的MAC地址返回过去.从ARP中取得的IP地址和MAC地址的对应关系,保持一段时间用于通信,一段时间后就被删除.把ARP反过来考虑从MAC地址查询IP地址的情况用RARP(Reverse ARP),RARP包和ARP包具有相同的结构,只是ARP包的操作号以后的内容不一样.ARP的操作号为1(请求)和2(响应),请求查询时对象的MAC地址为空,RARP操作号为3(请求)和4(响应),请求时的IP地址为空.
在网上通信,可能发生各种情况导致数据包被破坏,造成数据包在网络上循环,这时路由器等网络设备将删除数据包,然后向发送端请求重新发送数据包.这种通信方式就是由ICMP决定的.ICMP是把消息装入到IP数据报的报文部传送的.从这种意义上来说,ICMP与TCP,UDP相同,都属于传输层的协议.但从功能上ICMP具有补充IP的功能.
ICMP是"Internet Control Message Protocol"(Internet控制消息协议)的缩写.它是TCP/IP协议族的一个子协议,用于在IP主机,路由器之间传递控制消息.控制消息是指网络通不通,主机是否可达,路由是否可用等网络本身的消息.这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用.
1.3 TCP/UDP
1.3.1 TCP/UDP的作用
传输控制协议(TCP)和用户数据报协议(UDP)是在因特网上传输层使用的协议.使用网络层的IP协议,可以从世界上任何一台计算机中找到特定的通信对象,并向其发送数据.传输层的协议提供的是连接指定在对方计算机上运行的特定应用程序和希望得到的网络服务.
TCP及UDP中使用的是端口的概念,以区别计算机上的程序.端口是应用程序在网络通信上使用的数据输入输出口.当某一网络客户端利用其他计算机上的服务程序时,在根据IP地址指定服务计算机的同时,也指定了被分配的服务程序的公认端口号.由此,可以利用与端口号对应的特定的网络服务.
TCP/UDP数据报
IP数据报
通常的过程如下:客户端程序从用户处得到运行服务器程序的计算机DNS名和服务器程序的应用程序名.客户端程序利用从用户处得到的DNS名检索DNS服务器,得到连接对象的计算机的IP地址.并且从应用程序名中检索到服务器程序的公认端口号.再从应用程序名中决定作为传输层协议是使用TCP还是UDP.然后从对方的IP地址,自己的IP地址,对方的端口号及指定TCP或UDP中,建立将TCP或者UDP存放到报文的IP数据报.运行系统再把通信上的合适端口分配给客户端程序.这样就确定了由IP地址,端口号及TCP或UDP组成的世界上不重复的数据组合.客户端程序把含有TCP/UDP数据包的IP数据报发送出去,服务程序将响应同样发给客户端程序.
TCP协议是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次"对话"才能建立起来,其中的过程非常复杂,我们这里只做简单,形象的介绍,你只要做到能够理解这个过程即可.我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:"我想给你发数据,可以吗 ",这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:"可以,你什么时候发 ",这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:"我现在就发,你接着吧!",这是第三次对话.三次"对话"的目的是使数据包的发送和接收同步,经过三次"对话"之后,主机A才向主机B正式发送数据.
TCP和UDP把端口通信功能提供给应用程序.但是TCP和UDP 在性质上由差别.TCP中补充了IP没有提供的网络功能,在两个程序之间提供一条没有错误的全双工通信线路.所有使用TCP为传输层协议的应用程序要利用网络是十分方便的.数据的再次发送,错误处理和数据包到达顺序的控制等处理在TCP的处理部分进行,在应用程序上不需要进行相关的处理.但是,为了提供面向连接这种高级功能,TCP对计算机系统来说负载很大,速度较慢.
它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去.UDP只是在IP的功能中追加了端口功能的简单结构.因此,对要求处理速度的应用程序提供了传输层功能.UDP中连接和数据的顺序控制等功能由应用程序来完成.这种性质被称为无连接.所以在错误少的局部环境下并要求快速的应用程序中,常用UDP来实现.UDP适用于一次只传送少量数据,对可靠性要求不高的应用环境.比如,我们经常使用"ping"命令来测试两台主机之间TCP/IP通信是否正常,其实"ping"命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的.例如,在默认状态下,一次"ping"操作发送4个数据包.发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包).这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程.正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高.QQ就使用UDP发消息,因此有时会出现收不到消息的情况.
1.3.2 TCP/UDP报文结构
TCP报文头开始部分存放的是发送端端口号(source port)和接收端的端口号(destination port),顺序号(sequence)中存放的是按照发送顺序处理的相关数值.用来表示将某消息段中的数据位全体数据块的字节数与进行通信时某一个规定的偏移量相加后的数值.
确认号(acknowledgment number)是接收端对于发送端接收到的数据块状态的顺序号.具有4位的数据偏移字段(data offset)是以32位为一个单位存放报头长度的数值.从TCP
Source port
destination port
Sequence
acknowledgment number
1
2
3
window
checksum
urgent pointer
options, padding
96位
1:data offset 2:reserved 3:control bits
TCP数据报头的结构
消息段开始的部分到数据偏移×4字节后存放的就是TCP的报文部分.
用于扩展的6位字段后面是控制位(control bits).控制位是6位标志的集合,表示TCP以怎样的状态进行通信.控制位的位置在1为URG,表示紧急数据指针有效;控制位在2为ACK,表示确认号有效;控制位在3为PSH,表示传送强制功能;控制位在4为RTS,表示请求连接重新设置;控制位在5为SYN,表示请求顺序号同步处理;控制位在6为FIN,表示发送结束.
Window表示接收端缓存的数值.接下来检查错误用的校验码(checksum)和为处理紧急数据而配置的紧急数据指针(urgent pointer),最后放的是选择和填充(options, padding)
UDP数据报构造相对比较简单.UDP数据报中含有作为传输层协议实现接收所必需的端口号字段,数据报长度及错误检查用校验码.UDP能进行高速的信息传递,但数据报顺序控制的工作要由应用程序来完成.UDP这种协议只是在IP提供的功能中加上了端口的概念,是简单的传输层协议.
source port
destination port
length
checksum
data
UDP数据报的结构
标签:
原文地址:http://www.cnblogs.com/dosttyy/p/4810081.html