网络其他重要协议或技术

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

相关推荐
草履虫君15 小时前
VMware 虚拟机网络性能优化指南:从 11 秒到 4 秒的完整调优实践
服务器·网络·经验分享·性能优化
We་ct15 小时前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
skywalk816315 小时前
在考虑双轨制,即在中文语法的基础上,加上数学公式的支持,这样像很多计算将更加简单方便,就像现在的小学数学课本里面一样,比如:定x=2*x + 1
开发语言
@insist12315 小时前
信息安全-防火墙技术演进全景:从代理NAT 到下一代及专项防火墙
网络·安全·web安全·软考·信息安全工程师·软件水平考试
小书房15 小时前
Kotlin的by
android·开发语言·kotlin·委托·by
优化Henry15 小时前
TDD-LTE站点Rilink=3链路故障处理案例---BBU侧C口“有发光、无收光”的排查与恢复
运维·网络·信息与通信·tdd
浪客灿心15 小时前
Linux网络传输层协议
linux·运维·网络
就叫飞六吧16 小时前
QT写一个桌面程序exe并动态打包基本流程(c++)
开发语言·c++
threelab16 小时前
Three.js 代码云效果 | 三维可视化 / AI 提示词
开发语言·javascript·人工智能
V搜xhliang024616 小时前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化