系列文章目录
JAVAEE初阶第七节(下)——物理原理与TCP_IP
文章目录
- 系列文章目录
- JAVAEE初阶第七节(下)——物理原理与TCP_IP
- 一.网络层重点协议
- 1. IP协议如何管理地址
- 1.1 解决IP地址不够用的问题
- 1.2 网段划分
- 1.3 特殊的IP地址
- 1.4 路由选择
- 二.数据链路层重点协议
- 1. 以太网(横跨数据链路层和物理层)
- 三.重要应用层协议DNS)
- 四.总结
物理原理与TCP_IP(下)
- 网络层重点协议
- 数据链路层重点协议
- 重要应用层协议DNS
- 总结
一.网络层重点协议
在复杂的网络环境中确定一个合适的路径。
IP协议,主要完成的工作,是两方面:
- 地址管理使用一地址体系(IP地址),来描述互联网上每个设备所处的位置。
设备不仅仅是电脑/手机,路由器,也会有P地址服务器,也会有IP地址(经典的交换机没有P地址)- 路由选择:一个数据包,如何从网络中的某个地址,传输到另一个地址。
协议头格式如下:
4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4。取值只有两种 4 - IPv4(当前的主流IP协议版本。) ,6 - IPv6。
4位首部长度(header length):IP头部的长度是多少个32bit,也就是 length * 4 的字节数。4bit表示最大的数字是15,因此IP头部最大长度是60字节。
8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性(IP并非是像TCP一样提供了强可靠性。但是内部也有一些考虑,能够减少丢包的概率),最小成本(硬件设备的开销)。这四者相互冲突,只能选择一个(只能1有一个置为1)。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。
16位总长度(total length):IP数据报整体占多少个字节。(包含报头+载荷)
虽然IP自身有长度限制,但是P也提供了拆包/组包这样的功能。此时,载荷就可以搞一个很大的,超过64KB也没关系。在IP这一层就会自动拆成多个IP数据报,每个IP数据报来携带载荷的一部分。
上图就是将一个IP数据报分成多个IP数据报,携带一个TCP数据了。
上述拆包过程都是IP(系统内核)自动完成的程序员通过软件代码无法干预到(IP的拆包并不是因为达到64K,而是在数据链路层还有限制)16位标识(id):唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的(区分哪些IP数据报的载荷应该往一起组装)
3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为0,其他是1。类似于一个结束标记。(只有2位有效。其中1位表示这次的IP数据是否拆包了。还有1位表示结束标记)
13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。(描述了要组装的这些包之间的先后顺序)
8位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数。一般是64。每次经过一个路由,TTL -= 1,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环。
单位不是s/ms而是"次数"这里存储的是一个整数一个IP数据报,每次经过一个路由器转发,TTL就-1。如果这个数值减到0了,此时就说明数据包就要被丢包了。这是为了防止某个数据在网络上被无限的转发下去。比如说,如果指定的P地址,是一个错误的IP地址,此时,不能让这个数据包被无限的找下去,找到一定程度还没找到,就应该放弃了。
TTL一般来说就是32/64这样的整数,虽然不是很大但是也足以支持当前的网络传输了。8位协议:表示上层协议的类型。表示在传输层使用哪个协议。
16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏。
32位源地址和32位目标地址:表示发送端和接收端。最关键的地方,32位源地址和32位目的地址,表示了发件人地址和收件人地址,
选项字段(不定长,最多40字节):略。
1. IP协议如何管理地址
IP地址本质上就是一个32位整数(int),为了方便就会把IP地址表示成点分十进制的方式。通过3个点分成4个部分,每个部分1个字节,每个部分的取值都是0-255。
IP地址存在,目的就是为了能够区分网络上的不同的设备。希望每个网络设备都有唯一的一个IP地址。
32位的整数,能表示的数据范围,2^32=>42亿9干万。
但是由于网络发展太快了!尤其是进入"移动互联网"时代,人人都有手机,总的网络设备的数量达到百亿级别还是有可能的(上网的设备不仅仅是手机和电脑,还有服务器/路由器)。这就导致了IP地址不够用了。
1.1 解决IP地址不够用的问题
- 动态分配IP地址
毕竟全世界的设备,也不是同一时刻一起都在上网,更充分的利用现有的IP地址了。但是这种方法治标不治本,并没有根本上解决问题。
- NAT机制(网络地址映射)
先把P地址分成两个大类
(1)私网IP/局域网IP
IP地址是以10.* ,172.16-172.31.* ,192.168.* 开头的都是私网IP,剩余的都是公网IP。
私网上/局域网上的设备,使用私网IP,只要保证局域网内部的IP不重复即可。不同的局域网之间的IP允许重复。
(2)公网IP/广域网IP
要求公网上的设备,对应的公网P,都必须是唯一的。
(1)公网设备访问公网设备,没有任何问题,直接访问即可。
(2)局域网设备访问局域网设备(同一个局域网中),也没有任何问题。
(3)局域网设备访问局域网设备(不同局域网中),不允许访问。
(4)局域网设备访问公网设备,就需要对局域网设备的IP进行地址转换。
(5)公网设备访问局域网设备,不允许主动访问。
NAT机制如何返回数据:
-
局域网的各个设备访问不同的服务器
-
局域网的各个设备(不同端口)访问相同的服务器
-
局域网的各个设备(相同端口)访问相同的服务器
- IPv6
从根本上解决问题的方案,增加了IP地址的个数。
IPV4使用4个字节表示IP地址。42亿9千万。2^32
IPv6使用了16个字节表示IP地址。2^128
1.2 网段划分
网段划分是为了进行组网,把一个IP地址,分成两个部分。网络号+主机号。
如果一个局域网中,网络号和主机号都相同,这个时候是无法上网的。
如果局域网中的设备,网络号和路由器的网络号不相同,也是无法上网的(这个主机无法通过路由器访问外网,也不能访问局域网中的其他设备)
两个相邻的局域网,网络号不能相同(一个路由器连接的两个网络,就是"相邻”的)家用宽带,一般默以就是前三个子节是网络号。主机号的范围就表示局域网中可以有多少设备。一个字节能表示256(不考虑一些特殊的IP)家用宽带来说,256足够了。
1.3 特殊的IP地址
127.0.0.1环回IP(loopback)表示自己本机。 (127.* 都是环回IP)
如果某个P的主机号为全0,表示"这个网段",这个IP比较特殊,不能分配给某个主机。
如果某个IP的主机号为全1(二进制比特位),表示"广播地址" - 192.168.0.255广播是指一对多这样的传输。而且这里的多,指的是所有设备。
单播:一对一
组播:一对多(多是有限制的,整体的一部分)
广播:一对多(整体的所有)
往广播地址上发消息,局域网中的所有设备都能收到!(必须要发UDP的消息TCP不支持广播!)
1.4 路由选择
路由选择要做的就是规划出一条路线。用于网络结构太复杂了。每个路由器都无法掌握全局的信息,只能掌握一部分局部信息。此时路由器规划出来的路线,只能是一个较优解。
路由器的路线规划是一种探索式/启发式/渐进式的路线规划。无法在最开始的时候就把路线确定好,而是走一步规划一步。
路由器转发数据包的过程就是类似问路的过程
数据报中包含了"目的IP"字段,就是要问路的目标,每个路由器都对于网络环境(和它相邻的设备情况)有一定了解的(路由器内部有一个数据结构,路由表)此时,就可以根据他的了解告诉我们下一步往哪个方向走。
用目的IP去路由表中匹配查看要转发的数据报中的"目的IP"和路由表中的 的那一条记录是对应的。匹配到的结果就会从对应的网络接口进行进一步地转发。
但是由于每个路由器能感知到的信息是有限的,只能知道一些和它相邻的设备的情况。这时候就很可能你此时查询的结果在路由表中不存在。这是路由表中的特殊的表项(default)(下一眺)。(这个表项是一个默认的的选项,它通常是指向更上层路由器。)就能帮助“问路”。
二.数据链路层重点协议
1. 以太网(横跨数据链路层和物理层)
以太网的帧格式如下所示:
- 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的;
- 帧协议类型字段有三种值,分别对应IP、ARP、RARP; 标识了载荷数据的含义
(1)类型0800:其中的IP数据报意味着以太网数据帧是一个能够携带业务数据的报文(大概率是业务数据,也有可能是携带一个SYN这种)
(2)类型0806:其中ARP请求/应答可以认为是两个横跨了网络层和数据链路层的协议,ARP的效果就是能够让路由器/交换机建立一个内部的结构,IP->mac(类似于hash表)。转发表(不是路由表)只是描述了一个设备和那些设备之间是连接着的
(3)类型8035:其中RARP请求/应答可以认为是两个横跨了网络层和数据链路层的协议,RARP效果是让路由器和交换机也是建立一个内部的结构 mac ->IP- 帧末尾是CRC校验码。
以太网数据帧,载荷部分,是有一定长度要求的最短是46字节,最常是1500字节。(受限于物理设备的特性)
46字节,是因为ARP是46字节。
1500字节(不到1.5kb)是硬件的限制了。(和以太网的网口/网线这些物理设备有关系的)称为"MTU"(最大传输单元)
IP数据报的拆包组包往往是因为这个MTU导致的,而不是达到了自身的64KB的限制
数据链路层也不仅仅是以太网,还存在其他的协议,不同的协议,对应的MTU也会有所差别。
数据链路层,引入了另外一套地址体系,称为"mac地址"/物理地址。(mac地址和IP地址是独立的两套地址体系。)
IP地址侧重于全局的转发。从起点到终点这整个转发过程,通过IP地址负责完成。(查询路由表,通过IP地址)
MAC地址,侧重于局部的转发。两个相邻设备之间的转发(一个电脑连上一个路由器,这俩就是相邻设备)
一般的开发中很少会使用到mac地址,而IP地址会用的非常多。
mac地址通常按照16进制的方式表示,字节之间通常使用-或者:来分割。mac地址表示的范围比IPv4的地址大很多,因此当前mac地址都是和主机(网卡)一对一绑定的。
IP地址很多时候是动态分配的,mac地址就是静态分配的。网卡出厂的时候,mac地址就写死了。
由于mac地址有这样的特性,有些程序,就会使用mac地址来作为你机器的身份标识
前面通过路由表,拿着IP查询走哪个网络接口通常指的是路由器的LAN /WAN还需要当前网络环境,来获取到这里的对应要转发给的mac地址(需要知道通向的设备具体的mac地址是啥)
三.重要应用层协议DNS)
DNS-域名解析系统
使用IP地址来描述网络设备的位置。使用点分十进制,但是还是太方便进行更好的传播。因此就引入了域名。
域名是一串可读性更好的单词。把域名自动的转换成对应的IP地址。
例如:https://www.baidu.com
最开始的时候是通过hosts文件来进行转换的,hosts文件的内容就是行文本,包含很多行,每一行都有IP和域名。每次访问某个域名就会进行查询,获取到对应的IP.
hosts文件内容:
hosts文件目前仍然是有效的,只不过一般情况下都是空的内容
随着互联网的发展,域名和服务器都越来越多了,此时维护hosts文件,非常麻烦了。于是就有大佬干脆搭建了一组服务器,来提供域名解析服务。(hoss内容放到服务器里了)
某个主机要想访问某个域名,就先查询一下域名解析服务器(DS服务器),查到的结果,就是域名对应的IP,拿着IP进行访问即可。DNS服务器,并非是只有唯一 一份,是有很多份.
最开始的这一套DNS服务器,称为“根域名服务器"这里的内容是最全的。各个国家的网络运营商,再根据根域名服务器里的内容,搭建出"镜像服务器”(全世界有无数个镜像)。网民上网的时候,一般都是就近的访问附近的运营商的镜像DNS服务器,镜像会定期的从根域名服务器这里同步数据。
搭建域名服务器的时候还会对于域名进行分级管理,一级域名,二级域名,三级域名。这样就可以控制每个服务器管理的数据都不多。
四.总结
数据链路层 :
- 数据链路层的作用:两个设备(同一种数据链路节点)之间进行传递数据
- 以太网是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。例如:
规定了网络拓扑结构,访问控制方式,传输速率等;- 以太网帧格式
- 理解mac地址
- 理解arp协议
- 理解MTU
网络层
- 网络层的作用:在复杂的网络环境中确定一个合适的路径。
- 理解IP地址,理解IP地址和MAC地址的区别。
- 理解IP协议格式。
- 了解网段划分方法
- 理解如何解决IP数目不足的问题,掌握网段划分的两种方案。理解私有IP和公网IP
- 理解网络层的IP地址路由过程。理解一个数据包如何跨越网段到达最终目的地。
- 理解IP数据包分包的原因。
- 了解NAT设备的工作原理。
传输层
传输层的作用:负责数据能够从发送端传输接收端。
理解端口号的概念。
认识UDP协议,了解UDP协议的特点。
认识TCP协议,理解TCP协议的可靠性。理解TCP协议的状态转化。
掌握TCP的连接管理,确认应答,超时重传,滑动窗口,流量控制,拥塞控制,延迟应答,
捎带应答特性。
理解TCP面向字节流,理解粘包问题和解决方案。
能够基于UDP实现可靠传输。
理解MTU对UDP/TCP的影响。
应用层
应用层的作用:满足日常需求的网络程序,都是在应用层
能够根据自己的需求,设计应用层协议。
了解HTTP协议。
理解DNS的原理和工作流程。