网络模型
这些分类会有一些大同小异。
每一层都是为了完成一种功能,大家都遵守同样的协议。
- 物理层:
把电脑连接起来,用光缆、电缆、双绞线、无线电波等方式。主要规定了网络的一些电器特性,作用是负责传送0和1的电信号。 - 数据链路层:
链路层对那些0、1信号进行解读。
以太网协议(Ethernet):以太网规定一组电信号构成一个数据包,叫做帧。一帧(64-1518字节)分为标头(固定18字节)和数据(46-1500字节)。标头包含一些说明项(发送者、接受者、数据类型),数据则是数据包的具体内容。
连入网络的设备都必须有网卡接口。网卡的地址也叫MAC地址(厂商标号+流水号),就是以太网数据包的标头里包含的发送者接受者的地址。
ARP协议可以让一块网卡知道另一块网卡的MAC地址。然后进行信息的传输。以太网以广播的方式发送数据包。由网络内的其他计算机判断自己是否为接收方。
ARP协议:
一种能从IP地址得到MAC地址的机制。
不在同一子网时交给网关处理。在同一子网通过IP地址得到MAC地址。
- 网络层:
上面所说的广播方式发送数据包效率非常低,且只能局限在一个子网络中发送。互联网是无数子网络共同组成的一个巨型网络。不在同一个子网只能采用路由的方式发送。子网由ip地址标识。
IP协议:
为每一台计算机分配ip地址,确定哪些地址在统一个子网络。
确定是否在同一子网的方法:ip地址和子网掩码255.255.255.0进行与操作,得到的结果一样则在同一子网。
ip数据包(最大65535字节):分为标头(20-60字节)和数据,放入以太网数据包的数据部分。超过1500字节需要分割成几个以太网数据包分开发送。以太网数据包变成:
- 传输层
每个数据包都应该发送到主机的特定端口。所以不同的程序就能取得自己所需的数据。端口(0-65535),0-1023端口被系统占用。传输层的功能就是建立端口到端口的通信。网络层的功能是建立主机到主机的通信。只有确定主机和端口,就可以实现程序之间的交流。Unix系统把主机+端口叫做socket,有了socket就可进行网络应用程序的开发了。
UDP协议:
在数据包中加上端口的信息。也有标头(8字节)和数据组成,整个UDP数据(不超过65535字节)包放入IP数据包的数据部分。所以整个以太网数据包变成:
TCP协议:
UDP协议简单易实现,但是可靠性较差,不能确定对方是否收到。TCP协议可以认为是一个有确认机制的UDP协议。能确保数据不会遗失。但是实现较复杂,消耗更多的资源。tcp数据包也是位于ip数据包的数据部分。为了保证网络效率,tcp数据包的长度不会超过ip数据包的长度,以确保单个tcp数据包不必再分割。
- 应用层
应用层的作用就是规定应用程序的数据格式。数据放在tcp数据包的数据部分。以太网的数据包变成:
DHCP协议:
自动分配ip地址。
DNS协议:
网址转换为ip地址。
- TCP协议的三次握手和四次挥手
首先client端发送链接请求报文,server端接收链接后回复ack报文,并为这次连接分配资源。client接收到ack报文后也向server发送ack报文,并分配资源。这样tcp连接就建立了。
client端发送中断连接请求,FIN报文。server端收到FIN报文后先发送ack。这时client进入FIN_WAIT状态,等待server的FIN报文。server端确定数据发送完成后向client端 发送FIN报文。client收到后,再向server发送ack进入TIME_WAIT状态。server端收到ack后断开连接。client等待2MSL后没收到回复就证明server端已正常关闭。client也就关闭。tcp连接关闭。