UDP与TCP协议格式


负责两端数据传输

端口号是定位主机进程,tcp和udp协议中包含了端口,这才是能传输数据的原因

UDP缓冲区中,数据是带报头的,上层要读数据,是需要先解析报头,看这条数据多大,再在缓冲区中取对应报头的数据

TCP缓冲区中,数据是不带报头的,上层直接取

UDP协议格式:

在这里插入图片描述

一个UDP报文,包括UDP在内,最大必须是64k,应用层sento发送数据的时候,最大数据长度是64-8k
检验和:接收的数据和发送的数据是否一致,宁愿不处理,也不处理错的
检验算法:二进制反码求和
发送方发送数据时,将检验和置0,从报头开始,逐字节取反相加,直到数据报尾,高出16位的部分阶段与低16位继续相加,得到一个检验和,填充到检验和字段中,发送

粘包:多条数据当作一条数据处理,通过16位数据报长度解决

UDP协议特性

  • 无连接:相对TCP来说,通信前不用建立连接,只要知道对方地址信息就行
  • 不可靠:传输过程中不保证数据不丢包,有序(后发的先到)到达对端
  • 面向数据报传输:传输数据最大大小限制是(64-8k),接收端向上交付数据时必须整条交付(UDP数据放到缓冲区是有报头的,每次取时先取8字节报头,再取剩下数据)

UDP协议特性对编程的影响

  • 影响1:UDP不保证数据有序到达对端(网络拥塞了,后发的数据找别的路提前到了对端),需要程序员在应用层进行包序管理
  • 影响2:如果对可靠有要求,还要进程丢包检测和重传机制
  • 影响3:UDP传输的报文有最大大小限制,所以程序员发送数据时一次不能发送太多,必须在应用层进行分包处理
    UDP传输是整条交付,不会交付半条或多条数据,在应用层接收数据时,缓冲区必须定义的足够大,才能保证获取一条完整的数据

应用层产生比2^16还要大的数据
1.将分包的数据在应用层进行描述,定义一个包头

  • 标识:同一个udp数据报具有相同的标识符
  • 标志位:标识分片的udp数据后还有没有分片;
    为1表示还是还要1个分片片偏移,标识分片在整个udp数据包中的位置,表示是整个数据中第几个字节

2.然后将每个包头+数据包进行传输


3.当应用层接收到数据,识别到有自定义包头,则将该段数据保存在应用层,查看包头来寻找下一段数据

UDP支持局域网广播

udp缓冲区

  • 发送缓冲区:将应用层提交给传输层的应用层数据打上udp包头后,提交给网络层继续传输;
  • 接收缓冲区:去掉udp包头后,将数据递交给应用层;udp不保证数据的可靠和有序;

TCP协议格式

标志位换成请求在这里插入图片描述
MTU的大小一般是1500字节
在传输层只关心端与端传输,udp和tcp协议都不涉及源ip和目的ip

  • 32位序号:TCP是面向字节流的,相当于对每个字节都进行了编号,序号的作用就是双方辨别有没有序,有没有丢包
  • 32位确认序号:接收方接收到数据后,就会给发送方发送一个确认报文(包含确认序号)
    确认序号告诉对方多少号以前的数据已经收到了(快重传,滑动窗口机制)
    第二条数据的确认回复丢了,但是收到第三条数据的确认回复,则发送端就认为第二条数据也收到了
  • 4位头部长度:以4字节为单位,描述TCP报文头部长度(4位数据的最大值是15)
    报头最大长度是60字节,最小20字节
    解析过程:所以在解析的时候先取出20字节固定长度,再根据头部长度,再取出剩余多少报头长度
    TCP报头长度不固定,不管咋变前20字节固定,只有选项数据存在不定长度
  • 6位保留:暂未使用
  • 6位标志位
    选项:0-40字节选项数据(不一定有)
  • 滑动窗口:用于实现滑动窗口机制进行流量控制
    防止数据发送太多,接收方没接收到而丢弃,告诉发送方接收缓冲区还剩多少空间,满了就不要发了

在这里插入图片描述

TCP协议特性

面向连接,可靠传输,面向字节流传输

快重传

因为网络原因后发数据先到,不能保证前面数据是丢了还是正在传输中
后发的数据回复时,ACK=1(也叫重传请求),表示1前的数据已经收到
但是发送方不会立即发送那条数据,需要回复三次ACK=1(重传请求)才能发送

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值