【JavaEE初阶】TCP/IP协议(二)

2023-10-16 14:56:21 浏览数 (1)

网络层重点协议

IP协议

协议头格式如下:

  • 4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4。IPv6就是6.
  • 4位头部长度(header length):描述了IP报头多长。(IP报头是变长的)报头中有一个选项部分 是变长的。是可有可无的。 此处的单位也是四字节。
  • 8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留 字段(必须置为0)。4位表示IP协议的四种形态/四种工作模式。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。
  • 16位总长度(total length):描述了一个IP数据包的长度(头 载荷)这个长度减去前面的IP报头长度就是载荷长度。一个完整的TCP/udp数据报长度。

如果一个IP数据报携带的数据载荷太长了,超过64kb,就会在网络层针对数据进行拆分。把一个数据拆分成多个IP数据报。再分别发送给接收方,再重新拼装。 接收方:数据链路层,针对两个数据帧进行分用,得到两个IP数据报,交给网络层,网络层针对这俩IP数据报进行解析,把里面的载荷拼成一个,交给传输层。

  • 16位标识(id):唯一的标识主机发送的报文。同一个数据拆成的多个包的标识是一样的。
  • 3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第 二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表 示"更多分片",如果分片了的话,最后一个分片置为1,其他是0。类似于一个结束标记。
  • 13位分片偏移(framegament offset):标识了多个包的先后顺序。是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。
  • 8位生存时间(Time To Live,TTL):一个数据在网络上能够传输的最大时间。 这个时间的单位不是“秒”,而是“次数”。一个数据报构造出来,会有一个初识的TTL数值(比如32/64/128…)这个报每次经过一个路由器转发TTL-1. 如果一直减到0,还没有到达目标,此时就认为这个包永远也到不了。可以丢弃了。
  • 8位协议:描述了当前载荷部分内容是属于哪个协议的。(TCP/UDP)
  • 16位头部校验和:此处只需要针对首部进行校验,载荷部分(TCP/UDP数据报)自身已经有校验和了。如果校验和不一致 直接丢弃即可。
  • 32位源地址和32位目标地址:此处看到的IP地址是32位的整数。而我们日常见到的161.185.187.142是采用点分十进制表示的。(使用三个.把32位 4个字节的数字给分割开,分成四部分,每个部分分别使用0-255十进制整数表示。)

所谓地址,期望每个设备都不相同。但是 随着时代的发展,32位数字,只能表示42亿九千万个数字,即IP地址不够用。为了解决这个问题,有很多方法:

  1. 动态分配IP地址。
  2. NAT网络地址转换。本质上就是使用一个IP代表一批设备。 在NAT背景下 将IP地址分为两个大类: (1)内网IP(私有IP)10.* 172.16.*-172.31.* 192.168.* (2)外网IP(公网IP)剩下的就是公网IP NAT要求,公网IP必须是唯一的,私网IP可以在不同局域网中重复出现。 如果某个私网里的设备想访问公网的设备,就需要对应的NAT设备(路由器),把IP地址进行映射,从而完成网络访问。 反之,公网的设备,无法直接访问私网的设备。不同局域网的私网的设备没法直接相互访问。 内网IP只要在局域网内部不重复即可,不同局域网中则是可以重复的。 NAT机制能够有效的解决IP地址不够用的问题 但是使得网络环境更加复杂了。
  3. IPv6:从根本上解决了IP不够用的问题。使用16字节表示IP地址。

当前世界上 仍然是以NAT Ipv4 动态分配来进行网络组建的。

地址管理

IP地址分为两个部分,网络号和主机号 网络号:标识网段,保证相互连接的两个网段具有不同的标识; 主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号; 即通常情况下:IP 192.168.0.10中:192.168.0为网络号10为主机号。

一个IP地址从哪到哪是网络号,从哪到哪是主机号,是由子网掩码来确定的。

1的部分就描述了IP有多少位是网络号。

路由选择

路由选择就是规划路径 相当于使用地图导航。 由于真实的网络环境非常复杂,任何一个节点(路由器)都是无法感知到网络环境的全貌的。一个路由器最多只认识他的一些邻居。如果要进行一个比较长的路径的转发,就比较麻烦。

数据链路层重点协议

考虑相邻节点之间的传输。(通过网线/光纤/无限直接相连的两个设备)

以太网协议

以太网帧格式:

以太网数据帧 = 帧头 载荷 帧尾 帧头:含有目的地址(mac地址(物理地址)),源地址, 类型。 载荷:完整的IP数据报。

IP和mac是如何相互配合的? IP用来描述整个传输过程的起点终点,mac则是用来表述两个相邻节点的起点和终点。

这是数据链路层中另外的协议:ARP协议。 通过这个协议,让某个路由器/交换机,能够认识局域网中的其他设备。通过ARP协议会在交换机/路由器中建立一个表。这个表相当于一个hash表,能够建立出IP和mac之间的映射关系。

MTU

MTU是一个数据链路层的数据帧,它表示了能够承载数据的最大长度。(载荷的长度) 载荷具体多长,和使用的物理介质有很大关系。当然也和数据链路层使用的协议有很大的关系。比如以太网协议 MTU1500字节。 正式因为MTU引起了IP这个协议来进行分包组包。 IP的分包组包通常不是根据这个IP最大长度来分的。大概率情况下,数据链路层的MTU比64kb要小。

应用层重要协议

DNS(域名解析系统)

其实网络上的服务器,要访问它,需要的是, IP地址。但是IP地址太拗口,于是使用一些简单的单词构成字符串来表示这个地址。每个域名都对应了一个/N个IP地址。既然如此,就需要能够把域名和IP地址给对应上。 在早期的时候, 互联网上的服务器很少, 这域名和IP这样的映射关系只是使用一个hosts文件来维护, 每个用户只需要手动自己的hosts文件就可以了, 现在的电脑还是有这个文件的, 也可以使用.

后来互联网蓬勃发展, 到现在每天都有很多新的网站诞生, 此时想要依靠手机维护已经不现实了, 于是现在就有了DNS服务器来维护域名和IP的映射关系, 当你想要访问某个域名时, 就会自动请求DNS服务器, 然后就会返回具体IP地址进行访问.

如果电脑的DNS服务器配置不对, 或者是DNS服务器挂了, 就会出现一个典型的情况: 网络正常的情况下, QQ等应用程序可以用, 但是网页打不开了.

我们自己电脑的DNS服务器可以通过如下方式配置,

首先打开设置中 “网络和Internet” 中的 “高级网络设置” , 点击 “更多网络适配器器选项”.

这里可以自己去配置DNS服务器的地址。

0 人点赞