网络协议(1)

关于网络的一些基础概念

最近看阮大神博客发现两篇好文:

http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html

http://www.ruanyifeng.com/blog/2012/06/internet_protocol_suite_part_ii.html

看过之后很多概念逐渐清晰遂记录下


ARP协议:通过IP地址去拿MAC地址,只适用于同一个子网络下,通过广播将目标机器的IP地址广播到所有的子网络内的机器,目标机器收到广播后(判断IP地址是否相同)返回自己的MAC地址

路由:网关之间的通信

MAC地址:由机器的网卡唯一指定

网关:子网络的看门大爷,和外界打交道需要通过网关


“传输层”的功能,就是建立”端口到端口”的通信。

“网络层”的功能是建立”主机到主机”的通信。只要确定主机和端口,我们就能实现程序之间的交流。

“应用层”的作用,就是规定应用程序的数据格式。


同一个子网络发送数据需要知道目标机器的MAC地址

非一个子网络发送数据需要知道目标机器的IP地址和网关的MAC地址

IP地址可变,而MAC地址不可变,通过IP地址能够较快的找到目标机器的子网络

例子:

假设网络上要将一个数据包(名为PAC)由北京的一台主机(名称为A,IP地址为IP_A,MAC地址为MAC_A)

发送到华盛顿的一台主机(名称为B,IP地址为IP_B,MAC地址为MAC_B)。

这两台主机之间不可能是直接连接起来的,因而数据包在传递时必然要经过许多中间节点(如路由器,服务器等等),

我们假定在传输过程中要经过C1、C2、C3(其MAC地址分别为M1,M2,M3)三个节点。

A在将PAC发出之前,先发送一个ARP请求,找到其要到达IP_B所必须经历的第一个中间节点C1的MAC地址M1,

然后在其数据包中封装(Encapsulation)这些地址:IP_A、IP_B,MAC_A和M1。当PAC传到C1后,

再由ARP根据其目的IP地址IP_B,找到其要经历的第二个中间节点C2的MAC地址M2,然后再将带有M2的数据包传送到C2。

如此类推,直到最后找到带有IP地址为IP_B的B主机的地址MAC_B,最终传送给主机B。

在传输过程中,IP_A、IP_B和MAC_A不变,而中间节点的MAC地址通过ARP在不断改变(M1,M2,M3),直至目的地址MAC_B。


电脑上网必须有四个参数

1)本机IP地址

2)子网掩码

3)网关IP地址

4)DNS服务器IP地址


本机访问Google全过程

1)将域名发送到DNS服务器,DNS服务器返回域名对应的IP地址(Google的IP地址)

2)将当前服务的端口和目标服务器程序的端口写到TCP头中

3)将当前主机的IP地址和目标服务器端IP地址写到IP头中

4)通过子网掩码判断Google的IP地址和本机的IP地址是否在同一个子网络中

5)如果在同一个子网络中,那么通过ARP协议去获取Google的MAC地址,然后写到以太协议的Header中 end

如果不在同一个子网络中,那么通过ARP协议获取网关的MAC地址并写入以太协议的Header中

6)本机所在网络的网关通过路由将数据发送到Google所在子网络的网关

7)Google的网关将数据发到Google的服务器上(在这之前要先找到Google的MAC地址)



使用wireshark软件抓到的一次HTTP请求,很多东西更清晰了,值得注意点几个点

1)可以清楚地看到三次握手(这里抓到了两次请求)

2)仔细观察收到的HTTP包,可以清楚地看到层级结构,以太协议-IP-TCP-HTTP-数据包

3)数据传输阶段ACK = SEQ+TCP SEGMENT

4)152是对151的回应,表示收到了你的消息;同理154是对153的回应表示收到了你的消息