物理上没有一个连接的东西在这里,udp也类似会占用端口、ip,但是大家都没说过udp的连接。而本质上我们说tcp的握手是指握手的时候协商和维护一些状态信息的,这个状态信息就包含seq、ack、窗口/buffer,tcp握手就是协商出来这些初始状态,通过这些状态才有了连接的可靠性。这些状态才是我们平时所说的tcp连接的本质

信道不可靠

需要解决的问题是,数据在信道上传输时,不总是符合预期,例如出现以下情况:

Untitled

解决方案写在 TCP 报文头上

数据损坏

接收方收到报文后,计算出 Checksum 并与报文中的 Checksum 对比。若一致,数据没有损坏。不一致,数据损坏,丢掉数据包

乱序和冗余

字节编号机制:建立连接时,发送方和接收方各自初始化一个 seq(Seq...) 值,并且让对方知道,这就是为什么 TCP 连接时需要三次握手。发送方每次发送数据,都是在自己前一次的 seq 值上加本报文的 data 字节数,得到本报文的 seq 值。接收方接收到多个报文后,按 seq 的值对所有数据包进行升序排列,就能得到有序的报文。并且接收方可以判断接收的数据包之间是否有间隔或冗余。

数据丢失