互联网协议

五层模型

最底下的一层叫做"实体层"(Physical Layer),

  把电脑连起来,可以用光缆、电缆、双绞线、无线电波等方式。

  主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。

最上面的一层叫做"应用层"(Application Layer),

  规定应用程序的数据格式。

中间的三层(自下而上)分别是

"链接层"(Link Layer)、

  规定解读方式:多少个电信号算一组?每个信号位有何意义?

  以太网协议:电信号分组方式,以太网规定,一组电信号构成一个数据包,叫做"帧"(Frame)。

    解决了子网内部的点对点通信。

  每一帧分成两个部分:标头(Head)和数据(Data)。 

    "标头"包含数据包的一些说明项,比如发送者、接受者、数据类型等等;

      发送者和接受者是如何标识呢?

        连入网络的所有设备,都必须具有"网卡"接口。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。每块网卡出厂的时候,都有一个全世界独一无二的MAC地址;一块网卡怎么会知道另一块网卡的MAC地址?ARP协议,可以解决这个问题。系统怎样才能把数据包准确送到接收方?向本网络内所有计算机发送,让每台计算机自己判断,是否为接收方。这种发送方式就叫做"广播"(broadcasting)。

        但是,这样做有一个重大的缺点。如果两台计算机不在同一个子网络,广播是传不过去的。

    "数据"则是数据包的具体内容。

"网络层"(Network Layer)、

  "网络层"的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。

  网络地址则是管理员分配的,它们只是随机组合在一起。

  网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上可以推断,必定是先处理网络地址,然后再处理MAC地址。

  规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。

  IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

    以太网协议不能解决多个局域网如何互通,这由 IP 协议解决。它实现了路由功能,允许某个局域网的 A 主机,向另一个局域网的 B 主机发送消息。

   怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?这就要用到另一个参数"子网掩码"(subnet mask)。

    如何从IP地址得到MAC地址?

      第一种情况,如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理。

      第二种情况,如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。

"传输层"(Transport Layer)。

  当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?建立"端口到端口"的通信。

  UDP协议:在数据包中加入端口信息;UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。

  TCP协议:有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。

    IP 协议只是一个地址协议,并不保证数据包的完整。如果路由器丢包(比如缓存满了,新进来的数据包就会丢失),就需要发现丢了哪一个包,以及如何重新发送这个包。这就要依靠 TCP 协议。

    TCP 协议的作用是,保证数据通信的完整性和可靠性,防止丢包。

服务器发送数据包,当然越快越好,最好一次性全发出去。但是,发得太快,就有可能丢包。带宽小、路由器过热、缓存溢出等许多因素都会导致丢包。线路不好的话,发得越快,丢得越多。TCP 协议为了做到效率与可靠性的统一,设计了一个慢启动(slow start)机制。开始的时候,发送得较慢,然后根据丢包的情况,调整速率:如果不丢包,就加快发送速度;如果丢包,就降低发送速度。

    发送的时候,TCP 协议为每个包编号(sequence number,简称 SEQ),以便接收的一方按照顺序还原。万一发生丢包,也可以知道丢失的是哪一个包。

    收到 TCP 数据包以后,组装还原是操作系统完成的。应用程序不会直接处理 TCP 数据包。操作系统不会去处理 TCP 数据包里面的数据。一旦组装好 TCP 数据包,就把它们转交给应用程序。TCP 数据包里面有一个端口(port)参数,就是用来指定转交给监听该端口的应用程序。

    默认情况下,接收方每收到两个 TCP 数据包,就要发送一个确认消息。"确认"的英语是 acknowledgement,所以这个确认消息就简称 ACK。

ACK 携带两个信息:

  • 期待要收到下一个数据包的编号
  • 接收方的接收窗口的剩余容量

发送方有了这两个信息,再加上自己已经发出的数据包的最新编号,就会推测出接收方大概的接收速度,从而降低或增加发送速率。

TCP 协议可以保证数据通信的完整性,这是怎么做到的?

每一个数据包都带有下一个数据包的编号。如果下一个数据包没有收到,那么 ACK 的编号就不会发生变化。

如果发送方发现收到三个连续的重复 ACK,或者超时了还没有收到任何 ACK,就会确认丢包,即5号包遗失了,从而再次发送这个包。

 

IP 数据包在以太网数据包里面,TCP 数据包在 IP 数据包里面。

以太网数据包的负载是1500字节,TCP 数据包的负载在1400字节左右。

 

越下面的层,越靠近硬件;越上面的层,越靠近用户。

 

 

买了一台新电脑,插上网线,开机,这时电脑能够上网吗?

必须做一些设置。有时,管理员(或者ISP)会告诉你下面四个参数,你把它们填入操作系统,计算机就能连上网了:

  * 本机的IP地址
  * 子网掩码
  * 网关的IP地址
  * DNS的IP地址

由于它们是给定的,计算机每次开机,都会分到同样的IP地址,所以这种情况被称作"静态IP地址上网"。

如果一台电脑的IP地址保持不变,其他电脑就不能使用这个地址,不够灵活。出于这两个原因,大多数用户使用"动态IP地址上网"。

"动态IP地址",指计算机开机后,会自动分配到一个IP地址,不用人为设定。它使用的协议叫做DHCP协议。新的计算机加入网络,必须向"DHCP服务器"发送一个"DHCP请求"数据包,申请IP地址和相关的网络参数。

 

实例:访问网页

在地址栏输入了网址:www.google.com。

浏览器要向Google发送一个网页请求的数据包。

发送数据包,必须要知道对方的IP地址。但是,现在,我们只知道网址www.google.com,不知道它的IP地址。

DNS协议可以帮助我们,将这个网址转换成IP地址。DNS服务器做出响应,告诉我们Google的IP地址是172.194.72.105。

接下来,我们要判断,这个IP地址是不是在同一个子网络,这就要用到子网掩码。结论是,Google与本机不在同一个子网络。

也就是说,接收方的MAC地址将是网关的MAC地址。

浏览网页用的是HTTP协议,HTTP部分的内容它会被嵌在TCP数据包之中。

TCP数据包需要设置端口,接收方(Google)的HTTP端口默认是80,发送方(本机)的端口是一个随机生成的1024-65535之间的整数;

然后,TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的;

最后,IP数据包嵌入以太网数据包。以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到)。

经过多个网关的转发,Google的服务器172.194.72.105,收到了这四个以太网数据包。

根据IP标头的序号,Google将四个包拼起来,取出完整的TCP数据包,然后读出里面的"HTTP请求",接着做出"HTTP响应",再用TCP协议发回来。

本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。

 

posted @ 2018-12-09 17:04  跳跃的灵魂O0o。  阅读(109)  评论(0)    收藏  举报