引言

net
github
starissue

TCP介绍

特点

  • 面向连接的运输层协议。在应用程序在使用TCP协议之前,必须先建立TCP连接。在传送数据完毕后,必须释放已经建立的TCP连接。
  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
  • TCP提供可靠交付的服务。 通过TCP连接传送的数据,无差错,不丢失,不重复,并且按序到达。
  • TCP提供全双工通信。 TCP允许通信双方的应用进程在任何时候都能发送数据。
  • 面向字节流。 TCP的流是指流入到进程或从进程流出的字节序列。虽然应用程序和TCP的交互式一次一个数据块,但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。

图解

  • TCP结构

  • TCP连接

TCP 连接建立,三次握手

传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。

LISTEN
SYN=1seq=xSYN报文段SYN=1SYNAVK1ack+1ACKack=y+1seq=x+1seq=x+1

这时候TCP已经建立了。A进行入了已经建立连接的阶段状态。B收到确认后也进入了连接状态。

TCP 连接释放,四次挥手

ESTABLISHED
FIN1seq=u1FIN-WAIT-1(终止等待1)

注意:TCP规定,FIN报文段即使不携带数据,他也消耗掉一个序号!!

ack = u + 1v最后一个字节的序号加1CLOSE-WAIT(关闭等待)FIN-WAIT-2(终止等待2)FIN = 1wack = u + 1LAST-ACK(最后确认)ACK置1ack=w+1seq=u+1TIME-WAIT还没有还没有释放掉2MSL

时间MSL叫做最长报文段寿命,RFC793建议设在两分钟。但是在现在工程来看两分钟太长了,所以TCP允许不同的实现可以根据具体情况使用更小的MSL值。

代码实现

clientserver

1. 连接

1.1 服务端

  • 监听连接
netListen

1.2 客户端

  • 建立连接
netDail

2. 通信

2.1 服务端

  • 接受信息
.Read

2.2 客户端

  • 发送信息
.Write

3. 回复

当服务端收到信息之后,应该返回信息给客户端。表示已经收到了数据。

3.1 服务端

服务端回复信息

3.2 客户端

客户端收到信息

您可能感兴趣的文章: