TCP与UDP学习小结
TCP六个标志位:
- SYN – 同步(建立联机)
- ACK – 确认
- PSH – 传送
- FIN – 结束
- RST – 重置
- URG – 紧急
TCP通讯过程
1. 三次握手建立连接
- 客户端发一个SYN握手包给服务端
- 服务端发一个ACK确认包和SYN握手包给客户端
- 客户端发一个ACK确认包给服务端
此时,客户端和服务端都得到了对方确认,开启传输通道,抛出线程处理连接
2. 数据传输
- 数据发送端传输PSH包
- 数据接受端回复ACK包
3. 四次挥手断开连接
为什么要有四次挥手?计算机资源有限,不使用的时候需要释放
- 客户端发送一个FIN结束包给服务端,证明数据请求完毕
- 服务端发送一个ACK确认包给客户端,证明已经收到FIN
- 服务端发送一个FIN结束包给客户端,证明数据发送完毕
- 客户端发送一个ACK确认包给服务端,证明已经收到FIN
至此,客户端和服务端都已经确认要断开连接,连接断开,释放资源
四次握手不是关闭TCP的唯一方法,在以下情况会发送RST包关闭连接
- 主机需要尽快关闭连接
- 连接超时(对方长时间无响应)
- 端口或主机不可达(对方意外断开连接)
TCP和UDP区别
1. TCP特性
- 面向连接
通过三次握手建立连接,四次挥手断开连接 - 面向字节流
发送端应用层传入数据字节流(为了不发生丢包现象,每个数据包都会标注序号),在传输层TCP将字节流分成适当长度的报文段,然后传送至网络层,经过各种协议到达接受端的传输层按序读取字节传给应用层。
- 可靠性
- 确认信号:每次收到完整的TCP报文后都会返回ACK确认包
- 超时重传:每次发出一个报文都会启动计时器,若在规定时间内未收到对方传回的ACK包,会重新发送
- 检验和:TCP始终保持首部和数据的检验和,如果收到的报文检验和有差错,则丢弃报文,不返回ACK包
- 重新排序:由于IP数据报达到可能失序,TCP会将数据进行重新排序交给应用层
- 丢弃重复:TCP会丢弃重复的IP数据包
- 流量控制:接收端将自己可接受的缓冲区大小放入TCP首部,通过ACK告知发送端,发送端以此为依据来传输数据,针对发送方和接收方速度不匹配的问题
- 拥塞控制:针对过多的数据注入网络中,使得网络中路由器或链路不致过载问题
2. UDP特性
-
无连接
发送报文段之前发送端和接受端没有握手,并且可以实现一对多通信 -
面向报文
发送方直接将应用层传入的报文加上首部后进行传输,不合并也不拆分,无论应用层交给UDP多长的报文,都作为一个报文发送,接收方接到后直接去除首部传给应用层 -
不可靠
UDP只有一个socket接收缓冲区,没有socket发送缓冲区,即只要有数据就发,不管对方是否可以正确接收,也没有TCP的一系列可靠机制 -
速度快
UDP头部只有8字节,不需要建立连接,并且没有可靠的丢失重发机制(UDP检验和提供了差错检测,但它对差错恢复无能为力)
以上为近期学习TCP和UDP的小结,如有错误欢迎指正。。。