网络
TCP和UDP
tcp是一种面向连接的、可靠的、基于字节流的传输层通信协议。udp(用户数据报协议)传输层协议,提供面向操作的简单不可靠的非连接传输层服务,面向报文。
区别:
a.tcp是基于连接的,可靠性高;udp是基于无连接的,可靠性较低;
b.由于tcp是连接的通信,需要有三次握手、重新确认等连接过程,会有延时,实时性差;同时过程复杂,也使其易于被攻击;而udp无连接,无建立连接的过程,因而实时性较强,也稍安全;
c.在传输相同大小的数据时,tcp首部开销20字节;udp首部开销只有8个字节,tcp报头比udp复杂,故实际包含的用户数据比较少。tcp无丢包,故tcp开销大,udp开销较小;
d.每条tcp连接只能是点到点的;udp支持一对一、一对多、多对一、多对多的交互通信。
TCP的三次握手
第一次握手:客户端发送一个tcp的syn标志位置为1的包(连接请求),指明客户打算连接服务端的端口;SYN=1,seq=client-isn
第二次握手:当服务端收到连接请求之后,返回确认包(ack)应答,即将syn和ack标志同时致为1(授予连接),并为这次连接分配资源;SYN=1,ACK=1,seq=server-isn
第三次握手;客户端收到服务端的授予连接请求之后,再次发送确认包(ack)(syn标志位为0,ack标志位为1),并分配资源,这样tcp就建立连接了SYN=0,ACK=1,seq=client_isn+1
TCP和UDP的数据结构
TCP:
struct TCP_HEADER
{
short m_sSourPort; // 源端口号16bit
short m_sDestPort; // 目的端口号16bit
unsigned int m_uiSequNum; // 序列号32bit
unsigned int m_uiAcknowledgeNum; // 确认号32bit
short m_sHeaderLenAndFlag; // 前4位:TCP头长度;中6位:保留;后6位:标志位
short m_sWindowSize; // 窗口大小16bit
short m_sCheckSum; // 检验和16bit
short m_surgentPointer; // 紧急数据偏移量16bit
}
UDP;
struct UDP_HEADER
{
short m_sSourPort; // 源端口号16bit
short m_sDestPort; // 目的端口号16bit
short m_size; //长度16bit
short m_sCheckSum; // 检验和16bit
}