计算机网络的几个概念
OSI七层参考模型
层数 | 名称 | 基本功能 | 对应设备 |
---|---|---|---|
第1层 | 物理层 | 负责链路上比特流传输 | 中继器,集线器 |
第2层 | 数据链路层 | 负责网络内部帧的传输 | 网桥,交换机 |
第3层 | 网络层 | 负责网间两点间可达性 | 路由器 |
第4层 | 传输层 | 保证端到端的传输 | 软件实现,无特殊设备 |
第5层 | 会话层 | 会话的控制 | 软件实现,无特殊设备 |
第6层 | 表示层 | 数据的表达及数据格式的转换 | 软件实现,无特殊设备 |
第7层 | 应用层 | 为用户具体应用服务 | 软件实现,无特殊设备 |
TCP / IP参考模型
TCP / IP参考模型也称为TCP / IP协议栈,与OSI参考模型不同,TCP / IP参考模型是一种工业标准,并非国际标准。TCP / IP参考模型共包含四层结构,分别是接入层(物理层,数据链路层),网络层,传输层,应用层。它们与OSI七层参考模型有着对应关系,如下表
TCP/IP参考模型 | OSI参考模型 |
---|---|
接入层 | 物理层,数据链路层 |
网络层 | 网络层 |
传输层 | 传输层 |
应用层 | 会话层 ,表示层,应用层 |
TCP/IP参考模型中每层的主要协议
TCP/IP参考模型 | 主要协议 |
---|---|
接入层 | 没有定义协议,之所以不定义协议,是为了增强TCP/IP协议栈的可扩展性,这样TCP/IP协议栈可以基于现有的任何承载方法 |
网络层 | IP协议:负责网间的路由 。 ARP协议:负责网络层与数据链路层间的地址转换。 ICMP协议:负责因特网控制管理 |
传输层 | TCP协议:面向连接的网络传输协议 。 UDP协议:无连接协议,只做数据包发送 |
应用层 | Telnet协议:远程登录协议,基于TCP协议,端口号为23 FTP协议:文件传输协议,基于TCP协议,控制端口号为21,数据端口号为20 HTTP协议:超文本传输协议,基于TCP协议,端口号为80 SMTP协议:简单邮件传输协议,基于TCP协议,端口号为24 SNMP协议:简单网络管理协议,基于UDP协议,端口号为161 |
IP协议与IP地址
IP协议是负责网络之间路由的协议,属于网络层中的基本协议,在网络层中数据传输的基本单位是包(Packet),它是在原有的数据帧上封装一个20字节IP头后组成的,在这个IP头包含着源主机的IP地址和目标主机的IP地址。
五类IP地址
地址类型 | 引导位 | 地址范围 | 可用网络地址数 | 可用主机地址数 |
---|---|---|---|---|
A类 | 0 | 1.0.0.0 ~ 126.255.255.255 | 126 | 2 ^ 24 - 2 |
B类 | 10 | 128.0.0.0 ~ 191.255.255.255 | 2 ^14 | 2 ^ 16 - 2 |
C类 | 110 | 192.0.0.0 ~ 223. 255.255.255 | 2 ^ 21 | 2 ^ 8 - 2 |
D类 | 1110 | 224.0.0.0 ~239.255.255.255 | 一般用于组播 | |
E类 | 1111 | 240.0.0.0 ~ 255.255.255.255 | 一般用于研究实验 |
无分类IP地址
与有分类地址相对的还有一种无分类IP地址,无分类IP地址不固定网络地址部分和主机地址部分的长度,而是由掩码划分主机部分和网络部分。
子网和超网
所谓子网就是将有分类地址网络和主机的划分向右移动,以产生更多的网络,使得每个网络中的主机更少,这样可以减少网络中主机的冗余。所谓超网就是将有分类地址网络和主机的划分向左移动,减少网络的数量,使得每个网络中的主机增多,这样可以减轻骨干网络的压力,这些都可以通过掩码来实现
重要的网络协议
-
ARP协议
ARP协议是Adress Resolution Potocol (地址解析协议)的缩写。它的功能是将目的IP地址转换为目的MAC地址。 -
ICMP协议
ICMP协议是Internet Control Manage Protocol(因特网控制管理协议)的缩写。它是TCP/IP协议族的一个子协议,用于在主机-路由器之间传递控制消息,包括报告错误、交换受限控制和状态信息等。平时使用最多的是基于ICMP协议的Ping命令,它是用来检测网络是否连通的一个命令,可以帮助用户分析和判断网络故障。 -
TCP/UDP协议
TCP协议是面向连接的网络传输协议。使用TCP协议传输数据时需要先通过三次握手建立数据连接;在传输过程中,一旦出现错误需要重传数据;数据传输完毕需要断开数据连接。因此TCP协议保证了数据包传输的不丢、不错、不乱序、是一种可靠的传输协议。
UDP协议是一个无连接的网络传输协议。它只提供面向事务的简单不可靠信息传送服务,没有数据的重传机制,当报文发送之后,是无法得知其是否安全完整到达的。因此UDP协议是一种不可靠的数据传输协议。
简述TCP协议三次握手的过程
TCP握手协议
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
SYN:同步序列编号(Synchronize Sequence Numbers)
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手.
完成三次握手,客户端与服务器开始传送数据
A与B建立TCP连接时:首先A向B发SYN(同步请求),然后B回复SYN+ACK(同步请求应答),最后A回复ACK确认,这样TCP的一次连接(三次握手)的过程就建立了!
所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:
四次挥手
所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:
由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况,具体流程如下图:
为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。