一 、TCP是如何利用IP的:
- IP:无连接,不可靠
- TCP将应用程序的传输数据分割成合适的数据块
- 定时器
- 延迟确认
- 检验和:CRC校验
- 流量控制:防止缓存区用完
二、 TCP首部
头部20个字节(IP也是20字节的首部)
socket: IP地址 + 端口号(插口)
socket pair: 自己IP地址 + 对方端口号 + 对方IP地址 + 对方端口号
解释:https://www.cnblogs.com/fantastic123/p/8968132.html
三、TCP的状态变迁
s: server c: client
三个部分:
建立连接、连接、断开连接
目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”
clinet 发送: SYN = 1, ACK = 0 , 序列号为M(随机)
server发送:SYN = 1 , ACK = 1 ,序列号为N(随机),确定号为M+1
client 发送: ACK = 1 ,确定号为N+1
确定号有效,则有ACK一直为1
因为TCP是全双工的 ,所以双方必须都关闭才可以,一方为主动,一方为被动
client:FIN = 1, 序列号M
server:ACK=1, 确定号M+1
server: FIN = 1, 序列号为N
client: ACK = 1, 确定号N+1
3.TCP通信过程及状态转换
四、TCP内部使用的定时器
1.重传定时器(接收方没有确认,也没有回复)
2.坚持定时器persist(window size,确定窗口还有没有能接收的空间 )
3.保活定时器keepalive(一直保存连接,可以在应用程序中发送消息代替)
4.2MSL定时器(TIME_WAIT)(本地socket无法使用,是本次连接的包彻底消失,不影响下一次的连接)