Advertisement

网络协议(TCP/IP)——TCP协议

阅读量:

TCP/IP协议


TCP/TP缩写形式:Transmit Control Protocol/Internet Protocols的中文名称为数据传输协议,在中文中通常称为网络通讯协议。它是互联网的基础部分,在互联网国际互联体系中扮演着核心角色。该体系由网络层使用的IP地址族与传输层使用的TCP构成。通过TCP/IP规范了电子设备如何接入互联网以及数据在它们之间传输的标准流程。该体系采用分层次的方式构建:每一层都调用其下一层提供的服务功能以实现自身的功能需求。

通俗而言:TCP处理传输问题,在出现问题时会发出指令迫使重新发送数据直至所有信息安全正确无误地传输到目标位置。IP则为互联网上的每台设备分配独特的标识。

TCP/IP的层次结构

应用层
涵盖所有的高层协议系统:如虚拟终端协议(TELNET, TELeconnections NETwork)、文件传输协议(FTP, File Transfer Protocol)、电子邮件传输协议(SMTP, Simple Mail Transfer Protocol)、域名服务(DNS, Domain Name Service)、网上新闻传输协议(NNTP, Net News Transfer Protocol)以及超文本传送协议(HTTP, HyperText Transfer Protocol)等。

传输层 采用了两个端到端的通信协议:传输控制协议(TCP)...和用户数据报协议(UDP)...

  • 网络互连层
    作为TCP/IP协议栈的关键组成部分之一,在数据传输中扮演着核心角色。其主要职责是将数据发送至目标网络或主机。有时可能同时沿着不同的路径传递分组以加快传输速度。因此, 接收到的分组与发送的分组之间可能存在一定的顺序差异. 这要求上层能够根据需求重新排列接收到的分组以确保正确性。

访问接口层 实际上TCP/IP参考模型并未详细阐述这一层的具体实现方式 而是仅指示主机必须通过某种协议与网络建立连接

TCP/IP层次结构与OSI层次结构对比

TCP协议


TCP 协议是一种基于字节流的可靠连接型传输层通信协议

根据RFC 793标准,在简化的OSI模型中负责实现第四层传输协议所需的功能。

TCP协议头格式

TCP协议头格式
  1. Source Port(源端口号):数据发起者的端口号,16bit。
  2. Destination Port(目的端口号):数据接收者的端口号,16bit。
  3. Sequence Number(顺序号码,Seq):用于在数据通信中解决网络包乱序(reordering)问题,以保证应用层接收到的数据不会因为网络上的传输问题而乱序(TCP会用这个顺序号码来拼接数据),32bit。
  4. Acknowledgment Number(确认号码,ack):是数据接收方期望收到发送方在下一个报文段的顺序号码(Seq),因此确认号码应当是上次已成功收到顺序号码(Seq)加1,32bit。
  5. Offset(TCP报文头长度):用于存储报文头中有多少个32bit(上图的一行),存储长度为4bit,最大可表示(23+22+2^1+1)32bit=60bytes的报文头。最小取值5,532bit=20bytes。
  6. Reserved(保留):6bit, 均为0
  7. TCP Flags(TCP标志位)每个长度均为1bit CWR:压缩,TCP Flags值0x80。
    ECE:拥塞,0x40。
    URG:紧急,0x20。当URG=1时,表示报文段中有紧急数据,应尽快传送。
    ACK:确认,0x10。当ACK = 1时,代表这是一个确认的TCP包,取值0则不是确认包。
    PSH:推送,0x08。当发送端PSH=1时,接收端尽快的交付给应用进程。
    RST:复位,0x04。当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接。
    SYN:同步,0x02。在建立连接是用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。
    FIN:终止,0x01。当FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。
  8. 窗口:用来控制对方发送的数据量,通知发放已确定的发送窗口上限。
  9. 检验和:该字段检验的范围包括头部和数据这两部分。由发端计算和存储,并由收端进行验证。
  10. 紧急指针:紧急指针在URG=1时才有效,它指出本报文段中的紧急数据的字节数。
  11. TCP选项:长度可变,最长可达40字节
    备注:ISN(Inital Sequence Number):初始化Sequence Number,发生在建立连接时。

TCP连接过程

TCP协议连接过程

TCP协议建立连接的三次握手

第一次握手时的应用层实体间通信操作中

第二次握手
服务端接收到客户端发送过来的报文。通过SYN字段值为1来判断客户端试图进行联机请求,并发送一个SYN和ACK字段均设置为1的TCP报文。将起始序列号Y设置为0,并将acks字段设为上一回合客户端发送的acks字段值加一。

TCP协议数据传输过程

  • 客户机向服务器传输ACK报文,并将acks字段设置为1。
  • 服务器接收到来自客户端的数据报后,在接收到的数据报顺序码基础上确定相应数据报的传输位置,并将顺序号设置为1。
  • 客户机持续向服务器发送ACK报文以确认接收的数据报状态,并设置acks字段值为当前序列号加上已传输字节数加一。
  • 当发生数据报丢失时,在超时时间内若服务器未接收到客户机发来的Ack报告,则会重新重传丢失的数据报。

该字段(记为ack)记录了新增的数据块所对应的序列号与前一个块的关系,并表示本次通信中被发送出去的数据总量。在不附加被发送出去的数据的情况下,则无法准确判断是否所有数据都被完整地传递过来(例如可能只传递了80%的数据)。因此可采用以下公式进行计算:ack = seq\_no + len(data) + 1

TCP协议断开连接的4次挥手

提示:中断连接的一方可能位于客户端或服务器的一方,在收到对方服务响应后(即收到ACK),当发现对方处于断开状态(即收到FIN)时(此时应立即将该位置设为空),应立即将该位置设为空以避免后续操作出现问题

你的意思是什么呢?意思是你的客户端无数据需发送给服务器。若你仍有未接收的数据,则无需急着关闭socket连接;相反地,则可继续向其传输该数据至指定地址。你需要先回复ack确认

再次发送确认 当服务端接收到FIN时,系统会立即响应一个ACK标志位设置为1,该标志位表示接收方已将消息标记为已处理,并将在后续操作中将其顺序号递增以供后续处理.接受方将确认编号设为Z

意思是说"服务端收到了你的FIN请求,请继续等待我的回应"
当前情况下客户端将进入FIN_WAIT状态,并持续接收服务端发送的 FIN 报文。

  • 该动作的执行
    一旦服务端确认数据已成功发送,则会立即向客户端发送结束标记 FIN 包以释放通信连接。
    具体而言:
  • 将 FIN 和 ACK 标志字段设置为 1
  • 其序列号字段赋值 Y = 1
  • 确认字段赋值 X = 2

意思是告诉Client端“好了,我这边数据发完了,准备好关闭连接了。”

  • 第4次挥手
    当客户端接收到服务器发送来的FIN指令时,会响应一个ACK确认(标志位ACK=1)。其序号码等于接收方接收到的数据段的第一个序号加一(即Y+1=2)。接收方将顺序号码设置为其收到的第一个数据段序号加一(即X=2)。

以下是根据您的要求对原文的改写

全部评论 (0)

还没有任何评论哟~