网络层
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 了,还没有到达对方,就可以认为包永远也到不了了,就可以丢弃了。