前言
本文主要介绍数据封装过程与常用的协议。
一、数据封装过程
二、传输层协议——TCP、UDP
1.TCP协议
一种面向连接的、可靠的传输层通信协议,由IETF的RFC 793定义。
报文格式
Seq number:序号,表示传输第几个数据段 Ack number:确认号,收到多少数据段 SYN:同步请求,建立连接 ACK:代表收到对方数据段的状态。 FIN:结束,断开连接。
TCP的连接——三次握手
任何基于TCP的应用,电脑需要与服务器进行连接,在发送数据之前,都需要由TCP进行“三次握手”建立连接。 1.请求端PC——>服务器端。SYN置位,请求建立连接。Seq number为产生的随机序号a,Ack number为0(尚未进行连接)。 2.服务器端——>请求端PC。SYN置位,请求建立连接;ACK置位,确认收到请求。Seq number为产生的随即序号b,Ack number为a+1(对方序号+1)。 3.请求端PC——>服务器端。ACK置位,确认收到请求。Seq number为a+1(本地序号+1),Ack number为b+1(对方序号+1)。 TCP连接建立。
第三次传输有什么作用? 答:当网络质量差时,前面的数据段可能会延迟回复,如果没有第三次传输确认,会导致服务器端连接一直打开,造成资源浪费。
TCP的关闭——四次挥手
当数据传输完成,TCP需要通过“四次挥手”机制断开TCP连接,释放系统资源。 1.请求端PC——>服务器端。FIN置位,ACK置位。Seq number为a+1(本地序号+1),Ack number为b+1(对方序号+1)。 2.服务器端——>请求端PC。ACK置位。Seq number为b+1,Ack number为a+2(对方序号+1)。 3.服务器端——>请求端PC。FIN置位,ACK置位。Seq number为b+1,Ack number为a+2(对方序号+1)。 4.请求端PC——>服务器端。ACK置位。Seq number为a+2,Ack number为b+2。 TCP连接断开。
为什么服务器端要分两次传输置位信息呢? 答:第一次传输是确认收到断开连接请求,但是不确定自身是否也要断开连接(保证自身数据段的完整性)。第二次传输则是确认自身也要断开连接。
2.UDP协议
一种简单的无连接的传输层协议,由IETF的RFC 768定义。
报文格式
|