计算机网络的几个概念

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地址不固定网络地址部分和主机地址部分的长度,而是由掩码划分主机部分和网络部分。

子网和超网

  所谓子网就是将有分类地址网络和主机的划分向右移动,以产生更多的网络,使得每个网络中的主机更少,这样可以减少网络中主机的冗余。所谓超网就是将有分类地址网络和主机的划分向左移动,减少网络的数量,使得每个网络中的主机增多,这样可以减轻骨干网络的压力,这些都可以通过掩码来实现

重要的网络协议

  1. ARP协议
      ARP协议是Adress Resolution Potocol (地址解析协议)的缩写。它的功能是将目的IP地址转换为目的MAC地址。

  2. ICMP协议
      ICMP协议是Internet Control Manage Protocol(因特网控制管理协议)的缩写。它是TCP/IP协议族的一个子协议,用于在主机-路由器之间传递控制消息,包括报告错误、交换受限控制和状态信息等。平时使用最多的是基于ICMP协议的Ping命令,它是用来检测网络是否连通的一个命令,可以帮助用户分析和判断网络故障。

  3. 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一般都会分开发送。