传输层的协议也并非就只有UDP和TCP
就拿王者荣耀这个游戏来说
- 是否需要可靠性
- 是否需要高效率
那是使用TCP还是UDP呢?
当然是都不用, 除了这两个协议外, 有的传输层协议就是为游戏场景量身打造的. 比如说以KCP为代表的一系列协议.
网络层
- 地址管理
- 路由选择
网络层的代表:IP协议
协议头格式如下:
- 4位版本:此处的取值只有两个(4/6), 也就是 IPv4 和IPv6
- 4位首部长度: 描述了IP报头有多长(报头是变长的), 报头里有一个选项部分, 是变长的(可有可无), 此处单位也是4字节
- 8位服务类型(TOS): 说是8位, 但是只有4位有效, 这四位中只有一位可以是1, 其他的都是0, 4位就表示 IP 协议的四种形态/四种工作模式.(最小延时,最大吞吐量,最高可靠性,最小成本), 这四者相互冲突,只能选择一个.
- 16位总长度(字节数): 描述了一个IP数据包的长度(头部+载荷), 这个长度减去前面的报头长度, 剩下的就是载荷(一个完整的TCP/UDP数据报长度), 一个IP数据包携带的数据载荷太长了, 超过64kb, 就会在网络层针对数据进行拆分, 把一个数据包分成多个IP数据包, 再分别发送, 接收方再重新拼装.
- 16位标识: 同一个数据拆成的多个包, 标识都是一样的.
- 3位标志: 结束标志
- 13位片偏移: 标识了多个包的先后顺序
- 8位生存时间: 一个数据报在网络上能够传输的最大时间, 这个单位不是"秒", 而是"次数", 一个数据包构造出来. 会有一个初始的TTL数值, (比如32或者64或者128…), 这个包每次经过一个路由器转发, TTL就会减1. 如果减到了0, 还是没有到达目标, 此时就认为这个包永远也到不了了.就可以丢弃了.
- 8位协议: 描述了当前载荷部分内容是属于哪个协议的(TCP/UDP)
- 16位头部校验和: 此处只需要针对头部进行校验, 载荷部分(TCP/UDP 数据报) 自身已经有校验和了.
- 32位源IP: 此处看到的IP地址是32位的整数. 32位数字只能表示42亿九千万个数字. 表示发送端
- 32位目的IP: 接收端
上面说到32位IP地址, 只能表示42亿九千万, 在社会发展的今天, 这些地址是远远不够用的, 那有怎么解决呢?
- 动态分配IP地址, 所有的设备不可能同时在线, 有些没用的设备的IP就可以给别人用, 这个方案只是增加了IP利用率, 治标不治本.
- NAT 地址转换, 本质上是使用一个IP代表一批设备, 也能够提高IP利用率, 再使用端口号来区分具体的设备.
在NAT背景下, 就把IP地址分成了两大类:
1 ). 内网IP(私有IP): 10.* , 172.16* ~ 172.31* , 192.168.*
2 ). 外网IP(公有IP): 除了内网IP剩下的就是外网IP.
NAT要求, 公网IP必须是唯一的
私网IP可以在在不同的局域网下出现.
如果某个私网里的设备想要访问公网的设备, 就需要NAT设备(路由器)把IP地址进行映射, 从而完成网络访问.
反之, 公网的设备, 无法直接访问私网的设备, 不同局域网的私网设备没法直接相互访问.
NAT机制能够有效解决IP地址不够用的问题, 但是带来的副作用就是网路环境更加复杂了.
- IPV6 (根本上解决了IP不够用的问题)
IPV6 使用16个字节表示IP地址.
16个字节能表示多少个地址号呢?
这个是天文数字, 能够把地球上的每一粒沙子都分配一个IPv6地址.
IPV6 虽然确实很美好, 但是当前世界上, 任然是以 NAT + IPv4 + 动态分布 来进行网络组建的. 真正使用IPV6的地方非常少.
只是为什么呢?
这是因为IPv4 和 IPv6 不兼容
如果你要想 IPv6 据需要更换支持IPv6 的路由器等网络设备.
但是咱们国家IPv6 普及率非常之高(接近80%), 这是为什么呢?, 因为IPv4 地址分配权在美国人手里, 我们得提防一手美国的"制裁" , 国家出手普及IPv6.
电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅(推荐视频)
IP协议, 地址管理
把一个IP地址, 分成了两个部分, 一个叫网络号, 一个叫主机号
- 网络号: 标识网段, 保证相互连接的两个网段具有不同的标识(局域网)
- 主机号: 标识主机, 同一网段内, 主机之间有相同的网络号, 但是必须有不同的主机号
使用子网掩码表示哪个部分是网络号
路由选择
数据报寻路的过程
一边走一边问.
这里只是简单说一下, 背后知识非常复杂.
数据链路层
考虑的是相邻两个结点之间的传输(通过网线/光纤/无线直接相连的两个设备)
这里典型协议也有很多, 其中最知名的就是以太网, 这个协议规定了数据链路层也规定了物理层的内容.
以太网数据帧 = 帧头 + 载荷 + 帧尾
这里的载荷就是一个完整的IP数据包
帧头就包含了目的地址, 源地址, 类型,
这里的地址不是IP地址了, 而是mac地址(6个字节)
这个地址和IP地址完全独立的, 是另外一套地址体系
6个字节比IPv4地址大很多, 当前每个设备都会有唯一的mac地址. 这个地址不是动态分配的, 而是网卡出厂的时候就被设置好了.
那么IP 和 mac 是如何相互配合的呢?
就是各司其职
IP 用来描述整个传输过程的起点和终点,. mac则是 用来描述两个相邻结点, 起点终点…
帧协议类型字段有三种值,分别对应IP、ARP、RARP
应用层重点协议
DNS
DNS,即Domain Name System,域名系统。DNS是一整套从域名映射到IP的系统
TCP/IP中使用IP地址来确定网络上的一台主机,但是IP地址不方便记忆,且不能表达地址组织信息,于
是人们发明了域名,并通过域名系统来映射域名和IP地址
域名是一个字符串,如 www.baidu.com , hr.nowcoder.com
域名系统为一个树形结构的系统,包含多个根节点。其中:
- 根节点即为根域名服务器,最早IPv4的根域名服务器全球只有13台,IPv6在此基础上扩充了
数量。 - 子节点主要由各级DNS服务器,或DNS缓存构成。
DNS域名服务器,即提供域名转换为IP地址的服务器。
浏览器、主机系统、路由器中都保存有DNS缓存。
Windows系统的DNS缓存在 C:\Windows\System32\drivers\etc\hosts 文件中
Mac/Linux系统的DNS缓存在 /etc/hosts 文件中
网络通信发送数据时,如果使用目的主机的域名,需要先通过域名解析查找到对应的IP地址:
- 域名解析的过程,可以简单的理解为:发送端主机作为域名系统树形结构的一个子节点,通过域名
信息,从下到上查找对应IP地址的过程。如果到根节点(根域名服务器)还找不到,即找不到该主
机。 - 域名解析使用DNS协议来传输数据。DNS协议是应用层协议,基于传输层UDP或TCP协议来实现。