互联网协议
五层模型
最底下的一层叫做"实体层"(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响应以后,就可以将网页显示出来,完成一次网络通信。

浙公网安备 33010602011771号