学习计算机网络的核心就是学习网络协议。
1,什么是网络协议呢?
它是为了计算机网络中的数据交换而建立的一系列规则,标准,即通信规则。打个比方,就是相同地区的人为了方便交流会使用同一种语言交流,所以在我国有很多的方言,这些方言就是为了小范围内人们交流方便而产生的。而如果不同地区的人需要交流(因为说方言,双方都听不懂),双方必须使用同一种语言才可以,大家都会普通话,所以用普通话交流。如果我们想要与国外友人交流,又得换一种语言——英语,大家才能畅通无阻的交流。这里的语言,就是为了人们交换信息而产生的。网络协议和语言的作用一样,不同的计算机需要交流,必须使用同一种协议。语言有很多种,协议也有很多种,只要你们使用的协议一样就可以交流。计算机网络中最常用的协议是TCP/IP协议。如下图:
2,层次划分
为了使不同计算机厂家生产的计算机能够通信,建立更大的计算机网络,国际标准化组织提出了网络七层模型(OSI)。因为以前,不同计算机厂家都有自己的网络体系结构,只有出自同一个厂家的计算机才能进行通信,但是出自不同厂家的计算机之间也迫切需要交流通信,所以就产生了网络七层模型。网络七层模型是适用于所有网络的模型。除了这个模型外,还有TCP/IP的四层和五层模型,它对七层模型进行了简化。她们之间的关系如下图:
3,网络分层
不同的分层中都有对应的网络协议。
TCP/I五层协议从下往上分别是:物理层,数据链路层,网络层,传输层,应用层。下两层偏底层,不需要人工干预,不需要关心太多底层通信协议,只需要了解通信原理即可。而从第三层网络层开始,需要我们人工配置才能正常工作。
1)物理层
作用:为数据传输提供了物质媒介。
2)数据链路层
作用:在不可靠的物理介质上提供了可靠的数据传输。
重要设备:交换机,交换机靠mac来寻址的。
3)网络层
作用:实现了主机与主机之间的数据传输。
协议:IP协议
任何生产厂家的计算机,只要遵循IP协议,就可以和因特网互联互通。因为不同厂家生产的网络系统和设备不能互通,它们进行传输的数据帧格式不同,正是IP协议将不同格式的数据帧转换成了统一的IP数据包格式,才使所有计算机可以互联互通。
重要设备:路由器
4)传输层
作用:将数据可靠的送到相应的端口。
协议:TCP协议,UDP协议
重要设备:网关
5)应用层
4,IP地址
每个网卡都有全球唯一标识,这标识就是mac地址。但是mac地址不具有层次性,也就是不具有快速定位地址的能力。比如,你网购一件东西的时候,地址上只写自己的名字,而不写省市县等地址快递员是无法找到地址的。在计算机网络中也是一样,计算机想要和其他计算机进行通讯,不仅需要mac地址,还需要IP地址进行快速定位每台计算机的具体位置。
mac地址是数据链路层定义的物理地址(先暂且不用管它),IP地址是网络层定义的逻辑地址,为了快速定位。
IP地址是由32位的二进制数组成,通常被分割为4个8位二进制数(也就是4个字节),但为了方便记忆,转换成十进制数,是4个用圆点来分隔的十进制数,十进制数的范围是0-255。
IP分为网络号和主机号。网络号代表计算机所在的网络。
根据网络号的不同,IP分为A,B,C类。A类的网络号是第一个字节,以10开头,B类的网络号是前两个字节,以110开头,C类IP的网络号是前三个字节,以1110开头。
5,子网掩码
对于一个IP来说,我们是不知道它的网络号和主机号是多少的。子网掩码就是为了划分网络部分和主机部分的。
IP地址和子网掩码进行与计算,可以计算出计算机的网络地址。
6,TCP协议
TCP协议是面向连接的,可靠的传输层协议,是传输控制协议,传输效率低。
在源点和终点建立虚拟连接,而不是物理连接,连接成功后进行数据传送,数据发送完毕后,再断开连接。TCP连接的每一方都是由一个IP地址和一个端口组成。
三次握手:
首先,客户端与服务器均处于未连接状态,并且是客户端主动向服务器请求 建立连接:
客户端将报文段中的SYN=1,并选择一个seq=x,(即该请求报文的序号为x) 将这个报文发送到服务器。此时,客户端进入同步已发送状态(SYN-SEND).SYN报文段不能携带数据,但是要消耗掉一个序号。服务器收到请求报文后,若同意建立连接,则回复报文中,SYN=1,ACK=1,并选择一个seq = y,且报文中确认号为x+1,序号为y .此时服务器进入同步已接收状态(SYN-RCVD)
客户端收到服务器的同步确认后,对服务器发送确认的确认。将ACK=1,确认号为y+1,而报文首部的序号为x+1,将该报文发出后,客户端进入已连接状态(ESTABLISHED)。
服务器收到客户端的确认后,也进入已连接状态。以上即三次握手。
四次挥手:
第一次挥手:主机1向主机2,发送FIN报文段,表示关闭数据传送,并主机1进入FIN_WAIT_1状态,表示没有数据要传输了。
第二次挥手:主机2收到FIN报文段后进入CLOSE_WAIT状态(被动关闭),然后发送ACK确认,表示同意你关闭请求了,主机到主机的数据链路关闭,主机进入FIN_WAIT_2状态。
第三次挥手:主机2等待主机1发送完数据,发送FIN到主机1请求关闭,主机2进入LAST_ACK状态。
第四次挥手:主机1收到主机2发送的FIN后,回复ACK确认到主机2,主机1进入TIME_WAIT状态。主机2收到主机1的ACK后就关闭连接了,状态为CLOSED。主机1等待2MSL,仍然没有收到主机2的回复,说明主机2已经正常关闭了,主机1关闭连接。