互联网协议入门

我们每天使用互联网,它是如何实现的呢?

互联网的核心是一系列的协议,总称“互联网协议” internet protocol suite.

1:概述

1.1 五层模型

互联网的实现,分好几层,每一层都有自己的功能,每一层都靠下一层支持

如何分层有不同的模型,有的分七层,但是分5层还是比较容易理解

  • 应用层(application layer)
  • 传输层(transport layer)
  • 网络层(network layer)
  • 链接层(link layer)
  • 物理层(physical layer)

越是下层,越靠近硬件,越是上层,越靠近用户!

1.2 层与协议

互联网的每一层,都定义了好多协议,这些协议叫做“互联网协议” internet protocol.

  1. 物理层,physical layer

就是把电脑连接起来的物理手段,他主要规定了网络的一些电气特性,作用是负责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”

  1. 传输层

有个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,就可以将网页显示出来,完成一次完整 的网络通讯

 

posted @ 2016-06-23 12:16  jinjunzmx  阅读(242)  评论(0编辑  收藏  举报