最主要的特点:
1.TCP是面向连接的运输层协议
2.TCP是点对点的
3.TCP提供可靠交付的服务
4.TCP提供全双工通信。允许通信双方的应用进程在任何时候都能发送数据。
5.面向字节流,这个和UDP不同,UDP是面向报文的。流指的是流入到进程或者从进程流出的字节序列。也就是说TCP和UDP在发送报文时所采用的方式完全不同,TCP并不关心应用程序一次把多长的报文发送到TCP缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少字节。
可靠传输的工作原理
TCP发送的报文段是交给IP层传送的,但IP层只能提供最大努力服务,也就是不可靠的,因此TCP必须采用适当措施才能使得两个运输层之间的通信变得可靠。
为此可以使用一些可靠传输协议。
停止等待协议
每次发完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组。
优点:简单
缺点:信道利用率低。
连续ARQ协议
以字节为单位的滑动窗口。发送窗口的位置由窗口前沿和后沿的位置共同决定。提高了信道利用率
超时重传时间RTO:RTO=RTTs+4*RTTd
RTTs是加权的RTT,RTTd是RTT的偏差的加权平均值。
TCP的流量控制
让发送方的发送速率不要太快,要让接收方来得及接收
利用滑动窗口机制能够方便的实现流量控制。
A发送数据给B,然后B每次的ACK中会包含有B的接收窗口rwnd的大小,因此发送方的发送窗口不能超过接收方给出的接收窗口的数值,当rwnd减少为0时,发送方应停止发送数据。
TCP拥塞控制
防止过多的数据注入到网络,使得网络中的路由器或链路不至于过载,是一个全局性的过程。而流量控制是点对点的通信量的控制,是个端到端的问题。
慢启动,拥塞避免,快重传和快恢复
TCP首部格式
共20个字节,其实最大可以有60个字节,后面40个字节是填充部分或者选项部分,在这里不做讨论
1.源端口和目的端口,各占2字节
2.序号 seq 占4字节,表示本次所发送的数据的第一个序号
3.确认号ack 4字节,是期望收到对方下一个报文的第一个数据的序号。
4.数据偏移 4位,也就是指出首部的长度
5.保留 6位
6.URG,ACK,PSH,RST,SYN,FIN 共6位
7.窗口,2字节,rwnd,也就是接收方让发送方设置其发送窗口大小的依据
8.检验和 2字节
9紧急指针 2字节
TCP最大64k缓冲区问题
内核缓冲区65535,限制了最多发送64k大小的数据。
超过64k,IP会进行分包。
TCP分片问题
TCP一般不想让IP进行分片,因此如果丢失包,则需要重传全部的数据包。因此TCP不知道分片机制如何,也不知道丢了哪部分包。
因此TCP会自己进行分片
Mss=mtu-tcp头部-ip头部