一个完整的网络访问过程的分析(从计算机网络的角度)

首先,我们要明确上网需要的四个参数(本机),分别是:

1、本机的ip地址

2、子网掩码

3、网关的ip地址

4、DNS的ip地址

这里,我以自己的电脑为例(我的电脑用的是配置ip,当然大多数用的都是动态获取也就是dhcp),截图如下:

一个完整的网络访问过程的分析(从计算机网络的角度)_第1张图片

参数解释:

a、网关本质上是一个网络通向其他网络的ip地址。默认网关必须是本网段的ip地址,一般是本网段的第一个ip。本机ip和子网掩码相与就得到本网段【网络号】。
b、DNS【DomainName System域名系统】,域名和ip相互对应映射的分布式数据库。DNS协议运行在UDP协议之上,使用53端口。

另外,我们需要明确,建立一个完整的socket连接需要的5个参数,分别是:

(本机ip,本机端口号,使用的网络协议,要访问的机器的ip,要访问机器的端口号)

下面我们开始进入本文的正题:

第一步:确定本机参数(其实上面已经有了),这里我们通过命令行的方式来获取,用ipconfig/all(注意:linux系统下使用的是ifconfig)

一个完整的网络访问过程的分析(从计算机网络的角度)_第2张图片

第二步:确定我们要访问的内容,此处我们还是以访问百度为例,假设我们输入www.baidu.com,然后回车(其实更加具体的写法应该是http://www.baidu.com:8080/index.php,这里不过是浏览器帮我们补齐了而已)。

第三步:我们此时要确定的是百度的ip地址,此时就轮到我们的DNS服务器出马了,大致的解析过程可以参看前文,这里从数据包的角度进行分析:

这里我们使用dns协议,向dns服务器发送数据包,dns服务器开启的是53端口(此时5要素都明确了),数据包结构如下:

一个完整的网络访问过程的分析(从计算机网络的角度)_第3张图片

DNS服务器告诉我们百度的ip地址是:115.239.211.112(这里我们使用的是nslookup命令,dns这里可能开启了保护,所以我们看不到他的真实ip,当然也可以使用ping www.baidu.com的方式获得)

一个完整的网络访问过程的分析(从计算机网络的角度)_第4张图片

第四步:利用子网掩码判断我们访问的ip是否和我们是同一个网段(判断方法上面已经给出了),经过判断,我们要访问的ip跟我们不是同一个网段,因此,我们向百度发送数据包必须通过网关转发。也就是说接收方的mac地址是网关的mac地址(如果是同一个网段的话mac地址就是我们要访问的机器的mac地址)。【先ping网关,再用arp -a就可以得到网关mac地址】

第五步:应用层

浏览器访问使用的是http协议,构造的数据包如下:

一个完整的网络访问过程的分析(从计算机网络的角度)_第5张图片

http请求的内容如下:假定其长度为4960个字节,他会被嵌在tcp数据包之中。

第六步:传输层(TCP协议)

    Tcp数据包需要设置端口,接收方的默认端口是80,本机的端口是一个随机生成的1024到65535之间的整数。假定为8888。
Tcp数据包的包头长度为20字节,加上http数据包,为4980字节。

第七步:网络层(IP协议)

然后tcp数据包再嵌入ip数据包,ip数据包需设置双方ip【已知】。Ip数据包的头长度为20字节,总共是5000字节

第八步:网际接口层(以太网协议)

Ip数据包嵌入以太网数据包,以太网数据包需设置双方mac地址【已知】,接收方即网关mac地址【通过arp协议得到】。
以太网数据包的数据部分最大为1500字节,因此ip数据包必须分成4个包,因为每个包都有自己的ip标头,因此四个包的ip数据包的长度分别是1500,1500,1500,560。

一个完整的网络访问过程的分析(从计算机网络的角度)_第6张图片

第九步:服务器响应

经过多个网关转发,具体的路由协议,可以参考计算机网络一书,百度服务器收到这四个以太网数据包,根据ip标头的序号,将四个包拼起来,取出完整的tcp数据包,读出”http请求”,做出“http响应”。再使用http协议发回来。完成通信。


这就是从计算机网络角度分析的一个网络访问的过程。具体的细节当然还有很多,这些也只能算是一个大致的过程。


你可能感兴趣的:(网络协议)