标签:
我们每天使用互联网,它是如何实现的呢?
互联网的核心是一系列的协议,总称“互联网协议” internet protocol suite.
1:概述
1.1 五层模型
互联网的实现,分好几层,每一层都有自己的功能,每一层都靠下一层支持
如何分层有不同的模型,有的分七层,但是分5层还是比较容易理解
越是下层,越靠近硬件,越是上层,越靠近用户!
1.2 层与协议
互联网的每一层,都定义了好多协议,这些协议叫做“互联网协议” internet protocol.
就是把电脑连接起来的物理手段,他主要规定了网络的一些电气特性,作用是负责0,1的电信号
2. 链接层 link layer
单纯的0,1是没有任何意义,必须规定解读方式:多少个电信号算一组,每个信号的意义?
这就是链接层的功能,它在物理层上面,确定了0和1的分组方式
以太网协议:
以太网规定,一组电信号构成一个数据包,叫做“帧” (frame),每一个帧都分成2部分, 标头(head)和数据(data)
"标头“包含数据包的一些说明项,比如发送者,接受者,数据类型等等,”数据“包含具体内容
”标头“的长度,固定为18字节,”数据“的长度,最短为46字节,最长为1500字节,so ,整个frame的最短为64个字节,最长为1518个字节,如果数据很长,就必须分割成多个frame来发送
MAC地址
上面提到,每个数据frame都是由head & data,head中包换了发送者和接受者的信息,就是MAC地址,每个网卡的都是独一无二的,通常用12个16进制数表示。00-B0-D0-86-BB-F7,长度为48个二进制
广播(broadcast)
定义地址是第一步,一个网卡如何知道另外一个网卡的MAC地址?主要是通过ARP协议,以太网数据包必须知道对方的mac地址才能发送,
其次,有个mac地址,系统怎么才能把数据包准确发送给接收方?
以太网采用广播的方式去把自己的数据frame发送出去,整个局域网的电脑都会收到,然后读取标头的信息,以确定自己是否为接收方,是的话就接收,不是的话就丢弃
有了数据包的定义,网卡的MAC地址,广播的发送,连接层就可以在多台电脑直接传送数据
4:网络层
如果2台电脑不再同一个局域网里面,通过广播的方式是不能传输出去的,因此必须找到一种方法,如何区分哪些MAC地址属于同一个网络,哪些不是,如果在同一个局域网就采用广播,如果不是就采用路由的方式。,
in this case, 为了使我们能够区分不同计算机是否属于同一子网络,这个地址就做 网络地址,简称网址
so ,each computer must owns 2 different address :MAC and IP address .网络地址帮我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络的目标网卡,thus ,in logically,network address is priority to be handled .
5:IP 协议
IPV4 。由32个二进制组成,分4段的十进制来表示IP地址。如何判断2台电脑是否在同一个子网呢?这里就是要用另外一个概念子网掩码“ subnet mask",if you know the subnet mask,it‘s easy to identify theirs network .
6:IP 数据包
根据IP协议发送的数据,就叫做IP数据包。不难想像,里面必须包括IP地址信息
但是前面说过,以太网数据中只包含MAC地址,没有IP地址的栏位,那怎么办?我们可以把IP数据包直接放到以太网数据包的数据部分,
具体来说IP数据包也分为标头和数据2个部分
head + data
标头主要包括版本,长度,IP地址等信息,数据 则是IP数据包的具体内容,他放进以太网数据包,以太网数据包就变成;
head + head + data
IP 数据包“HEAD”部分的长度为20-69字节,整个数据包的总长度最大为65535个字节, so ,theoretically,一个IP数据包的数据部分最大为65515个字节,前面讲过,一个以太网包的数据部分最大了1500个字节,所以,如果IP数据包超过了1500个字节,就要分割为几个frame 发送
7:ARP协议
因为IP数据包时放在以太网的数据包发送的,所以我们必须知道2个地址,对方的IP地址和MAC地址,通常情况,对方的IP地址是已知的,MAC地址是未知的
因此我们需要一种机制通过IP地址来得到MAC地址。
如果在同一个子网,我们可以通过ARP协议得到对方的MAC地址,ARP协议也是发一个数据包,包含在以太网数据包中,其中包含了所查询的主机的IP地址,对方的MAC地址栏填的是FF:FF:FF:FF:FF:FF表示广播地址,他所在的网络的所有主机,都会受到这个数据包,重中取出IP地址,与自身IP地址进行比较,如果相同则做出回应
如果不在同一子网,只能把数据包传到2个子网的连接处“vgetway”
有个MAC地址和IP地址,我们已经可以在互联网上任意2台主机上建立通信
接下来的问题是,同一台主机上有许多程序要连接网络,比如,你一遍浏览网页,一遍和朋友聊天,当一个数据包重互联网发来的时候,你怎么知道,它是表示网页的内容,还是表示聊天的内容。
也就是说,我们还需要一个参数,表示这个数据包到底供哪个进程使用。这个参数就叫做端口。port
他其实是每一个使用网卡的程序的编号。每个数据包都发送到主机的特定端口,所以不同的程序就能娶到自己所需要的数据。
端口是0-65535之间的一个整数,16个二进制,0-1023端口被系统占用,用户只能选用1023后面的端口。no matter you are surfing or chating on line ,there will be a port selected to match with server port .
传输层的功能就是建立,端口到端口的通信。相比之下,网络层的功能就是建立主机要主机的通讯,只要确定主机的端口,我们就能实现程序之间的交流。因此,unix系统就是把主机+端口 叫做 套接字,socket.,有了它,就可以进行网络应用程序开发了
UDP协议
现在我们必须在数据包中加入端口信息,这就需要新的协议,最简单的实现就叫做UDP协议,他 的 格式几乎就是在数据前面加上端口号
UDP数据包,也是由标头和数据组成
Head + data
"head"部分主要定义了端口和接收端口,“data"就是具体内容,然后把整个UDP数据包放到IP数据包的数据部分,而前面也提过IP数据包又是放在以太网数据包之中,所以整个以太网数据变成了
head + head + head +data
TCP协议
UDP协议有点比较简单,容易实现,但是可靠性差。
为了提高网络可靠性,TCP协议就诞生了,没发出一个数据包都要求确认,如果有一个包遗失,就说不到确认,发出方就知道有必要重发这个数据包了
TCP数据包和UDP数据包都一样,都是内嵌在IP数据包的数据部分,TCP数据包没有长度限制.Theoretical no limited ,in general ,the lenght of TCP is no longer than the lenght of IP package to ensure singal TCP package don‘t need to be divided .
应用层,
应用程序收到传输层的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则无法解读
“应用层”作用 就是规定应用程序的数据格式
举例来说,TCP协议可以为各种各样的程序传递数据,比如email,www.ftp.必须有不同的协议来规定电子邮件,网页,FTP数据格式,这些应用程序就构成了 应用层
这是最高一层,直接面对用户,他的数据放在TCP数据包的数据部门,因此,以太网的数据包变成了
Head + Head + Head + data
以太网标头 IP标头 TCP标头 应用层数据
小结:
我们已经知道,网络通信就是交换数据包,电脑A向电脑B发送一个数据包,后者收到了,回复一个数据包,从而实现2台电脑之间的通信,
发送这个包,我们需要知道对方的IP地址和MAC地址。有了这2个地址,数据包才能准确送到接受者手中,但是前面说过,MAC地址有局限性,如果2个电脑 不再同一个子网中,就要通过gateway转发。网关通过路由协议,发现电脑位于网络B, 又把数据包发给网关B,网关B在转发给对应电脑
同一个字网络 ----〉对方的MAC地址,对方 IP地址
非同一个 ----〉网关MAC地址,对方IP地址
8: 用户上网设置
手动IP,DHCP
DHCP是一种应用层协议,建立在UDP协议之上
head + head + head + data
以太网 IP UDP DHCP SERVER
最前面的以太网标头设置本机的MAC地址和接受方DHCP服务器的MAC地址,后者不知道就填FF-FF-FF-FF-FF-FF
后面的IP标头,设置本机的IP地址和接受发的IP地址,本地不知道0.0.0.0 ,接收方 255.255.255.255
UDP标头,设置发出方的端口68 和接收方端口67
这个数据包构造完成就可以发出,以太网是广播发送,同一个子网的没台计算机都接收到了,还必须分析其IP地址才能确定是否发给自己的,DHCP看到发出方的0.0.0.,接收方是255.255.255.255就知道是给我的,其它的PC就丢弃这个包
接下来DHCP读取包的内容,分配好IP地址,发送回去DHCP响应,这个包夜类似
9:实例,访问网页
本机:192.168.1.100
255.255.255.0
192.168.1.1
8.8.8.8
然后打开浏览器,访问google.com 这就意味着浏览器要向 google发送一个网页请求
DNS协议
发送数据包,必须要知道对方的IP地址,但是我们只知道网址,DNS协议可以帮助我们把网址转换成IP
已知DNS服务器8.8.8.8,于是我们向这个地址发送一个DNS数据包
head + head + head + data
以太网 IP udp DNS数据包
然后DNS做出相应,告诉我们GOOGLE的地址是172.194.72.105
子网掩码判断是否在同一个子网
通过已经知道的子网掩码255.255.255.0 和IP地址作and 运算
因此我们要向google发送数据包,必须通过网关转发,也就是说接受的MAC地址就是网关地址
应用层协议
浏览网页用的是HTTP协议,他的整个数据包构造
head + head + head + data
以太网 IP TCP HTTP
Http 部分的内容,
GET / HTTP /1.1
host: www.google.com
connection : keep-alive
user-agent :mozilla5.0 (windwos NT)
accept:
text/html,applicaiton/xhtml,applicaiton/xml;1=0.9,*/*;1=0.8
accept-encoding;gzip,deflate,sdch
accept-language:zh-cn,zh;q=0.8
accept-charset: GBK,utf-9;q=0.7,*;q=0.3
cookie;... ...
我们假定这个部分长度为4960字节,他会被封装在TCP数据包之中
TCP协议
TCP数据包需要设置端口,google的http port 80,发送方的端口是随机生成的1024-65535 之间,假定51755
TCP数据包的标头长度20字节,加上嵌入的http数据包,总长度4980
IP协议
TCP数据包再嵌入IP数据包,ip数据包为双方IP地址,
ip的标头为20字节,加上嵌入的TCP数据包为5000字节
以太网协议
最后IP数据包嵌入以太网数据包,以太网数据包需要设置双方的MAC地址,本机的MAC地址和接收方网管的MAC地址,(通过ARP得到)
以太网数据部分最大1500字节,而现在IP的数据包长度5000,因此,IP数据包必须分割4个包,因为每个包都有自己的IP标头(20 字节)所以4个包的IP数据包长度分别为1500 1500 1500 560
head head data
head head data
head head data
head head data
以太网 ip TCP DATA
服务器端响应
经过多个网关转发google服务器收到了这4个以太网数据包
根据IP标头的序号,google将4个包平起来,取得完整的TCP数据包,然后读取里面的HTTP请求在作出回应,在同TCP协议,发回来
本机受到HTTP,就可以将网页显示出来,完成一次完整 的网络通讯
标签:
原文地址:http://www.cnblogs.com/Jinjunzmx/p/5610281.html