【Java ee初阶】IP协议

网络层

IP 协议
1) 地址管理  针对网络上的各种设备,所在的位置,进行描述和区分 => IP 地址
2) 路由选择  网络结构非常复杂  挑选出合适的路径

 IP 协议的报文结构

ipv4  ipv6  其他版本没有大规模推广使用~~


IP 协议中,报头也是变长的(包含选项的)
0-15 单位 4 字节
IP 报头最大长度 60 字节


其中只有 4 位有效的

IP 协议,转变状态的

8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。

最小延时:发送时间和收到数据的时间尽量短
最大吞吐量:单位时间内传输的数据尽量多
最高可靠性:IP 本身并不考虑可靠性 在 IP 层面上尽量减少丢包的概率

最小成本:消耗的系统资源最少
实际开发中基本不会设置 IP 的这样的选项

IP 数据包,报头 + 载荷 总的长度

对于单个 IP 数据报来说,是的。
但是,如果需要在 IP 数据报中携带超过 64KB 的载荷数据的时候,IP 协议也是能够做到的 

IP 协议自身支持拆包/组包。
如果传输层数据包太长了,IP 自动拆成多个。每个 IP 数据报,负责携带一部分传输层数据包

UDP 来说,载荷太大,G 了
除非应用层,自己写代码实现拆包组包..


上述拆包组包的过程,如何实现的呢?

16位标识:拆出来的多个 IP 数据报 标识是相同的

13位片偏移:描述了每个 IP 数据包相对位置(顺序)  后发先至

3位标志:

有一位不使用。
有一位表示当前是否触发了拆包
有一位表示当前这个 IP 数据报是否是最后一个数据包
就类似链表的空引用

结合三个属性,就可以进行组包了

如果真要基于 UDP,实现传输大的数据包
参考 IP 的实现了


8位生存时间:当前的 IP 数据报能够在网络存活多久

初始情况下,是一个 32/64/128

单位不是“时间”而是“次数”
交换机不算,必须得是路由器,走三层转发(网络层的转发)

数据报每次经过路由器转发一次,TTL -= 1
如果 TTL 为 0 了,还没有到达对方,就可以认为包永远也到不了了,就可以丢弃了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值