思考:
数据是如何在两台主机之间传输的?
数据传输过程:
OSI:
开放系统互连参考模型,是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的==开放系统互连参考模型。==
目的:为开放式互连信息系统提供了一种功能结构的框架和参考。
这里所说的开放系统,实质上指的是遵循OSI参考模型和相关协议能够实现互连的具有各种应用目的的计算机系统。
OSI采用了分层的结构化技术,共分七层:
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
应用层是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。
应用层为用户提供的服务和协议:文件传输服务(FTP)、远程登录服务(ssh)、网络管理服等。
上述的各种网络服务由该层的不同应用协议和程序完成。
应用层的主要功能如下:
表示层是对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。
其主要功能是处理用户信息的表示问题,如编码、数据格式转换和加密解密等。
表示层的具体功能如下:
会话层是用户应用程序和网络之间的接口,主要任务是:组织和协调两个会话进程之间的通信,并对数据交换进行管理。
当建立会话时,用户必须提供他们想要连接的远程地址。
会话层的具体功能如下:
允许用户在两个实体设备之间建立、维持和终止会话,并支持他们之间的数据交换.
比如:提供单方向会话或者双方向会话时,管理会话中的发送顺序,以及会话所占用时间的长短。
从逻辑上讲会话层主要负责数据交换的建立、保持和终止,但实际的工作是接收来自传输层的数据,并负责纠正错误。但需要注意,该层检查的错误不是通讯介质的错误,而是磁盘空间、打印机缺纸之类的高级错误。
报文:报文(message)是网络中交换与传输的1
在计算机网络中由于各种干扰的存在,物理链路是不可靠的。因此,这一层的主要功能是:
由于OSI是一个理想的模型,因此一般网络系统只涉及其中的几层,很少有系统能够具有所有的7层,并完全遵循它的规定。
在7层模型中,每一层都提供一个特殊的网络功能。
从网络功能的角度观察:
OSI的物理层和数据链路层
OSI网络层
也称作互联网层或网际层,处理分组在网络中的活动,例如分组的选路。
在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。
OSI传输层
主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:
TCP(传输控制协议)和UDP(用户数据报协议) TCP协议:为两台主机提供高可靠性的数据通信。TCP是==面向连接==的通信协议,通过三次握手建立连接,通讯完成时要断开连接,由于TCP是面向连接的所以只能用于端到端的通讯。TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。也就是TCP数据包中包括序号(seq)和确认(ack),所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。 UDP协议:则为应用层提供一种非常简单的服务。它是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP通讯时不需要接收方确认,不保证该数据报能到达另一端,属于不可靠的传输,可能会出现丢包现象。UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。
OSI会话层、表示层、应用层
应用层负责处理特定的应用程序细节。
数据格式
TCP数据信息:TCP头部+实际数据 (TCP头包括源和目标主机端口号、顺序号、确认号、校验字等)
IP数据包:IP头部+TCP数据信息(IP头包括源和目标主机IP地址、类型、生存期等)
数据帧:帧头+IP数据包+帧尾 (帧头包括源和目标主机MAC初步地址及类型,帧尾是校验字)
数据的封装与解封装: 封装:数据要通过网络进行传输,要从高层一层一层的向下传送,如果一个主机要传送数据到别的主机,先把数据装到一个特殊协议报头中,这个过程叫-----封装。 解封装:上述的逆向过程
当数据以TCP/IP协议传输时的封装与街封装过程如下图:
x序列号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
常见的标志位:
ACK:确认序号有效。
SYN:发起一个新连接。
FIN:释放一个连接。
xxxxxxxxxx
CLOSED 初始(无连接)状态。
LISTEN 侦听状态,等待远程机器的连接请求。
SYN_SEND
在TCP三次握手中,主动连接端发送了SYN包后,进入SYN_SEND状态,等待对方的ACK包。
SYN_RECV
在TCP三次握手中,主动连接端收到SYN包后,进入SYN_RECV状态。
ESTABLISHED
完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。
FIN_WAIT_1 在TCP四次断开时,主动关闭端发送FIN包后,进入FIN_WAIT_1状态。
FIN_WAIT_2 在TCP四次断开时,主动关闭端收到ACK包后,进入FIN_WAIT_2状态。
TIME_WAIT 在TCP四次断开时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态。
CLOSE_WAIT 在TCP四次断开时,被动关闭端收到FIN包后,进入CLOSE_WAIT状态。
LAST_ACK 在TCP四次断开时,被动关闭端发送FIN包后,进入LAST_ACK状态,等待对方的ACK包。
xxxxxxxxxx
TCP三次握手的过程如下:
1. 客户机A端(主动连接端)发送一个SYN包给服务器B端(被动连接端);
2. 服务器B端(被动连接端)收到SYN包后,发送一个带ACK和SYN标志的包给客户机A端(主动连接端);
3. 客户机A端(主动连接端)发送一个带ACK标志的包给服务器B端(被动连接端),握手动作完成。
xxxxxxxxxx
TCP四次断开的过程如下:
1. 客户机A端(主动连接端)发送一个FIN包给服务器B端(被动连接端)请求断开连接;
2. 服务器B端(被动连接端)收到FIN包后,发送一个ACK包给客户机A端(主动连接端);
3. 服务器B端(被动连接端)发送了ACK包后,再发送一个FIN包给客户机A端(主动连接端)确认断开;
4. 客户机A端(主动连接端)收到FIN包后,发送一个ACK包,当服务器B端(被动连接端)收到ACK包后,四次断开动作完成,连接断开。