连接路由器的电脑到底是怎样上网的

(计算机小白或者刚学习计算机网络的同学有可能理解起来有些困难,博主的表达能力有限,对不住了!)

首先我们要明确一个概念,“谁”在上网?

上网的不是我们的电脑,而是一个又一个进程!

在系统层面上区分一个进程用的是进程ID--PID,那么在网络层面上区分一个进程,用的就是端口号了。现在进程A(假设是一个浏览器),想要访问百度,(略过dns,tcp的知识)进程A会通过(假定)端口110发送请求报文给目标进程,即百度处理请求的进程。

该请求报文有两组对应数据——源地址:192.168.1.39,源端口号:110; 目的地址:182.11.43.88,目的端口号:80。(这个80就是目标计算机上处理请求报文的进程B占据的端口,如果不统一某个端口,那全天下那么多进程B,谁知道你们处理请求报文用的哪个端口?)

报文来到路由器,请注意,源地址仍然是内网地址!这个时候路由器就用nat将源地址改成了他在公网上的地址!目的就是为了目标计算机在回复请求的时候能够找得到人,不然全世界那么多叫192.168.1.39的计算机,谁知道是哪个?很多人说课本里面不是这么说的啊,明明ip转发过程变的只有mac地址啊。请注意一个前提,你说的网络是在所有的ip只有“独一份!”的情况下。现在ip地址复用惯常的做法就是这样,甚至某个城市就是一个超大局域网,报文从一个城市来到另一个城市,源地址ip也随之改变!

那什么是nat呢?nat就是网络地址映射,把某个ip附加某个端口映射到另一个ip和端口上去。把内网ip映射到外网ip我懂了,那为啥还要改端口号呢?

假设现在局域网内有三台计算机,三台计算机上分别有一个进程A,B,C使用相同的110端口,都向目标进程发送报文。那路由器改了ip之后如果不该端口号的话,目标进程B返回的报文的目的端口号就都变成110了,路由器就没法区分了。所以他得用某种算法改成不相互冲突的端口,方便将返回的报文返给某个进程时能够找到人。

所以,当你在用电脑QQ和别人聊天时(假设都是连的路由器),你的路由器其实已经悄悄把你的源地址ip改成了公网ip,也就是你在百度上输入“IP”看到的数字。当目标进程返回的报文来到你的路由器时,目的地址肯定是你的路由器的,回吐给你的计算机时帮你重新做了对应,给你改过回了!

 

但是,现在还有一个非常重要的问题没有解决,我在内网中的电脑能够“出去了“,但我朋友ping我的地址192.168.1.39也ping不通啊!

嘿嘿,其实没必要ping通,因为所有的请求都是你发起的,目标进程不需要能够访问到你,只要能够访问到你的路由器就行了。如果非得要公网能够主动找到你,那么你在路由器中固定你的IP地址映射就好了。比如进程A占用的110端口,固定映射成为120端口。那么公网报文填写源地址:你路由器的ip,端口号:110就能找到你了!

 

发布了4 篇原创文章 · 获赞 4 · 访问量 1661

猜你喜欢

转载自blog.csdn.net/tqlgwq/article/details/104270565