udp和tcp都是什么层协议伪首部怎么理解

UDP是传输层协议和TCP协议处于一个汾层中,但是与TCP协议不同UDP协议并不提供超时重传,出错重传等功能也就是说其是不可靠的协议。

由于很多软件需要用到UDP协议所以UDP协議必须通过某个标志用以区分不同的程序所需要的数据包。端口号的功能就在于此例如某一个UDP程序A在系统中注册了3000端口,那么以后从外面传进来的目的端口号为3000的UDP包都会交给该程序。端口号理论上可以有2^16这么多因为它的长度是16个bit

这是一个可选的选项,并不是所有的系統都对UDP数据包加以检验和数据(相对TCP协议的必须来说)但是RFC中标准要求,发送端应该计算检验和

UDP检验和覆盖UDP协议头和数据,这和IP的检验和昰不同的IP协议的检验和只是覆盖IP数据头,并不覆盖所有的数据udp和tcp都是什么层协议都包含一个伪首部,这是为了计算检验和而摄制的偽首部甚至还包含IP地址这样的IP协议里面都有的信息,目的是让UDP两次检查数据是否已经正确到达目的地如果发送端没有打开检验和选项,洏接收端计算检验和有差错那么UDP数据将会被悄悄的丢掉(不保证送达),而不产生任何差错报文

UDP可以很长很长,可以有65535字节那么长泹是一般网络在传送的时候,一次一般传送不了那么长的协议(涉及到MTU的问题)就只好对数据分片,当然这些是对UDP等上级协议透明的,UDP不需要关心IP协议层对数据如何分片下一个章节将会稍微讨论一些分片的策略。

IP在从上层接到数据以后要根据IP地址来判断从那个接口發送数据(通过选路),并进行MTU的查询如果数据大小超过MTU就进行数据分片。数据的分片是对上层和下层透明而数据也只是到达目的地還会被重新组装,不过不用担心IP层提供了足够的信息进行数据的再组装。

在IP头里面16bit识别号唯一记录了一个IP包的ID,具有同一个ID的IP片将会被偅新组装;而13位片偏移则记录了某IP片相对整个包的位置;而这两个表示中间的3bit标志则标示着该分片后面是否还有新的分片。这三个标示就組成了IP分片的所有信息接受方就可以利用这些信息对IP数据进行重新组织(就算是后面的分片比前面的分片先到,这些信息也是足够了)

因为分片技术在网络上被经常的使用,所以伪造IP分片包进行流氓攻击的软件和人也就层出不穷

可以用Trancdroute程序来进行简单的MTU侦测。请参看敎材

这是不常被人注意到的一个细节,这是针对一些系统地实现来说的当ARP缓存还是空的时候。UDP在被发送之前一定要发送一个ARP请求来获嘚目的主机的MAC地址如果这个UDP的数据包足够大,大到IP层一定要对其进行分片的时候想象中,该UDP数据包的第一个分片会发出一个ARP查询请求所有的分片都辉等到这个查询完成以后再发送。事实上是这样吗

结果是,某些系统会让每一个分片都发送一个ARP查询所有的分片都在等待,但是接受到第一个回应的时候主机却只发送了最后一个数据片而抛弃了其他,这实在是让人匪夷所思这样,因为分片的数据不能被及时组装接受主机将会在一段时间内将永远无法组装的IP数据包抛弃,并且发送组装超时的ICMP报文(其实很多系统不产生这个差错)鉯保证接受主机自己的接收端缓存不被那些永远得不到组装的分片充满。

当目标主机的处理速度赶不上数据接收的速度因为接受主机的IP層缓存会被占满,所以主机就会发出一个“我受不了”的一个ICMP报文

UDP协议的某些特性将会影响我们的服务器程序设计,大致总结如下:

3.         关於数据输入:通常服务器系统的每一个端口号都会和一块输入缓冲区对应进来的输入根据先来后到的原则等待服务器的处理,所以难免會出现缓冲区溢出的问题这种情况下,UDP数据包可能会被丢弃而应用服务器程序本身并不知道这个问题。

运输层两个协议TCP和UDP真正做到主機进程到主机进程的传输,它的上层应用层定义的是和端到端无关的规定它的下层网络层定义的是数据在网络间的转发。

运输层就两个協议:TCP和UDPUDP功能较少,用的也较少(幸运的是要学的也少)TCP用的多,主要原因是他功能强大如建立连接、保证可靠、实现流量控制和擁塞控制,所以要学的也多TCP和UDP的这些功能能够实现是基于他们的首部数据,所以我们这节将先学习首部格式

TCP和UDP的定义和区别

传输控制協议TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。仅支持单播传输提供拥塞控制、流量控制等功能。首部最小20字节最夶60字节。大多数场景下使用

用户数据报协议UDP是一个简单的面向数据报的传输层协议提供的是非面向连接的、不可靠,尽最大努力交付的數据传输支持一对一、一对多和多对多的交互通信。没有拥塞控制适合实时性强的应用 。首部开销小仅8字节。适合实时视频回忆、DNS、TCP等协议的控制查询报文

不可靠,尽最大努力交付
支持一对一、一对多和多对多的交互通信
面向报文的即对应用层的报文不拆分也不匼并
没有拥塞控制,适合实时性强的应用
首部最小20字节最大60字节
功能少、要求低。适合实时视频回忆、DNS、TCP等协议的控制查询报文

UDP的用户數据报首部格式

UDP长度:最小为8即只有首部

UDP检验和:计算时会临时增加一个伪首部(包括源IP、目标IP、UDP长度等)计算后删除

伪首部, 又称为偽包头(Pseudo Header):是指在 TCP 的分段或 UDP 的数据报格式中在数据报首部前面增加源 IP 地址、目的 IP 地址、IP 分组的协议字段、TCP 或 UDP 数据报的总长度等共12字节,所构成的扩展首部结构此伪首部是一个临时的结构,它既不向上也不向下传递仅仅只是为了保证可以校验套接字的正确性。

计算方法 发送方 1.检验和置0 2.把伪首部、首部和数据部分拆分为16位的字串 3.按二进制反码计算出这些16位字的和 4.将和求反填入校验和字段 接收方 1.按发送方2、3步计算出结果 2.无差错时结果为1否则出错

TCP的报文段首部格式

序号:TCP对字节流的每个字节都按顺序编号,序号指的是本报文段所发送的数據的第一个字节的序号

确认号ack:期望收到对方下一个报文段的第一个数据字节的序号同时表明前面的所有数据都已经收到了

数据偏移:數据起始处距离报文段的起始处多远,实际指出的是TCP报文段的首部长度

保留:占6位目前为0,没被使用

  • 紧急URG:URG=1代表开启紧急指针

  • 推送PSH(PuSH):URG=1立即把报文段发送出去不再等到缓存都填满后再向上交付

  • 复位RST(ReSeT):RST=1释放连接,重新建立运输连接

  • 同步SYN:SYN=1说明在建立连接同步序号

  • 终止FIN:数据巳发送完毕释放连接

窗口(重点):发送本报文段的一方的接收窗口大小,让接收本报文段的接收方设置其发送窗口大小值用于流量控制

检验和:和UDP一样,伪首部第四个字段为6

紧急指针:指出紧急数据的大小即紧急数据的末尾(从0到末尾)

选项:最大报文段长度MSS、时間戳等等

我要回帖

更多关于 tcp与udp的主要区别是什么 的文章

 

随机推荐