重要知识
1.tcp与udp
(1)tcp和udp都工作在传输层 目标:在程序之间传输数据
连接(tcp)与非连接(udp)
(2)三次握手:客户端向服务端发一个SYN包(请求连接)——服务端向客户端回一个ACK+SYN包(同意连接)——客户端向服务端发一个ACK包(连接建立)
为什么是三次而不是两次?
——为了防止已失效的请求报文突然又传到服务器引起错误
在不可靠的信道上建立起可靠的连接
(3) 传输确认:解决丢包问题和乱序问题
为每一个链接建立发送缓冲区0123456789......
*发送端发送报文(序列号+长度+数据内容)——接收端回复确认(ACK=序列号+长度=下一包起始序列号)——发送端确认对方收到
*发送端也可以切割发送——接收端根据序列段和长度重组出完整的数据
*数据丢失了怎么办:接收端发送丢失数据长度的ACK报文——发送端收到后重发这一部分数据——接收端收到后进行补齐
(4) 四次挥手(两端都可主动发出)
*第一次挥手:客户端向服务端发一个FIN包,进入终止等待1状态。
*第二次挥手:服务端发一个ACK包,表示进入关闭等待状态。客户端进入2状态。
*第三次挥手:服务端继续发送未发送完的数据,客户端接收数据。发送完后服务端发送一个FIN包,进入最后确认状态。
*第四次挥手:客户端发送ACK包,进入超时等待状态,服务端收到ACK后立刻关闭连接。
*客户端进行超时等待的原因:防止服务端没收到ACK包,始终处于确认状态。
目的:在不可靠的网络信道中进行可靠的连接断开确认。
2. Udp
(1) 发送数据只是简单的封包一下,从网卡发出去,数据包之间并没有状态上的联系。
(2) 性能损耗少;资源占用少;稳定性弱。
3. tcp准确无误稳定可靠
udp速度快,对实时性要求较高但对少量丢包无太大要求