TCP和UDP

TCPUDP

  • TCP和UDP异同
    • 相同点
      • TCP和UDP都是传输层的协议,用于数据的传输
    • 不同点
      • 面向对象不同
        • TCP(transmission control protocol)提供的是面向连接,提供可靠的字节流服务。在服务器和客户端进行数据交换之前,必须在双方之间建立一个TCP连接,之后才可以进行数据的传输。并且提供超时重发,丢弃重复数据,检测数据,流量控制等功能,保证数据能从一端传递到另一端。
        • UDP(user data protocol)是一个简单地面向数据报的协议。不提供可靠性,只是把应用程序传给IP层的数据包发送出去,但是不能保证他们能够达到目的地。由于没有建立连接,且没有超时重发的机制,所以速度很快。
      • 可靠性
        • TCP提供可靠的数据传输,UDP不提供可靠性
      • 通信数量
        • 每一条TCP连接只能是点到点的,UDP支持一对一,一对多,多对一和多对多的交互通信
      • 首部开销
        • TCP首部开销20字节,UDP首部开销8字节
      • 连接过程
        • TCP有三次握手和四次挥手
          • 三次握手过程TCP和UDP_第1张图片

 

  • 1、A向B发送:SYN、seq = x。作用是用来发送同步序列编号synchronize sequence number,告诉别人信息是从哪个序列号开始的,以及告诉别人自己的连接请求
    • 四次挥手TCP和UDP_第2张图片
    • 三次握手根本目的
      • 双方互相确认对方的和自己的发送数据以及接受能力(每次的接受对方返回的确认信息反应了自己的发送数据能力正常)
      • 获取对方的同步序列号
    • 2、B回复A:SYN、ACK、seq = y、ack = x+1。SYN+ACK是B用来应答A表示收到了信息,seq = y是自己的同步序列号,告诉A自己的信息是从哪个序列号开始的,同时返回一个ack表达自己搞定怎么给A发送信息的格式了(大概就是表达让A看自己已经学会了在x+1的位置写东西了)
    • 3、A回复B:ACK,seq = x+1,ack = y+1。ACK是确认信息,同时返回的ack = y+1也是告诉B自己搞定了怎么给B发送信息的格式了

 

  • TCP实现可靠传输(序列号、确认应答、超时重传、拥塞控制)
    • 确认应答和序列号
      • TCP将每一个字节的数据都进行了编号,即为序列号。
      • 每一个ACK都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据,下一次你从哪个序列号开始写入数据
    • 超时重传和序列号
      • A向B发送了数据之后,可能会因为网络拥堵的原因,数据没办法到达主机B,如果A在一个特定的时间间隔接收到来自B的确认应答,就会进行重发。重发的时候利用序列号可以做到去重的效果,不需要重新发送所有的包
    • 拥塞控制
      • 目的是TCP协议想尽可能快的把数据传输给对方,但是又要避免给网络造成太大压力的折中方案
      • 滑动窗口
        • 窗口大小指的是无需等待确认信息应答而可以继续发送数据的最大值
        • 收到第一个ACK后,滑动窗口向后移动,继续发送下一个窗口字段的数据
        • 窗口越大,网络的吞吐率就越高
      • 流量控制
        • 接收端处理数据的速度是有限的,如果发送端发送到个太快,会导致接收端的缓存区被占满,继续发送会产生丢包
      • 延迟应答
        • 如果接收数据的主机立刻返回ACK应答,这样返回的窗口就可能比较小。为了提高传输效率,所以使用延迟应答
      • 捎带应答
        • 我们发现, 很多情况下, 客户端服务器在应用层也是 “一发一收” 的.
        • 意味着客户端给服务器说了 “How are you”, 服务器也会给客户端回一个 “Fine, thank you”; 那么这个时候ACK就可以搭顺风车, 和服务器回应的 “Fine, thank you” 一起回给客户端

你可能感兴趣的:(TCP和UDP)