网络原理——TCP/IP协议

TCP/IP协议

UDP协议

  1. UDP协议端格式:
    在这里插入图片描述
  2. DUP特点:
  • 无连接: 知道对端的IP和端口号就直接进行传输,不需要建立连接;
  • 不可靠: 没有确定机制,没有重传机制,如果因为网络故障该段无法发送到对方,UDP协议层也不会给应用层返回任何错误信息;
  • 面向数据报: 不能够灵活的控制读写数据的次数和数量( 只能一次发送,一次接受 );

面向数据报: 应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并;

  • 有接收缓冲区, 没有发送缓冲区;

UDP的socket既能读, 也能写, 这个概念叫做全双工;

  • 大小受限;

UDP协议首部中有一个16位的最大长度, 也就是说一个UDP能传输的数据最大长度是64K(包
含UDP首部), 如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装.

TCP协议

TCP:

  1. TCP协议段格式
    在这里插入图片描述
  2. 6位标志位
标志位作用
URG紧急指针是否有效
ACK确认号是否有效
PSH提示接收端应用程序立刻从TCP缓冲区把数据读走
RST对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
SYN请求建立连接; 我们把携带SYN标识的称为同步报文段
FIN通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段

TCP原理/机制

序列号:
在这里插入图片描述

TCP将每个字节的数据都进行了编号. 即为序列号.
每一个ACK都带有对应的确认序列号, 意思是告诉发送者已经收到了哪些数据; 下一次从哪里开始发.

  1. 确认应答(ACK)机制

图示:
在这里插入图片描述

收到一条报文后,向发送端发送一条确认ACK,此ACK的作用就是告诉发送端:接收端已经成功的收到了消息,并且希望收到下一条报文的序列号是什么

  1. 超时重传机制

在这里插入图片描述

发送端发送的数据报超过一定时间间隔没有收到确认应答的数据报, 表示之前发送的数据报可能丢包, 所以要重新发送.

一定时间间隔: 发送端不能无限期的等待

如何确定超时时间?

  • 系统动态的计算:初始有一个默认的超时时间(500ms),每次重传, 超时时间会在上一次超时时间基础上 *2;
  • 重传达到一定的次数后, 认为无法正常发送数据, 关闭连接.

丢包: 1 .发送的数据数据报丢包 2. 确认应答的数据报丢包

  1. 连接管理机制

连接: 客户端和服务端, 每一端来说, 保持一个本端到对端的连接状态

建立连接:

  • 建立客户端到服务端的连接(连接状态保存在客户端)
  • 建立服务端到客户端的连接(连接状态保存在服务端)

三次握手 —— 建立连接

在这里插入图片描述

(1)客户端发送SYN数据报到服务端, 申请建立客户端到服务端的连接 ;
(2)服务端返回SYN+ACK给客户端 ;

  • ACK是对第一次SYN的应答, SYN是申请建立服务端到客户端的连接
  • 客户端接受到该数据报, 建立客户端到服务端的连接

(3)客户端返回ACK给服务端

  • ACK是对第二次SYN的应答
  • 服务端接收到该数据报,建立服务端到客户端的连接

四次挥手 —— 关闭连接

在这里插入图片描述

(1)客户端发送FIN 到服务端, 申请关闭连接(客户端到服务端的连接)

服务端接收到该数据报, 状态置为 COLSE_WAIT

(2)服务端返回ACK给客户端

  • ACK是对第一次FIN的应答
  • 返回ACK, 是操作系统实现TCP协议栈的时候, 默认的机制, 系统自动返回

(3)服务端发送FIN到客户端, 申请关闭连接(服务端到客户端的连接)

  • 客户端接收到该数据报,状态置为 TIME_WAIT
  • 程序手动调用 CLOSE 关闭连接(发送FIN)

(4)客户端返回ACK给服务端

ACK是对第二次FIN的应答

TCP状态转换总图:
在这里插入图片描述

  1. 滑动窗口
    在这里插入图片描述

如何确定窗口大小?

窗口大小=min( 流量窗口大小, 拥塞窗口大小 )

滑动: 发送且没有返回ACK的数据, 都保存在发送缓冲区, 接收到下一个是 x 的ACK之后, 可以计算出可以滑动的大小

  1. 流量控制 —— 接收端安全

接收端处理数据的速度是有限的, 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就会造成丢包, 继而引起丢包重传等等一系列连锁反应.
因此TCP支持根据接收端的处理能力, 来决定发送端的发送速度, 这个机制叫做流量控制.

作用: 间接的控制发送端滑动窗口大小(发送数据的大小)
在这里插入图片描述

  1. 拥塞控制 —— 发送端安全

虽然TCP有了滑动窗口能够高效可靠的发送大量的数据. 但是如果在刚开始阶段就发送大量的数据, 仍然可能引发问题.
因为网络上有很多的计算机, 可能当前的网络状态就已经比较拥堵. 在不清楚当前网络状态下, 贸然发送大量的数据, 是很有可能引起雪上加霜的.

发送端在不了解网络状态的情况下, 采取慢启动机制, 先发少量的数据探路, 摸清网络拥堵情况, 在决定按多大的滑动窗口发送数据.

在这里插入图片描述

  • 当TCP开始启动的时候, 慢启动阈值等于窗口最大值;
  • 在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回1;

少量的丢包, 触发超时重传; 大量的丢包, 就认为网络拥塞;
当TCP通信开始后, 网络吞吐量会逐渐上升; 随着网络发生拥堵, 吞吐量会立刻下降;

拥塞控制, 归根结底是TCP协议想尽可能快的把数据传输给对方, 但是又要避免给网络造成太大压力的折中方案.

  1. 延迟应答 —— 提高效率

马上应答, 返回的流量窗口大小会比较小, 接收端处理速度较快, 稍等一段时间, 接收端消费一些接收缓冲区数据后, 再返回的流量窗口大小会更大一些. 发送端设置的滑动窗口大小就可以更大, 网络数据传输的吞吐量就更高.

  • 所有的包都可以延迟应答么?

不是
数量限制: 每个N个包就应答一次
时间限制: 超过最大延迟时间就应答一次
在这里插入图片描述

  1. 捎带应答
    在这里插入图片描述

不管哪一端(客户端/服务端), 需要主动发送的数据报, 可以和接收数据报后返回的ACK数据报, 合并为一个.
类似TCP三次握手中, 第二次合并SYN和ACK的数据报

总结

/TCPUDP
连接有连接无连接
可靠性可靠不可靠
效率相对UDP效率低效率高
面向面向字节流(多次发, 多次收)面向数据报(一次发, 一次收)
缓冲区有接收缓冲区, 也有发送缓冲区有接收缓冲区, 没有发送缓冲区
数据大小不受限受限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值