️ 主页:小夜时雨
️ 专栏:javaEE初阶
️ 乾坤未定,你我皆黑马
应用层是和代码直接相关的一层,决定了数据要传输什么,怎么去使用这些数据等问题。
应用层这里,虽然存在一些现有的协议(比如HTTP),但是也有很多的情况,需要我们去自定义一些协议,这里的自定协议就是约定应层数据报的数据格式。
比如一个外卖程序,我们需要传输以下的信息。
2. 确定数据按照什么样的格式来组织的
一个简单的方案就是按照分隔符进行组织数据,如下图:
在实际的开发中,还有一些现成的格式,是可以直接使用的
这种格式主要是通过标签的形式来组织数据,具体如下图:
其中 html 可以看作是 xml 的特殊情况
学习协议的一个重要环节:认识 协议的报文格式
UDP没有真正意义上的 发送缓冲区。发送的数据会直接交给内核,由内核将数据传给网络层协议
进行后续的传输动作;
UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃;
UDP的 socket 既能读,也能写,这个概念叫做全双工
两者描述了数据从哪里来以及到哪里去,ip 地址用来区分是哪一个主机,一个主机上有多个应用程序,运用端口号来区分出具体的程序。
表示了 UDP 数据报的长度,2个字节,能表示的最大长度是65535即是64KB,所以传输一个UDP 数据报的最大长度就是64KB
若是传输比较大的数据,怎么解决?
- 将数据拆分成多个部分,使用多个 UDP 数据报进行传输,类似于多次搬东西,但是比较复杂
- 直接使用 TCP 协议,TCP对数据长度没有限制
意义: 用来判断当前传输的数据是否发生错误
校验和往往就是去内容或者是内容的一部分,通过一些算法或者数学公式,进行一些变换得到一个数值。
如果内容发生了改变,则校验和也就会发生了变化,也就可以感知到传输出错
经典面试题:
以上两个问题答案类似,都可以参考TCP的可靠性机制在应用层实现类似的逻辑:
例如:
引入序列号,保证数据顺序;
引入确认应答,确保对端收到了数据;
引入超时重传,如果隔一段时间没有应答,就重发数据;
…
️️️ 好啦,到这里有关 应用层协议与传输层协议 (UDP) 的分享就没了,如果感觉做的还不错的话可以点个赞,关注一下,你的支持就是我继续下去的动力,蟹蟹大家了,我们下期分享传输层协议 (TCP),拜拜~ ☆*: .。. o(≧▽≦)o .。.:*☆