【Java网络编程】TCP协议详解

本文详细介绍了TCP协议,包括TCP首部结构,连接建立的三次握手过程和连接断开的四次挥手,以及缓存与滑动窗口机制。此外,还讨论了TCP的网络拥塞控制策略,如慢开始、拥塞避免、快速重传和快速恢复,确保数据的可靠传输。
摘要由CSDN通过智能技术生成

TCP协议详解

在前面计算机网络概述中,我们知道了TCP是面向连接的,可靠的,数据传输服务的网络传输协议。而在TCP 协议特点中有几个关键的点,即:

  • a、TCP 通信是需要建立连接的。
  • b、数据的发送时全双工的。
  • c、TCP 通信是可靠的。

在进行Java网络编程时,我们经常通过TCP协议进行传输,把数据封装成报文传输,而报文的传输使格式化传输而TCP首部就决定了每一个消息的格式和类型。

TCP 首部格式

在这里插入图片描述

各个字段的作用与含义:

  • a、源端口号和目的端口号。

各占两个字节,我们知道端口号就是标识特定主机上的唯一的进程,而 IP 地址是来表示标识网络中的不同主机的,这两个源(source)和目的(dst)端口号和 IP 首部中的源和目的 IP 地址,则标识互联网上的唯一进程,所以套接字的定义说白了就是 IP 地址和端口号共同组成。

  • b、确认序号。

4 个字节,上一个字段的序号是对数据的编号,所以确认序号是下一个期望接收的 TCP 分段号,相当于是对对方所发送的并且已经被本方所正确接受的分段的确认。仅当 ACK 标志为 1 时有效。确认号表示期望收到的下一个字节的序号。

  1. ack 表示期望下次接收到的序号。
  2. 那么 ack 是如何算出来的呢,就是通过收到的序号,和数据长度相加得来。假设 A 收到 B 过来的数据(seq = 5,len = 15)。len 表示数据长度。那么 A 就会回复 B,“刚才的数据我已经收到了,你接下来就发序号为 20 的包给我吧”。这样就保证了数据不会乱序。
  • c、ACK。

当 ACK 标志为 1 时有效。确认号表示期望收到的下一个字节的序号。

  • d、序号。

4 个字节,表示在这个报文段中的第一个数据字节序号。如果将字节流看作在两个应用程序间的单向流动,则 TCP 用序列号对每个字节进行计数。用来保证到达数据顺序的编号,所以这个字段需要比较大的存储。

  • e、位数据偏移。

以 32 位(4 字节)字长为单位,需要这个值是因为任选字段的长度是可变的。跟 IP 头部一样,以 4字节为单位。最大是 60 个字节。不存在任选字段正常的报头长度是 20 字节。其实相当于给出数据在数据段中的开始位置。

  • f、保留位。

6 位,必须为 0。

  • g、标志位。

占有 6 个比特位,他们中可以有多个为置为 1,依次为:URG,ACK,PSH,RST,SYN,FIN。
下面具体分析:

  1. URG:该位为 1 说明表示 TCP 包的紧急指针域有效,用来保证 TCP 连接不被中断,并督促上层应用敢快处理这些数据。
  2. ACK:确认号有效当 ACK 标志为 1 时有效。确认号表示期望收到的下一个字节的序号。
  3. PSH:接收方应尽快将这个报文交给应用层,叫做 push。所谓 Push 操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队。
  4. RST:连接复位,复位因主机奔溃或其他原因而出现的错误连接,也可以用于拒绝非法的分段或拒绝连接请求,这个用处还是比较多的。
  5. SYN:是一个同步序号,通常与 ACK 合用用来建立连接。也就是常说的三次握手。
  6. FIN:既然有建立连接那么必然有拆除连接,这个字段表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送 FIN 标志位的 TCP 数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。
  • h、紧急指针。

只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

  • i、窗口大小。

TC

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值