网络其他重要协议或技术

1.DNS技术

TCP/IP中使用IP地址和端口号来确定网络上的一台主机上的一个程序(服务),但是我们知道IP地址是不便于记忆的,但是域名是比较容易记忆的,例如要访问百度,那么域名就是www.baidu.com,要访问qq,那么域名就是www.qq.com

所以我们期望将域名和IP地址关联起来,于是DNS就应运而生,DNS是一整套从域名映射到IP的系统\n\n用户在浏览器输入域名的时候,浏览器已经内置了DNS服务器的ip地址,所以浏览器此时会自动查询DNS服务器,然后DNS检索数组库,返回ip地址给浏览器,所以此时浏览器就拿到了域名对应的ip地址,所以此时浏览器就可以拿着ip地址访问服务器了

2.ICMP协议

ICMP协议是一个 网络层协议 ,处于IP层之上,TCP协议之下,隶属于网络层。

一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因.

ICMP正是提供这种功能的协议; ICMP主要功能包括:

确认IP包是否成功到达目标地址.

通知在发送过程中IP包被丢弃的原因.

ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;

ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6;

那么在上图情景中,主机A想要给主机B发送报文,此时主机B已经电源关闭离线了,是无法进行应答的,所以如果使用的是IP协议,那么IP协议是不保证可靠性的,所以报文发送给路由器2之后由于无法收到来自主机B的ACP应答,所以路由器2无法得知主机B的mac地址

所以自然也就无法将报文交给主机B,那么此时路由器2就会将报文丢弃,不会返回给主机A任何应答,如果此时使用的是ICMP协议,那么此时路由器2丢弃报文的同时还会给主机A返回一个ICMP应答表示没有成功到达目标地址对应的主机,并且原因是目标不可达

ICMP的报文格式

我们主要注意类型这个字段。

ping指令

注意, 此处 ping 的是域名, 而不是url! 一个域名可以通过DNS解析成IP地址.

ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期).

ping命令会先发送一个 ICMP Echo Request给对端;

对端接收到之后, 会返回一个ICMP Echo Reply;

一个小问题

有些面试官可能会问: telnet是23端口, ssh是22端口, 那么ping是什么端口? 千万注意!!! 这是面试官的圈套

ping命令基于ICMP, 是在网络层. 而端口号, 是传输层的内容. 在ICMP中根本就不关注端口号这样的信息.

traceroute命令

也是基于ICMP协议实现,能够打印出可执行程序主机, 一直到目标主机之前经历多少路由器.

3.NAT技术

之前我们讨论了, IPv4协议中, IP地址数量不充足的问题,NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能;

NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:

很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;

全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的;

当主机A需要向另一个网段的服务器发送数据,主机A数据发送到路由器,因为私有IP是不能出现在公网的,NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37,然后发送给目标主机,之后当NAT路由器收到外部的数据时, 又会把目标IP从202.244.174.37替换回10.0.0.10;

在NAT路由器内部, 有一张自动生成的, 用于地址转换的表;当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系;

NAPT

这时候如果不同局域网里面有多台主机都向服务器发送数据的话,端口号是操作系统随机绑定的,如果这些设备的端口号刚刚好相同的话,访问的是同一个服务器。转换表中的IP地址和port都相同,服务器返回数据的时候,怎么知道要返回给哪个局域网中的主机呢?

所以此时路由器就会将出现重复的报文对应的源端口进行修改,例如将原本的1025修改为上图的1026,所以此时就可以保证映射唯一,这样子服务器返回数据到路由器上面,路由器转化回用来的私有IP+端口号,就可以成功返回数据了。

相关推荐
坤坤子吖12 分钟前
Python基础语法学习:条件、循环与程序控制
开发语言·笔记·python·学习
吠品17 分钟前
volatile到底在拦什么:SysTick->VAL读的哪格
java·服务器·开发语言
模拟器连接器曾工20 分钟前
一进多出M12分线盒4口8口12口可选 PNP和NPN通用传感器集线器
网络·人工智能·m12分线盒·npn通用传感器集线器·pnp通用传感器集线器
RobinDevNotes28 分钟前
大模型3D并行训练怎么配才不浪费算力
网络·人工智能·深度学习·深度优先
狼与自由38 分钟前
python打包
开发语言·python
进击的雷神38 分钟前
OpenClaw 太重、启动太慢?我试了试这个 Rust 重写的轻量版 AI 助手网关
开发语言·人工智能·rust·zeroclaw
辛苦才能39 分钟前
C++ 红黑树(上):五条规则背后的近似平衡与插入的三类情况
开发语言·c++
Είναι η κοπέλα43 分钟前
Python 虚拟环境:venv、conda 与 Python 版本选择全解
开发语言·python·conda
Fcy64844 分钟前
Linux下 传输层协议TCP详解
linux·网络·tcp/ip
程序员老陆1 小时前
嵌入式 Qt:QWidgets 还是 QML / Qt Quick?
开发语言·qt