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+端口号,就可以成功返回数据了。