udp_ip
- 格式:pdf
- 大小:292.52 KB
- 文档页数:15
用户数据报协议(User Datagram Protocol,UDP)l UDP 只在 IP 地数据报服务之上增加了很少一点地功能,即端口地功能与差错检测地功能。
l虽然 UDP 用户数据报只能提供不可靠地交付,但 UDP 地无连接,不进行拥塞控制以及简单性却使其比 TCP 更符合某些应用地需要,例如一些实时网络应用。
l UDP 是无连接地,即发送数据之前不需要建立连接(当然发送数据结束时也没有连接可释放),因此减少了开销与发送数据之前地时延。
l UDP 只提供尽最大努力交付,即不保证可靠交付,同时也不进行流量控制与拥塞控制,因此主机不需要维持具有许多参数地,复杂地连接状态表。
l由于 UDP 没有拥塞控制,因此网络出现地拥塞不会使源主机地发送速率降低。
这对某些实时应用是很重要地。
很多地实时应用(如 IP 电话,实时视频会议等)要求源主机以恒定地速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大地时延。
UDP 正好适合这种要求。
l UDP 是面向报文地。
这就是说,UDP 对应用程序交下来地报文不再划分为若干个分组来发送,也不把收到地若干个报文合并后再交付给应用程序。
l应用程序交给 UDP 一个报文,UDP 就发送这个报文;而 UDP 收到一个报文,就把它交付给应用程序。
l应用程序需要选择合适大小地报文。
l UDP 支持一对一,一对多,多对一与多对多地交互通信。
l用户数据报只有 8 个字节地首部开销,比 TCP 地 20 个字节首部要短得多。
l虽然某些实时应用需要使用没有拥塞控制地 UDP,但当很多地源主机同时都向网络发送高速率地实时视频流时,网络就有可能发生拥塞,结果大家都无法正常接收。
l还有一些使用 UDP 地实时应用需要对UDP 地不可靠地传输进行适当地改进以减少数据地丢失。
端口UDP 应用进程应用进程应用进程队列报文报文到达IP 层通过目地IP地址定位目地主机UDP根据目地端口号将到达地报文加到对应地队列UDP通过二元组(目地IP地址,目地端口号)来定位一个接收方应用进程,而用二元组(源IP地址,源端口号)来标识一个发送方进程端口UDP应用进程应用进程应用进程队列报文报文到达IP 层与后面将要讨论地TCP 不同,端口队列地所有报文地目地IP地址与目地端口号相同,但源IP地址与源端口号并不一定相同。
TCP、UDP、IP校验和
TCP和UDP校验和
校验和所校验的内容包括:12字节伪⾸部、TCP的⾸部以及全部数据。
伪⾸部:包含了源地址、⽬的地址、协议和TCP长度等字段,这能够防⽌TCP出现错误的。
并⾮TCP数据报中实际的有效成分。
伪⾸部是⼀个虚拟的数据结构,其中的信息是从数据报所在IP分组头的分组头中提取的,既不向下传送也不向上递交,⽽仅仅是为计算校验和。
这样的校验和,既校验了TCP⽤户数据的源和⽬的端⼝号以及TCP⽤户数据报的数据部分,⼜检验了的源IP地址和⽬的地址。
(伪报头保证UDP和TCP到达正确的⽬的地址。
因此,伪报头中包含IP地址并且作为计算校验和需要考虑的⼀部分。
最终⽬的端根据伪报头和数据单元计算校验和以验证通信数据在传输过程中没有改变⽽且到达了正确的⽬的地址。
)
tcp报⽂中,在tcp的⾸部之前,多了⼀个12字节的伪⾸部,伪⾸部中4个字节保存源ip信息,4个字节⽬的ip信息,⼀个字节的保留位置,⼀个字节保存协议号(6代表tcp,17代表udp),2个字节保存tcp⾸部+数据的长度。
根据伪⾸部的信息通过位运算,得到了⼀个校验和数据,保存在tcp保温的checksum字段。
接收端接收到tcp报⽂后,也按照特定算法计算出⼀个校验和,与checksum保存的校验和⽐较,如果相同,则完成此报⽂的接收。
如果不相同,则丢弃此报⽂,让发送端重传。
tcp校验和与ip校验和的区别是:TCP和UDP检验和覆盖⾸部和数据,⽽IP⾸部中的检验和只覆盖IP的⾸部,不覆盖IP数据报中的任何数据。
tcp校验和和udp校验和的区别是:TCP的检验和是必需的,⽽UDP的检验和是可选的。
数据包报文格式(IP包TCP报头UDP报头)一、IP包格式IP数据包是一种可变长分组,它由首部和数据负载两部分组成。
首部长度一般为20-60字节(Byte),其中后40字节是可选的,长度不固定,前20字节格式为固定。
数据负载部分的长度一般可变,整个IP数据包的最大长度为65535B。
1、版本号(Version)长度为4位(bit),IP v4的值为0100,IP v6的值为0110。
2、首部长度指的是IP包头长度,用4位(bit)表示,十进制值就是[0,15],一个IP包前20个字节是必有的,后40个字节根据情况可能有可能没有。
如果IP包头是20个字节,则该位应是20/4=53、服务类型(Type of Service TOS)长度为8位(bit),其组成:前3位为优先级(Precedence),后4位标志位,最后1位保留未用。
优先级主要用于QoS,表示从0(普通级别)到7(网络控制分组)的优先级。
标志位可分别表示D(Delay更低的时延)、T(Throughput 更高的吞吐量)、R(Reliability更高的可靠性)、C(Cost 更低费用的路由)。
TOS只表示用户的请求,不具有强制性,实际应用中很少用,路由器通常忽略TOS字段。
4、总长度(Total Length)指IP包总长度,用16位(bit)表示,即IP包最大长度可以达216=65535字节。
在以太网中允许的最大包长为1500B,当超过网络允许的最大长度时需将过长的数据包分片。
5、标识符(Identifier)长度为16位,用于数据包在分段重组时标识其序列号。
将数据分段后,打包成IP 包,IP包因走的路由上不同,会产生不同的到达目地的时间,到达目地的后再根据标识符进行重新组装还原。
该字段要与标志、段偏移一起使用的才能达到分段组装的目标。
6、标志(Flags)长度为3位,三位从左到右分别是MF、DF、未用。
MF=1表示后面还有分段的数据包,MF=0表示没有更多分片(即最后一个分片)。
常用网络通信协议简介常见的网络协议有:TCP/IP协议、UDP协议、HTTP协议、FTP协议、Telnet协议、SMTP协议、NFS协议等。
这里主要简述一下前三种协议。
一.TCP/IP协议1.什么是TCP/IP协议?TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。
它是在网络的使用中的最基本的通信协议。
TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。
并且,TCP/IP 传输协议是保证网络数据信息及时、完整传输的两个重要的协议。
2.TCP/IP协议的组成TCP/IP协议由四个层次组成:应用层:应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。
(1)对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议,邮件传输应用使用了SMTP协议、万维网应用使用了HTTP协议、远程登录服务应用使用了有TELNET协议。
(2)应用层还能加密、解密、格式化数据。
(3)应用层可以建立或解除与其他节点的联系,这样可以充分节省网络资源。
运输层:作为TCP/IP协议的第二层,运输层在整个TCP/IP协议中起到了中流砥柱的作用。
且在运输层中,TCP和UDP也同样起到了中流砥柱的作用。
网络层:网络层在TCP/IP协议中的位于第三层。
在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能。
网络接口层:在TCP/IP协议中,网络接口层位于第四层。
由于网络接口层兼并了物理层和数据链路层所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。
3.TCP/IP协议的特点(1)协议标准是完全开放的,可以供用户免费使用,并且独立于特定的计算机硬件与操作系统。
(2)独立于网络硬件系统,可以运行在广域网,更适合于互联网。
(3)网络地址统一分配,网络中每一设备和终端都具有一个唯一地址。
(4)高层协议标准化,可以提供多种多样可靠网络服务。
二.UDP协议1.什么是UDP协议?Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,UserDatagramProtocol)。
一文解析IP、UDP和TCP的关系互联网,实际上是一套理念和协议组成的体系架构。
其中,协议是一套众所周知的规则和标准,如果各方都同意使用,那么它们之间的通信将变得毫无障碍。
一、IP:把数据包送达目的主机数据包要在互联网上进行传输,就要符合网际协议(IP)标准,互联网上不同的在线设备都有唯一的地址,地址只是一个数字,这和大部分家庭收件地址类似,你只需要知道一个家庭的具体地址,就可以往这个地址发送包裹,这样物流系统就能把物品送到目的地。
计算机的地址就称为 IP 地址,访问任何网站实际上只是你的计算机向另外一台计算机请求信息。
如果要想把一个数据包从主机A发送给主机B,那么在传输之前,数据包上会被附加上主机B的IP地址信息,这样在传输过程中才能正确寻址。
额外地,数据包上还会附加上主机A本身的IP地址,有了这些信息主机B才可以回复信息给主机A。
这些附加的信息会被装进一个叫IP头的数据结构里。
IP头是IP数据包开头的信息,包含IP版本、源IP 地址、目标IP地址、生存时间等信息。
二、UDP:把数据包送达应用程序IP是非常底层的协议,只负责把数据包传送到对方电脑,但是对方电脑并不知道把数据包交给哪个程序,是交给浏览器还是交给王者荣耀?因此,需要基于IP之上开发能和应用打交道的协议,最常见的是“用户数据包协议(User Datagram Protocol)”,简称UDP。
UDP中一个最重要的信息是端口号,端口号其实就是一个数字,每个想访问网络的程序都需要绑定一个端口号。
通过端口号UDP就能把指定的数据包发送给指定的程序了,所以IP通过IP地址信息把数据包发送给指定的电脑,而 UDP通过端口号把数据包分发给正确的程序。
和 IP头一样,端口号会被装进 UDP头里面,UDP 头再和原始数据包合并组成新的 UDP 数据包。
UDP 头中除了目的端口,还有源端口号等信息。
UDP不能保证数据可靠性,但是传输速度却非常快,所以UDP会应用在一些关注速度、但不那么严格要求数据完整性的领域,如在线视频、互动游戏等。
udp通信原理UDP(用户数据报协议)是一种无连接的网络协议,属于传输层。
相对于TCP(传输控制协议),UDP具有传输速度快、不可靠、无拥塞控制等特点。
UDP主要用于不需要可靠数据传输的应用场景,如视频直播、VoIP等。
UDP通信原理:UDP通信过程分为两个部分:发送数据和接收数据。
1.发送数据发送数据时,需要指定目标主机的IP地址和端口号。
UDP没有连接的概念,所以只能通过此方式进行标识。
数据包由以下几个部分构成:源端口号:发送方发送数据的端口号。
目标端口号:接收方接收数据的端口号。
长度:UDP数据包的长度。
检验和:用于校验数据包是否有误。
数据:实际要传输的数据。
发送数据的过程如下:1.创建UDP套接字在发送数据前需要创建一个UDP套接字,通过socket()函数创建。
套接字可以理解为通信的端点,发送方和接收方都需要创建套接字。
2.设置目标IP地址和端口号发送方需要知道目标主机IP地址和端口号。
可以通过通过gethostbyname()函数获取主机IP地址,通过inet_addr()函数将主机IP地址转换为网络字节序。
3.封装数据包将要发送的数据加上源端口号和目标端口号、长度和检验和,封装成数据包。
4.发送数据包通过sendto()函数将数据包发送给目标主机。
2.接收数据接收数据时,需要指定本机的IP地址和端口号。
数据包由以下几个部分构成:源端口号:发送方发送数据的端口号。
目标端口号:接收方接收数据的端口号。
长度:UDP数据包的长度。
检验和:用于校验数据包是否有误。
数据:实际要传输的数据。
接收数据的过程如下:1.创建UDP套接字在接收数据前需要创建一个UDP套接字,通过socket()函数创建。
套接字可以理解为通信的端点,发送方和接收方都需要创建套接字。
2.绑定本地IP地址和端口号接收方需要知道本地IP地址和端口号,可以通过bind()函数绑定。
如果没有指定本地端口号,则系统会随机分配一个未使用的端口号。
tcp、udp、ip、icmp报⽂格式分析TCP 、UDP 、IP、 ICMP协议报⽂格式分析Tcp报⽂格式:Wireshark抓包如图:源端⼝/⽬的端⼝(16bit):在TCP报⽂中包涵了源端⼝/⽬的端⼝,源端⼝标识了发送进程,⽬的端⼝标识了接收⽅进程。
由上图可以看出在此报⽂中我们的源端⼝号是54160, ⽬的端⼝是cichlid(1377)。
序列号(32bit):Sequence Number这个是发送序列号,⽤来标识从源端向⽬的端发送的数据字节流,它表⽰在这个报⽂端中的第⼀个数据字节的顺序号,序列号是32位的⽆符号类型,序列号表达达到2^32 - 1后⼜从0开始,当建⽴⼀个新的连接时,SYN标志为1,系列号将由主机随机选择⼀个顺序号ISN(Initial Sequence Number)。
此报⽂中的序列号是0x37e3d3a9如下图:确认号(32bit):Acknowledgment Number它包涵了发送确认⼀端所期望收到的下⼀个顺序号。
因此确认序列号应当是上次成功接收到数据的顺序号加1。
只有ACK标志为1时确认序号字段才有效。
TCP为应⽤层提供全双⼯服务,这意味着数据能在两个⽅向上独⽴的进⾏传输,因此连接的两断必须要保证每个⽅向上的传输数据顺序。
由图可以看出此报⽂的确认号为0xaa09ab7b。
偏移(4bit):这⾥的偏移实际指的是TCP⾸部的长度,它⽤来表明TCP⾸部中32bit字的数⽬,通过它可以知道⼀个TCP包它的⽤户数据从哪⾥开始,这个字段占4bit,若此字段的值为1000,则说明TCP⾸部的长度是8 * 4 = 32字节,所以TCP⾸部的最⼤长度是该字段的值为1111 = 15, 15 * 4 =60字节。
此报⽂我们的偏移量在0x50中,⼜因它占4bit,0x50等于⼆进制的0101 0000 所以我们的偏移量是 0101=5,所以我们的TCP报⽂⾸部长度为5* 4 = 20字节。
udp分片处理流程UDP(User Datagram Protocol)是一种面向无连接的传输层协议,不提供可靠的数据传输和数据分片重组,因此UDP数据包的分片和重组通常是由操作系统网络栈或网络硬件进行处理。
以下是UDP分片处理流程的一般概述:1. 数据包划分:当应用程序通过UDP发送数据时,数据被划分为较小的数据包(通常称为UDP数据报),这些数据包分别被封装成UDP协议的报文。
2. IP层分片(可选):如果UDP数据包的大小超出了底层网络协议(通常是IP协议)的最大传输单元(MTU),则操作系统的网络栈可能会对UDP数据包进行IP层分片,将其划分成适合网络传输的较小片段。
这些片段会在网络上传输,然后在目标主机上重新组装成完整的UDP数据包。
3. 数据包发送:每个UDP数据包都会被发送到目标IP地址和端口号,通常使用UDP协议的套接字进行发送。
4. 数据包接收:目标主机的网络栈接收UDP数据包,它会将数据包从网络中接收并将其传递给目标应用程序的UDP套接字。
5. UDP数据包的重组(如有分片):如果UDP数据包在传输过程中被IP层分片,目标主机的网络栈将会重新组装这些片段,以还原原始的UDP数据包。
这个过程是透明的,应用程序通常无需关心。
6. 交付给应用程序:最终,UDP数据包的内容会被交付给目标应用程序,应用程序可以访问数据并进行处理。
UDP的设计目标是提供轻量级的数据传输,因此它不提供数据分片和重组的可靠性,也不提供拥塞控制、连接管理或流量控制。
应用程序通常需要自行处理数据的分片和重组,以确保数据的完整性和可靠性。
对于需要可靠传输的应用程序,通常会选择使用TCP协议,因为TCP提供数据分片和重组、可靠性和拥塞控制等特性。