TCP协议的特点和编程流程
TCP协议(传输控制协议):是一种面向连接的、可靠地、流式服务
TCP的编程流程
在编程中给定网络中进程地址结构:
struct sockaddr_in
{
sa_family_t sin_family;
short sin_port; //htons,将主机字节序转网络字节序 5000以上
struct in_addr sin_addr;
};
tcp的三次握手和四次挥手(面向连接)
为什么是三次握手而不是两次?
1、如果最后一个ACK不返回,服务器会不断超时重传ACK/SYN
2、会浪费服务器资源,服务器为每个连接分配资源
3、SYN溢出攻击(泛洪)
有没有可能是三次挥手?
有,当主动断开方请求断开时,发送给被动断开方FIN,此时被动断开方刚好也要断开,就会给主动断开方发送ACK+FIN,这样就会变成三次挥手
Time_wait的作用是什么?
1、保证迟来的数据能够识别并丢弃
2、保证可靠地终止TCP连接
TCP连接的可靠性:
- 数据必须能够到达对端 :超时重传&&应答确认
- 报文段不重复、不乱序 :32位 处理重复的报文段,对报文段进行排序,保证顺序
- 数据不失真 :16位冗余校验码 对TCP头部及数据部分校验
- 拥塞控制&&滑动窗口: 保证最小丢包率
TCP的流式服务:
如何处理粘包问题?
1、send/recv/send 就是说等一次发送接收完毕后在进行发送
2、设置起始和结束标记
UDP协议(用户数据报协议):是一种无连接不可靠的数据包服务
UDP的数据报服务:
接收端接收数据时,不会截断数据,如果接收端一次没有接收完数据,数据就会被丢弃