TCP与UDP学习小结

TCP六个标志位:

  • SYN – 同步(建立联机)
  • ACK – 确认
  • PSH – 传送
  • FIN – 结束
  • RST – 重置
  • URG – 紧急

TCP通讯过程

tcp

1. 三次握手建立连接

  • 客户端发一个SYN握手包给服务端
  • 服务端发一个ACK确认包和SYN握手包给客户端
  • 客户端发一个ACK确认包给服务端
    此时,客户端和服务端都得到了对方确认,开启传输通道,抛出线程处理连接

2. 数据传输

  • 数据发送端传输PSH包
  • 数据接受端回复ACK包

3. 四次挥手断开连接

为什么要有四次挥手?计算机资源有限,不使用的时候需要释放

  • 客户端发送一个FIN结束包给服务端,证明数据请求完毕
  • 服务端发送一个ACK确认包给客户端,证明已经收到FIN
  • 服务端发送一个FIN结束包给客户端,证明数据发送完毕
  • 客户端发送一个ACK确认包给服务端,证明已经收到FIN

至此,客户端和服务端都已经确认要断开连接,连接断开,释放资源

四次握手不是关闭TCP的唯一方法,在以下情况会发送RST包关闭连接

  • 主机需要尽快关闭连接
  • 连接超时(对方长时间无响应)
  • 端口或主机不可达(对方意外断开连接)

TCP和UDP区别

1. TCP特性

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的小结,如有错误欢迎指正。。。

原文地址:https://www.cnblogs.com/aeipyuan/p/12990169.html