本人没有系统的学过计算机网络,但是对计算机网络又特别好奇,可是每每看到那些讲解网络的大部头,就累觉不爱了。
但是,经过零零总总的学习,对网络多多少少还是有点了解的。
应用层 | ||
传输层 | 数据包 | gateway |
网络层 | IP分组 | router |
数据链路层 | 帧 | bridge |
物理层 | 比特流 | repeater |
虽然不喜欢看那么多文字描述,但是总是试图把从我这台电脑上到你那台电脑上的流程想清楚。
比如,我在qq上打“I love you”,怎么就在你就知道我爱上你了呢。
首先,这个肯定是经过Socket通信的,通过Socket打开一个流,(Socket是神马?额,简单来说就是方便程序员编程的一个通信接口),程序将这这行字写到流里边。
这时就从应用层来到了传输层,原来的那行字变成了字节流,成了TCP数据包中的一段数据。
然后再到网络层,可能由于数据报过大,IP层需要对TCP包分片,在首部有专门的字段标识哪些分片是来自同一个数据报。
接下来,我们的网络适配器开始接手这个IP分组,数据链路层是根据MAC地址来传输帧的,所以还要在上层IP分组加上一些必要的首部和尾部。
最后数据就来到了网线上,这里是网络的最底层。
数据来到我家的路由器,然后发送出去,中间经过好多路由,中间的路由协议自行脑补,我也只是了解,最终到达腾讯的QQ服务器,然后服务器再把这句话发给你。
这些大致的过程我都了解,唯一想不通的是,如果你是在女生宿舍里,你和你的舍友都在登qq,QQ服务器把这句话已经送达到你们宿舍的路由器,最后为什么没有发生悲剧——那句话被发到了你舍友的qq上。(好悲催!!!)
幸好没发生这样的悲剧,你舍友我可是见过的,还是算了吧,不怎么like。
这个工作就是NAT来完成的!
我得感谢NAT啊,它没坑我。
QQ服务器肯定不知道你们的内部地址,诸如192.168.1.101,192.168.1.102……网络中的路由器是不会转发这样的地址的。
原来你的qq经过NAT路由器访问qq服务器,NAT就记录下(192.168.1.101,153.7.*.188),后一个是你们路由的真是IP地址,这叫做NAT地址转换表,然后回来的时候,就很容易知道是谁了。