【Linux】Ⅸ基础网络:传输层之UDP协议

认识端口

  • 使用端口(Port)来标记不同的网络进程
  • 端口(Port)使用16比特位表示(0~2^16即65535)
  • 知名端口:0~1023

  • 并不是说非知名端囗的就可以随意去使用了,常用软件在使用的端口如下:

 

网络数据在传输过程当中的五元组信息,任何一个需要在网络当中传输的数据,都会具备五元组信息,否则网络就不会给转发——{源端口,目的端口,源ip,目的ip,协议}

UDP协议

1. 关于UDP协议的三大特点——无连接,不可靠,面向数据报

无连接:是指在给对方发送消息的时候,不需要建立连接,只要知道对方的ip地址以及侦听端口就可以直接发送了

不可靠:对于udp消息的发送方,是不关心消息接收方是否工作正常;对于发送方而言,只关心发送函数(sendto)调用是否成功

面向数据报:需要结合udp缓冲区来分析,分为发送和接收。

应用层给传输层的udp协议提交数据的时候,应用层的数据会被临时写到udp协议的发送缓冲区当中,此时,在缓冲区当中打上udp协议的报头之后,就递交给网络层udp协议在接收到udp数据之后,是整条整条的给应用层进行传递

关于UDP缓冲区:

1. UDP缓冲区是整条数据接受和发送的

2. 对于UDP的发送而言,是有UDP的发送缓冲区的,只不过在发送区打上UDP协议的报头之后就直接提交给网络层了

3. 对于UDP的接收而言,是有UDP的接收缓冲区的,只不过是整条UDP数据提交给应用层的,UDP是不保证UDP数据包是可靠并且有序到达对端的

也可以再加上一个特点——UDP首部开销很小(总共八个字节),具体见下。

2.UDP协议报头字段的含义

 

struct udphdr
{
    u_int16_t uh_sport;/*source port*/源端口
    u_int16_t uh_dport;/*destination port*/目的端口
    u_int16_t uh_ulen;/*udp length*/udp数据长度
    u_int16_t uh_sum;/*udp checksum*/校验和
}; 

UDP数据长度

数据长度:类型是u_int16_t,范围是65535,udp数据报长度最大是65535字节,udp数据长度=udp头部(8字节)+应用层递交数据的长度。

引申出来一个问题:

如果应用层提交给传输层udp协议的数据超过65535字节,应该怎么办?当然udp协议的最大长度是不变的,如果要传输一个超过udp最大长度的数据,应该怎么办?

在应用层自定制协议,将数据在应用层分割成为满足udp传输的小块,在使用udp协议进行传输。有带来一个新的问题,udp协议是面向数据报,也就是意味着udp是整条数据收发的,如何在接收方的应用层表示若干个udp数据是一个应用层数据包?

设计应用层协议(自定制协议字段)字段:

1.属于同一个应用层数据,不同的数据块具有相同的id(也就是之前的被分割了)

2.在报头当中加上偏移量,偏移量是描述分块数据在整个应用层数据包当中的位置

3.分块数据长度

UDP校验和

本质上,是接收方用来校验udp数据在传输过程当中是否失真。

结果:

1.1

udp数据失真:发送方发送的udp数据和接收方接收到的udp数据不一致

处理:接收方的传输层,就不会将失真的数据提交给应用层,直接丢弃了

1.2udp数据没有失真,直接提交给应用层

校验和的计算方式

如何计算(发送方)

1.将udp数据(udp协议头+有效数据),分成多个16个比特位的小段,除了校验和的16个比特位之外,其余的比特位进行相加操作

2.求的结果进行反码运算

3.将反码运算的结果放到16个比特位的校验和当中

如何校验(接收方)

将所有的16个比特位的小段全部加起来,如果是全1,则表示数据是正常的,示例如下:

UDP的应用

  1. DHCP协议:动态主机分配协议,直白点:就是谁上网给谁分配ip,不上网就不分配ip
  • 本质上:还是由于ipv4版本的ip地址枯竭的问题,不够用;
  • 可以不可以使用ip作为一台机器的唯一标识??MAC地址是可以的(本质上是由于MAC地址是全球唯一的)

    2. DNS协议:域名解析协议

作用就是将域名转化成为ip地址,而使用的协议就是udp协议;

也就是说应用层协议用到DHCP和DNS协议的时候,传输层应用udp协议。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值