TCP是一种面向连接的套接字(SOCK_STREAM)
特点:
1.传输过程中数据不会丢失(不能抬杠啊)
2.串行传输,数据传输中是有顺序的。
3.传输的数据没有边界,就像一条河流一样,不能分割成一段的,(但是可以在应用层用协议规定)。
TCP套接字中的I/O缓冲
特点:
1. I/O缓冲中在每个套接字中单独存在。
2. I/O缓冲实在创建该套接字时候自动生成的。
3. 即使是关闭了套接字也会继续传输缓冲区的剩余数据。
4.关闭套接字将丢失输入缓冲区中的数据(到你家门口,你刚好把们砌成墙了,进不来)。
TCP内部工作原理1:
TCP 的经典三次握手(Three-Way handshaking),语言描述:
主机A:现在我给您个数据包序列号为1000,如果接受无误,您下次给我一个ACK=1001数据包,表示您接到了。
主机B:好的,我收到了,我的ACK将是1001,我现在发给你我这边的数据包序列号为2000;
主机A: 收到了2000号数据包,我继续发送1001号数据包,并且回复您2001,表示2000号数据包没问题。
解析:这样三次AB两台主机都知道了对方的数据包编号,如果这时候在一次数据传输中数据包丢失了,那么可以根据序列号重新发送。
TCP内部工作原理2:
TCP的数据传输过程:
这个过程比较简单,一发一答,ACK这块注意:ACK=SEQ号+传递字节数+1;不然比如该次传输了100字节,那么其实只收到80,那发送端不确定你是否完整接受,所以把字节数量加进去。
这里还有个问题,就是数据包发生丢失的时候,TCP套接字发完后接收不了回信,就会开启计时,超时间则重新发送。
TCP内部工作原理3:
TCP套接字的断开连接:
主机A:我想断开了;
主机B:是么?稍等我一下;
主机B:我好了,可以断开了;
主机A:好的,再见;