目录

传输层协议-TCP

传输层协议 TCP

TCP 协议

TCP 全称为 “传输控制协议(Transmission Control Protocol”). 人如其名, 要对数据的传输进行一个详细的控制;

TCP 协议段格式

https://i-blog.csdnimg.cn/direct/0fc4bb11a8c44b7aae0703ccd3390899.png

4位首部长度:4位二进制表示的数字[0,15],乘以4字节,得到首部总范围[0,60]

由于头部20字节是必带的,选项是可能没有的。所以范围是[20,60]。

例如没有选项:

x*4=20–>x=5–>4位首部长度填0101

https://i-blog.csdnimg.cn/direct/cc3ed28402f74b669bdb23536de2300a.png

交流机制

确认应答**(ACK)**机制

https://i-blog.csdnimg.cn/direct/d00e50d0bb87469daa3788108443a40f.png

https://i-blog.csdnimg.cn/direct/e74a659a1f474902876bc37a1ac9bd03.png

https://i-blog.csdnimg.cn/direct/8a3b47dc4f784f7890d9850898f0b02e.png

确认序号=序号+1,代表(序号+1)之前的内容全收到了

问题:明明感觉报头带一个序号就行了啊?为什么协议里面是两个序号?

https://i-blog.csdnimg.cn/direct/0373ed79f0b9407fa8ab1bc498d3aaae.png

服务器S接收方有时为了提高效率,会进行捎带应答。就是应答的时候夹带数据。

导致这次应答既是回应又是发送。发送方要进行回应。

所以两种序号都需要用到。

https://i-blog.csdnimg.cn/direct/7ad85f406af24d6380f5f288b6f56c42.png

ACK是接收方收到后表示确认的位段,置1后进行回应。

当然,其他位段表示其他类型。

https://i-blog.csdnimg.cn/direct/e4abb0afd67b486c9c5fcb21f9a7b674.png

序号的理解:

https://i-blog.csdnimg.cn/direct/9cc22e4c2c0a4873a8b05a970a8aee3f.png

https://i-blog.csdnimg.cn/direct/23630cd3faeb4890a69759fc79417f38.png

把缓冲区当成一个数组,序号就是数组的下标号经过转换后代表哪一个字节的字节号。

超时重传机制

https://i-blog.csdnimg.cn/direct/f9e72cc3274a47c3931cd84658388401.png

发送方收到ACK,代表接收方收到收到数据

没有收到ACK就直接代表对方没有收到数据。

连接管理机制

在正常情况下, TCP 要经过三次握手建立连接, 四次挥手断开连接

https://i-blog.csdnimg.cn/direct/fc92c2b9500141dd8e780a383bfd1a07.png

https://i-blog.csdnimg.cn/direct/1a52f377ff9c488db1879e5168e63581.png

https://i-blog.csdnimg.cn/direct/8414d3c933624f1ab6c22e43904da883.png

问题:建立连接为什么要三次握手?

答:对连接先描述,再组织。连接是内核数据结构,维护需要时间和空间。所以维护连接需要成本。3次握手相比1次2次握手可以更好的应对SYN洪水。

https://i-blog.csdnimg.cn/direct/e5ad0ccb656d4167bdea35ea212b882e.png