TCP/UDP基础知识

文章目录

TCP/UDP

TCP:传输控制协议

UDP:用户数据报协议

TCP 提供面向链接服务 ,不提供广播或者多播服务,全双工的可靠信道

UDP 不提供可靠交付,不需要先建立链接

运输层端口号

为解决机器进程的识别,在运输层使用协议端口号来进行区别 也就是端口port。

TCP/IP使用16位的端口号来标记一个端口。

服务器端使用的端口号 0-1023

登记端口号 1024-49151

客户端使用端口号: 49152-65535

SOCKET最大 65536

用户数据报协议 UDP

特点:

  1. 无连接
  2. UDP使用最大努力交付 (无确认机制)
  3. 面向报文
  4. 无拥塞控制
  5. UDP支持一对一,一对多,多对一和多对多
  6. UDP首部开销小(只有8个字节)

传输控制协议TCP

特点:

  1. 面向链接的传输层协议
  2. 点对点传输
  3. 可靠交付
  4. 全双工
  5. 面向字节流

可靠传输

可靠传输的实现方式:

  1. 序列号和确认机制:TCP协议通过给每个传输的数据包分配一个序列号,接收方收到数据包后会发送一个确认序列号,发送方根据这个确认序列号来确认数据是否被有效接收。
  2. 超时重传:如果发送方在一定时间内没有收到对方的确认消息,就会认为数据包丢失,然后会重传数据包。发送方会根据网络情况动态调整超时时间,以适应不同的网络环境。
  3. 流量控制:TCP使用滑动窗口技术控制数据流量,接收方会告知发送方它的接收窗口大小,发送方根据接收方的窗口大小控制发送速率,以避免发送过多的数据导致对方无法及时处理。
  4. 拥塞控制:TCP通过拥塞窗口算法来控制发送方的发送速率,当网络发生拥塞时,发送方会减小发送速率以避免拥堵情况进一步恶化。拥塞控制是TCP协议中最重要的特性之一,它通过一些算法如慢启动、拥塞避免、快速恢复等来实现。
  5. 错误校验和重传:TCP在数据包头部添加了一个校验和字段,接收方可以通过校验和来检测有无数据传输过程中的错误。如果发现错误,接收方会要求发送方重传数据 (伪头部+ TCP数据部分 用CRC校验)

流量控制

为什么要实现流量控制:为了控制发送方的发送速率,保证接收方能够及时接收。因为TCP通信的时候,双方发送和接收的速度不一定是相等的,如果发送方速度太快,接收方处理不过来,会将数据放在接收缓存区,但是如果缓存区满了,发送方仍然在发送,接收方只好丢失新的数据包。这样不仅会发生丢包还占用了网络,非常低效。

如何实现流量控制:通过滑动窗口实现流量控制,接收方返回ACK时包含一个窗口字段,表示当前接收方能接收的窗口大小,以次控制发送方的发送滑动窗口大小。

发送方的窗口分为四个部分:已发送已确认的数据、已发送还未确认部分、待发送部分(可用窗口)、不可发送部分。

而被控制的滑动窗口大小实际上包括已发送未却部分和待发送部分两个部分。

接收方的窗口分为三个部分:已接收已确认、等待接收、不可接收部分。

接收方滑动窗口和发送方滑动窗口大小不一定相同,这两个窗口根据各自缓冲区可用空间、处理速度和网络条件独立调整

拥塞传输

拥塞控制的算法有四种

  1. 慢开始:刚开始发送数据时,不会刚开始就把大量数据注入网络,这样很可能引发网络拥塞。而是由小增大的发送数据,拥塞窗口的初始值是1,每经过一个往返的传输,就成倍增长拥塞窗口的大小。
  2. 拥塞避免:设置了一个变量(慢开始门限),初始门限值,如果拥塞窗口成倍增长达到变量(慢开始门限)之后,每次只增加1。避免一次增加太多导致拥塞发生。
  3. 快重传:当接收方收到三个一样的ACK时,认为发生了数据丢失,马上启动快速重传,TCP认为这种情况不严重
  4. 快恢复:一般和快速重传一起使用,快速重传后就进入快恢复阶段。此时慢开始门限和拥塞窗口已经被更新了。此时拥塞窗口=慢开始门限+3,重传丢失的数据包。如果再收到重复的ACK,拥塞窗口加一,如果收到新的ACK,慢开始门限恢复原来的,恢复原来的状态

超时重传和快速重传的区别:超时重传是指发送方没在时间范围内收到ACK信息,认为数据丢失发送方重新发送。是根据时间确定的;快速重传是指发送方连续收到三个一样的ACK,判断有数据包丢失,马上重传。是根据接收方的反馈判断的。

流量控制和拥塞控制的区别:流量控制主要是根据接收方的处理速度和要求来控制发送方的滑动窗口,避免接收方缓存溢出。是端到端之间的决策处理。拥塞控制是全局的,包括路由器和交换机。主要是避免发送方的数据量溢出网络容。

相关推荐
咩咩大主教4 小时前
C++基于select和epoll的TCP服务器
linux·服务器·c语言·开发语言·c++·tcp/ip·io多路复用
城南云小白6 小时前
web基础+http协议+httpd详细配置
前端·网络协议·http
阑梦清川6 小时前
简明linux系统编程--互斥锁--TCP--UDP初识
linux·udp·tcp·互斥锁·信号·解锁·加锁
Tony聊跨境7 小时前
什么是 SSL 代理?
网络·网络协议·ssl
汀、人工智能8 小时前
报错error: RPC failed,curl 16 Error in the HTTP2 framing layer解决方法
网络·git·网络协议·rpc
就这个java爽!10 小时前
JAVA网络编程【基于TCP和UDP协议】超详细!!!
java·开发语言·网络·tcp/ip·udp·eclipse·idea
一叶飘零_sweeeet10 小时前
为什么 Feign 要用 HTTP 而不是 RPC?
java·网络协议·http·spring cloud·rpc·feign
KookeeyLena710 小时前
动态IP与静态IP:哪种更适合用户使用?
网络·网络协议·tcp/ip
时之彼岸Φ12 小时前
Web:HTTP包的相关操作
网络·网络协议·http
秋已杰爱12 小时前
HTTP中的Cookie与Session
服务器·网络协议·http