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

  • 相关阅读:
    《javascript设计模式》2接口
    对css类名className的一些操作的函数
    js设计模式方法的链式调用及回调
    js设计模式封装
    ajax的封装
    js设计模式单体(Singleton)
    js设计模式继承
    metasploit
    使用 AsyncCallback 处理异步调用
    log4net 的使用
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/12990169.html
Copyright © 2020-2023  润新知