应用层
应用层
  由于互联网是开放的架构, 数据来源是五花八门.所以事先必须规定一些格式,否则根本没有办法解读.
  现在讲的应用层就是规定应用程序的数据格式.
  举个例子, TCP协议可以为各式各样的程序传递数据, 比如EMAIL,www,FTP等等, 那么必须有不同的协议规定电子邮件, 网页, FTP的数据格式.这些应用程序的协议就构成了一个应用层, 这就是我们说的五层协议里面最高的一层, 是面对用户的.
他的数据就放在TCP协议的data部分,所以以太网数据包就会变成以下的样子.
Ethernet head | IP head | TCP head | –Application Layer data– |
---|---|---|---|
   在这幅图中, 有4台主机.1和2处于一个子网,3和4处于同一子网.
    如果1给4发送数据包.然后4告诉1, 收到了数据包.这样就可以实现两台计算机之间的通讯.
    而发送这个数据包就必须需要两个地址. MAC地址和IP地址, 有了这两个地址之后, 数据包才能够准确的送到接受者的手中.
    但是MAC地址是有局限的, 如果两台主机不在同一子网, 就没有办法知道彼此的MAC地址.
   所以出现了网关(gateway), 它实现转发的功能. 主机1给主机4发送数据包.他先判断主机4是否处于同一子网.如果不是, 主机1把数据包发给他的网关(A).
    这网关通过路由协议, 发现了主机4处于另一个网关内(B). A网关把数据发送给了B网关, B网关又把数据转发给了主机4.
    主机1想要把数据发送给A网关, 需要知道A网关的MAC地址.
    所以数据包的目标地址实际上分为两种情况.
场景 | 数据包地址 |
---|---|
目标主机同一子网 | 对方的MAC地址,对方的IP地址 |
目标主机非同一子网 | 网关的MAC地址,对方的IP地址 |
我们在windows中连接网络,可能会看到静态IP和动态IP的选项
我们给电脑插上网线开机之后,不能立刻上网.我们必须要给电脑
- 设置本机IP
- 设置子网掩码
- 设置网关的IP地址
- 设置DNS的IP地址
静态IP
  首先它设置比较专业
  其次设置静态IP后这个IP不能被其他计算机使用处于这两点, 大部分用户都是使用动态IP地址上网.
动态IP
  所谓的动态IP就是指计算机开机以后会自动分配一个ip地址, 这个IP地址不会被别人设定.
动态IP使用的协议是DHCP协议
   这个协议规定了,在每一个子网中, 有一台计算机作为DHCP服务器.它专门去负责这个网络内的所有IP地址的自动分配.
    所有新的计算机加入这个网络之后,必须向DHCP服务器发送一个DHCP请求数据包.以此来申请IP地址和相关的网络参数.
    之前提到,两个主机在同一子网时,必须知道对方的MAC地址IP地址,才能发送数据包.
   
但是问题来了
新加入的主机不知道这两个地址.
DHCP协议做了一些比较巧妙的设定,首先它是应用层的协议,建立在UDP协议之上.
所以数据包是这样的
Ethernet head | IP head | UDP head | DHCP data |
---|---|---|---|
    最前面的Ethernet head设置发出方,比如本机的MAC地和接受方DHCP服务器的MAC地址. |
    发射方的MAC地址就是本机网卡的MAC地址,DHCP服务器的MAC地址是不知道的.
    这个时候就会填入广播的地址,有一个默认的6组16进制数组成. FF:FF:FF:FF:FF:FF
    后面的IP head 设置了发出方的IP地址和接受方的IP地址.对于两个主机而言,他们本机都不知道.于是发出方的IP设为0.0.0.0,接收方的IP设为255.255.255.255.
    最后的UDP head设置发出方的端口和接受方的端口.这部分是由DHCP协议规定好的,发出方是68端口,接受方式67端口.
    数据包构造完成之后就可以发送了.以太网是以广播发送的,在同一子网内的每一台主机都会收到这个包.因为接收方的地址是FF:FF:FF:FF:FF:FF所以看不出来是发给谁的.收到这个包的主机会分析这个包的IP地址,确定是不是发给自己的.之前讲ARP协议的时候,已经有接触.
    当看到发出方的IP地址是0.0.0.0,接收方IP地址是255.255.255.255.于是DHCP服务器就知道这个包是发给我的.其他主机就会丢弃这个包.
    接下来DHCP服务器会读出这个包的数据内容,然后分配好一个IP地址,发送回去一个DHCP响应数据包.
    DHCP响应数据包.它的格式和DHCP数据包类似.分配给请求方的IP地址和其他网络参数都会包含在data这部分.新加入的主机就知道了自己的IP地址,子网掩码,网关地址. 有了这个之后就可以上网冲浪了.
下面举一个实例
#当访问一个网页的时候,互联网协议是怎么运作的?
在浏览器地址栏输入google.com
意味着浏览器要向google服务器发送一个请求的数据包.当从本地请求一个网络地址的时候.
- 第一步要走的是DNS的协议
我们知道发送数据包必须要知道对方的IP地址,但是我们现在只知道www.google.com.不知道他的IP地址.
   DNS协议就能够实现这样的功能,他可以将网址转换成IP地址
   假设DNS服务器是8.8.8.8,于是向这个地址发送一个DNS数据包,使用53的端口.而DNS数据包的格式是这样的.
Ethernet head | IP head | UDP head | DNS data |
---|---|---|---|
   我们发送这个数据包之后,DNS数据包会做出一个响应,他会告诉主机Google的IP地址. | |||
- 知道IP地址之后,就需要判断是否和本地处于同一个子网,就需要用到子网掩码.主机对本地的IP地址和从DNS服务器获取的IP地址进行二进制AND运算.由此判断是否在同一网络.
   因为不处于同一个子网,所以要向Google发送数据包就必须要经过网关(gateway).也就是路由器192.168.1.1. 进行转发.
接收方的MAC地址是网关的MAC地址.
- 而浏览网页使用的是http协议,它的数据包结构是
Ethernet head IP head TCP head http data 假设http请求数据包的长度是4960字节,它会被嵌在TCP的数据包当中.
   TCP协议
   TCP的数据包需要设置一个端口,接收方(也就是google),他们的默认的http端口是80.
   而发送方,也就是本机.它的端口是随机生成的1024-65535之间的整数.假设是12345.
   TCP协议的标头(head)是20字节,加上嵌入http的数据包,总长度是4980字节.
- 再往下走是IP协议,这是已知的,发送方是我本机,接受方IP地址是DNS响应包的里的地址.
   IP数据包的标头(head)是20字节,加上嵌入的TCP数据包,总长度是5000字节.
   最后IP数据包嵌入以太网数据包,以太网数据包需要设置双方的MAC地址,发送方是本机的网卡MAC地址,接受方是网关的MAC地址.他通过ARP协议可以得到.
   以太网的数据部分最大长度是1500字节,现在IP数据包的长度是5000字节,所以这个IP数据包要被分割成4个包.
因为每一个包都有自己的IP标头(head).他们是20个字节.
以太网包头 | ip包头 | tcp 数据 |
---|---|---|
Ethernet head | IP head | TCP data_1(1500字节) |
Ethernet head | IP head | TCP data_2(1500字节) |
Ethernet head | IP head | TCP data_3(1500字节) |
Ethernet head | IP head | TCP data_4(560字节) |
   这就是http的请求德过程,请求结束之后.服务端会给本机响应.传回HTML网页.浏览器将他渲染出来.
   这个过程进过多个网关的转发.Google的服务器收到了四个数据包之后,根据IP标题的序号.把四个数据包拼起来,取出一个完整的TCP数据包.
   然后去读取Http请求,接着做一个http响应.最后再用TCP协议发回来.
   本机收到这个响应之后,我们就能看到这个网页,也就完成一次网络通讯.