tcp/ip详解

本文深入解析TCP/IP协议的四层模型,包括链路层、网络层、传输层和应用层的功能与协议。重点介绍了TCP协议的工作原理,如连接的建立与终止、拥塞控制、数据传输过程中的可靠性保证机制等。

TCP/IP详解

网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能
一个协议族,比如TCP/IP,是一组不同层次上多个协议的组合
TCP/IP通常被认为是一个四层组织协议
TCP/IP

  1. 链路层,有时也称作数据链路层和网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡
  2. 网络层,有时也称作互联网层,处理分组在网络中的活动。在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),IGMP协议(Internet组管理协议)
  3. 运输层主要为两台主机上的应用程序提供端到端的通信。TCP和UDP
  4. 应用层负责处理特定的应用程序细节
    TCP/IP

TCP:传输控制协议

TCP提供一种面向连接的、可靠地字节流服务
TCP通过下列方式来提供可靠性

  • 应用数据被分割成TCP认为最适合发送的数据块
  • 自适应的超时及重传
  • 当TCP收到发自TCP连接另一端的数据,它将发送一个确认(这个确认通常会推迟几分之一秒)
  • TCP将保持它首部和数据的检验和
  • TCP报文段是作为IP数据包来传输的,因此到达可能会失序。如果必要,TCP将对收到的数据进行重新排序
  • 接收端丢弃重复的数据
  • 提供流量控制

TCP的首部

TCP数据被封装在一个IP数据报中
IP数据报
TCP首部的数据格式。如果不计任何字段,它通常是20个字节
首部数据格式
一个IP地址和一个端口号也称为一个socket,socket pair可唯一确定互联网络中每个TCP连接的双方。
序号用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。
当建立一个新的连接时,SYN标志变为1。

  • URG 紧急指针有效
  • ACK 确认序号有效
  • PSH 接收方应该尽快将这个报文段交给应用层
  • RST 重建连接
  • SYN 同步序号用来发起一个连接
  • FIN 发端完成发送任务

TCP连接的建立和终止

三次握手
1 请求短发送一个SYN段指明客户打算连接的服务器端口,以及初始序号(ISN)
2 服务器发回包含服务器的初始序号的SYN报文段作为应答。同时,将确认序号设置为客户的ISN+1以对客户的SYN报文段进行确认。一个SYN将占用一个序号
3 客户必须将确认序号设置为服务器的ISN+1以对服务器的SYN报文段进行确认
三次握手

连接终止
1 进行关闭的一方发送第一个FIN
2 服务器收到FIN,发回一个ACK,确认序号为收到的序号+1。和SYN一样,一个FIN将占用一个序号。
3 同时TCP服务器还向应用程序传送一个文件结束符。接着这个服务器就关闭它的连接,导致它的TCP端发送一个FIN。
4 客户必须发回一个FIN,并将确认序号设置为收到序号+1。

最大报文长度

最大报文长度(MSS)表示TCP传往另一端的最大数据块的长度。
MSS让主机限制另一端发送数据报的长度。加上主机也能控制它发送数据报的长度,这将使以较小MTU连接到一个网络上的主机避免分段。

TCP的半关闭

TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力,这就是所谓的半关闭。

TCP的状态变迁图

状态变迁图

2MSL等待状态

TIME_WAIT状态也称为2MSL等待状态。
对一个具体实现所给定的MSL值,处理的原则是:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。
这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间,定义这个连接的插口不能再被使用。这个连接只能在2MSL结束后才能再被使用。

平静时间的概念

TCP在重启后的MSL秒内不能建立任何连接

FIN_WAIT_2

只有当另一端的进程完成这个关闭,我们这端才会从FIN_WAIT_2状态进入TIME_WAIT状态。

复位报文段

TCP首部中的RST是用于复位的。一般来说,无论何时一个报文段发往基准的连接出现错误,TCP都会发出一个复位报文段。

  1. 到不存在的端口的连接请求
  2. 异常终止一个连接
  3. 检测版打开连接

TCP的成块数据流

TCP使用滑动窗口协议来进行流量控制。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。
数据块传输
1 发送方不必发送一个全窗口大小的数据
2 来自接收方的一个报文段确认数据并把窗口向右滑动。因为窗口的大小是相对于确认序号的。
3 窗口的大小可以减小,但是窗口的右边沿却不能向左滑动。
4 接受方在发送一个ACK前不必等待窗口被填满。
滑动窗口

PUSH标志

使用API通知TCP设置正在接收数据的PUSH标志或得到该数据是否被设置PUSH标志的信息是不可能的。

慢启动

慢启动为发送方的TCP增加了一个窗口:拥塞窗口,记为cwnd。
当与另一个网络的主机建立TCP连接时,拥塞窗口被初始化为1个报文段。没收到一个ACK,拥塞窗口就增加一个报文段。
发送方取拥塞窗口与通告窗口中的最小值作为发送上限。
拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。

宽带时延乘积

通道容量: capatity(bit)=bandwidth(b/s)*round-trip time(s)

拥塞

当数据到达一个大的管道并向一个较小的管道发送时
当多个输入流到达一个路由器,而路由器的输出流小于这些输入流的总和时

TCP的超时与重传

TCP通过在发送时设置一个定时器来解决数据和确认丢失的问题。如果当定时器溢出时还没有收到确认,它就重传该数据。
对每个连接,TCP管理4个不同的定时器:
1 重传定时器使用于当希望收到另一端的确认。
2 坚持(persist)定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。
3 保活(keepalive)定时器可以检测到一个空闲连接的另一端何时崩溃或重启。
4 2MSL定时器测量一个连接处于TIME_WAIT状态的时间。

往返时间(RTT)

$$ R\leftarrow \alpha R+\left( 1-d\right)M $$
$$ Err=M-A $$
$$ A\leftarrow A+gErr $$
$$ D\leftarrow D+h\left(|Err| -D\right) $$
$$ RTO = A+4D $$

M表示测量得到的RTT
\(\alpha\)是一个推荐值为0.9的平滑因子
A是被平滑的RTT
D是被平滑的均值方差
Err是刚得到的测量结果与当前的RTT估计器之差
增量g起平均作用,取为0.125
偏差的增益是h,取值为0.25

具体计算实例参考TCP-IP详解卷一第21章

TCP的坚持定时器

ACK的传输并不可靠,TCP不对ACK报文段进行确认,TCP只确认那些包含有数据的ACK报文段。
如果一个确认丢失了,则双方就有可能因为等待对方而是连接终止:接收方等待接收数据,而发送方在等待允许它继续发送数据的窗口更新。为防止这种死锁情况的发生,发送方使用一个坚持定时器来周期性的向接收方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查。

TCP的保活定时器

如果一个给定的连接在两个小时之内没有任何动作,则服务器就向客户发送一个探查报文段。客户主机必须处于以下4个状态之一:
1 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常工作的。服务器在2个小时以后将保活定时器复位。如果在两个小时定时器到时间之前有应用程序的通信量通过此连接,则定时器在交换数据后的未来2小时再复位
2 客户主机已经崩溃,并且关闭或者常在重启。在任何一种情况下,客户的TCP都没有响应。服务器将不能够收到对方的探查,并在75秒后超时。服务器总共发送10个这样的探查,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
3 客户主机崩溃并已经重新启动。这时服务器将收到一个对其保活探查的响应,但是这个响应是一个复位,使得服务器终止这个连接。
4 客户主机正常运行,但是服务器不可达。与状态2相同

【博士论文复现】【阻抗建模、验证扫频法】光伏并网逆变器扫频与稳定性分析(包含锁相环电流环)(Simulink仿真实现)内容概要:本文档围绕“博士论文复现”主题,重点介绍了光伏并网逆变器的阻抗建模与扫频法稳定性分析,涵盖锁相环和电流环的Simulink仿真实现。文档旨在通过完整的仿真资源和代码帮助科研人员复现相关技术细节,提升对新能源并网系统动态特性和稳定机制的理解。此外,文档还提供了大量其他科研方向的复现资源,包括微电网优化、机器学习、路径规划、信号处理、电力系统分析等,配套MATLAB/Simulink代码与模型,服务于多领域科研需求。; 适合人群:具备一定电力电子、自动控制或新能源背景的研究生、博士生及科研人员,熟悉MATLAB/Simulink环境,有志于复现高水平论文成果并开展创新研究。; 使用场景及目标:①复现光伏并网逆变器的阻抗建模与扫频分析过程,掌握其稳定性判据与仿真方法;②借鉴提供的丰富案例资源,支撑博士论文或期刊论文的仿真实验部分;③结合团队提供的算法与模型,快速搭建实验平台,提升科研效率。; 阅读建议:建议按文档目录顺序浏览,优先下载并运行配套仿真文件,结合理论学习与代码调试加深理解;重点关注锁相环与电流环的建模细节,同时可拓展学习其他复现案例以拓宽研究视野。
内容概要:本文系统解析了嵌入式通信协议栈系列项目的实践路径,围绕通信原理与工程实现,阐述在资源受限的嵌入式环境中构建稳定、可扩展通信能力的方法。文章从通信基础模型出发,强调分层设计思想,涵盖物理层到应用层的职责划分,并依次讲解通信驱动、数据收发机制、帧格式解析、状态机控制、错误处理等核心技术环节。项目实践注重底层可靠性建设,如中断响应、缓冲区管理与数据校验,同时关注上层应用对接,确保协议栈支持设备配置、状态上报等实际业务。文中还突出性能优化与资源管理的重要性,指导开发者在内存与处理效率间取得平衡,并通过系统化测试手段(如异常模拟、压力测试)验证协议栈的健壮性。; 适合人群:具备嵌入式系统基础知识,有一定C语言和硬件接口开发经验,从事或希望深入物联网、工业控制等领域1-3年工作经验的工程师。; 使用场景及目标:①掌握嵌入式环境下通信协议栈的分层架构设计与实现方法;②理解状态机、数据封装、异常处理等关键技术在真实项目中的应用;③提升在资源受限条件下优化通信性能与稳定性的工程能力; 阅读建议:建议结合实际嵌入式平台动手实践,边学边调,重点关注各层接口定义与模块解耦设计,配合调试工具深入分析通信流程与异常行为,以全面提升系统级开发素养。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值