摘抄自阮大的互联网协议入门首先假定这是本机器设置
* 本机的IP地址:192.168.1.100
* 子网掩码:255.255.255.0
* 网关的IP地址:192.168.1.1
* DNS的IP地址:8.8.8.8
- 访问
www.google.com
- DNS协议
- 将网址转化为IP地址,已知DNS服务器为
8.8.8.8
,于是向这个地址发送一个DNS数据包(53端口),数据包如下
然后DNS服务器作出响应,告诉我们Google
的IP地址是172.194.72.105
。
- 将网址转化为IP地址,已知DNS服务器为
子网掩码
- 解析来判断这个IP地址是不是在同一个子网络,这里用到子网掩码 ,已知子网掩码时
255.255.255.0
,本机用自己的IP地址192.168.1.100
做一个二进制AND运算,计算结果为192.168.1.0
,然后对Google的IP也做一下AND运算,结果为172.194.72.0
,两个结果不相等,所以不为同一个子网络。 - 因此,我们要向Google发送数据包,必须通过网管
192.168.1.1
转发,也就是说,接收方的MAC地址是网关的MAC地址。
- 解析来判断这个IP地址是不是在同一个子网络,这里用到子网掩码 ,已知子网掩码时
应用层协议
- 浏览网页用的是HTTP协议,他的整个数据包结构是这样的
HTTP部分的内容类似于下面这样:
我们假定这个部分的长度为* GET / HTTP/1.1 * Host: www.google.com * Connection: keep-alive * User-Agent: Mozilla/5.0 (Windows NT 6.1) ...... * Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 * Accept-Encoding: gzip,deflate,sdch * Accept-Language: zh-CN,zh;q=0.8 * Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3 * Cookie: ... ...
4960
字节,它被嵌在TCP数据包中。
- 浏览网页用的是HTTP协议,他的整个数据包结构是这样的
- TCP协议
- TCP数据包数据包需要设置端口,接收方(Google)的HTTP默认端口是80,发送方(本机)的端口是
1024-65535
之间的整数,这里假定是51375。 - TCP标头的长度为
20
字节,加上嵌入HTTP数据包,总长度变为4980
字节。
- TCP数据包数据包需要设置端口,接收方(Google)的HTTP默认端口是80,发送方(本机)的端口是
- IP协议
- 然后,TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的,发送方是
192.168.1.100
(本机),接收方是172.194.72.105
(Google) - IP数据包标头为
20
字节,加上嵌入的TCP数据包,总大小为5000
字节。
- 然后,TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的,发送方是
- 以太网协议
- 最后,IP 数据包嵌入以太网数据包,以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到,这里ARP即本机
- 发送一个包含在以太网数据包中的数据包,其中包含网关的IP地址,在对方的MAC地址这一栏,填
FF.FF.FF.FF
,表示这是一个广播地址它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。)。
- 发送一个包含在以太网数据包中的数据包,其中包含网关的IP地址,在对方的MAC地址这一栏,填
- 以太网数据包的部分,最大长度为
1500
字节,而现在的IP数据包长度为5000
字节,因为每个包都有自己的IP标头(20字节),所以四个的IP数据包长度分别为1500
,1500
,1500
,560
。
- 最后,IP 数据包嵌入以太网数据包,以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到,这里ARP即本机
- 服务器响应
- 经过多个网关转发,Google的服务器
172.194.72.105
收到了这四个以太网数据包。 - 根据IP标头的序列号,Google将这四个包拼接起来,取出完整的TCP数据包,然后读出里面的
HTTP请求
,接着做出HTTP响应
,用TCP协议发回去 - 本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信.
- 经过多个网关转发,Google的服务器