传输层协议TCP&UDP

TCP协议特点 :分段,编号,流量控制,建立会话
UDP协议特点 :一个数据包就能完成数据通信,不建立会话,可应用于多播

image.png

UDP协议

image.png

UDP报文首部格式

image.png

UDP主要特点

image.png

TCP协议

TCP协议解决的问题

TCP协议主要解决三个问题,即可靠传输(丢包重传)、流量控制(控制发包速率)、避免网络拥塞。

TCP协议概述

image.png

TCP连接到套接字socket(IP地址+端口号)
image.png

TCP可靠传输

image.png

停止等待协议

策略:“只要你没告诉我收到了,我就认为你没收到!”

停止等待协议-发送端收到确认前不会发送下一个包,而是超时重传发送过的包。停止等待协议的优点是简单,缺点是信道利用率太低(不连续发送,总在等待确认)

image.png

image.png

image.png

滑动窗口

为了连续发送,可以使用滑动窗口技术-发送方维护一个滑动窗口,连续发送滑动窗口内的数据包,收到确认时滑动窗口向后滑动。
image.png

后退N帧协议

image.png

选择重传协议

image.png

TCP流量控制

“一个会话,发送端与接收端速率不一致问题!”
解决通信两端处理时间不一样的问题。通过实时调整滑窗尺寸的大小(尺寸甚至可以是0)来实现流量控制。接收端主动调整滑窗大小,发送端根据接收端发送的报文调整相应的滑窗。发送端也会定时发送报文向接收端确认滑窗信息,避免接收端发送的相关调整滑窗大小的报文丢失带来的影响。

TCP拥塞控制

“多个计算机,多个会话,同一段链路数据量太大造成的堵塞”
image.png

image.png

慢开始和拥塞避免算法

  1. 从1个数据包开始以指数倍增的方式发送数据包,直至达到慢开始门限(首次16)
  2. 在达到慢开始门限后每次连续发送的数据包数量改为线性增长( +4 )
  3. 再出现网络拥塞(丢包)情况后,重新开始该过程并将慢开始门限降低
  4. 目的是在线性增长并且不会造成网络拥塞的情况下,以较快的速度发送数据

image.png

快恢复 优化后,每次拥塞后直接从新的慢开始门限开始线性增长
image.png

TCP报文头

image.png

image.png

TCP的传输连接管理

image.png

TCP状态机

image.png

TCP 的三次握手,四次挥手机制

三次握手

  1. 首先Client端发送连接请求报文,syn
  2. Server端接受连接后回复ACK + syn 报文,并为这次连接分配资源。
  3. Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

    image.png 四次挥手

  • TCP断开链接的过程和建立链接的过程比较类似,只不过中间的两部并不总是会合成一步走,所以它分成了4个动作

    1. 首先Client端发送关闭请求报文fin 进入fin_wait_1状态
    2. Server端接受后回复 ack 进入close_wait 状态
    3. Client端接受 ack后进入fin_wait_2状态 表示知道对方知道要断开连接
    4. Sever再发送 fin 并进入 last_ack状态
    5. Client端接收到fin后,发送ack 并等待一段时间后自动关闭连接
      • 等待时间: 等待残留报文彻底消逝,防止对下次TCP链接造成干扰
      • 防止Sever端没有接收到ACK,等待重发ACK

    image.png

为什么要三次握手?

三次握手的目的是建立可靠的通信信道,目的就是双方确认自己与对方的发送与接收是正常的。

  1. 第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
  2. 第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
  3. 第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常


所以三次握手就能确认双发收发功能都正常,缺一不可。