1.TCP协议
(1)TCP协议首部格式,三次握手,四次挥手,详情请见文章《当我们使用浏览器访问一个网页时,服务器与我们的主机内部,发生了什么?》第四部分扩展知识篇。
(2)连接管理
在数据传输开始前,发送方会发送SYN,请求确认连接,如果服务器端未确认,则不可以进行数据通信,直接断开连接。当数据传输完成后,发送方会发送FIN请求终止连接。
(3)确认应答
在TCP
协议中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知,这个消息叫做确认应答(ACK
)。TCP
通过肯定的确认应答(ACK
)实现可靠的数据传输。当发送端将数据发出去之后会等待接收端的确认应答。如果有确认应答,说明数据已经成功到达接收端。反之,则数据丢失的可能性很大。
(4)重传机制
重传 超时
再次发送数据包之前,等待确认应答的特定的时间间隔,如果超过特定时间间隔,未收到回复,则会再次发送数据包,等待确认应答。如果第二次也不应答,则下次发送时间呈指数倍上涨,如果多次重发都没有回复,则强制关闭连接。
一般的Linux与Windows系统设置的超时时间间隔为6s(一般都是0.5s的整数倍)左右。
超时重传
重传机制中的一种,如果超过了超过了超时时间间隔并且无应答,或者数据包丢失,则会进行数据包重发。
快速重传
当收到三个相同的ACK报文时,会在重传超时过期之前,重传丢失的报文段。
存在的问题:当触发重传机制时,是重传所有数据,还是重传之前的那个?
SACK方法
为了解决快速重传出现的问题,出现了SACK(Selective Acknowledgment 选择性确认)方法。
工作机制:在TCP报文中的首部选项中,添加SACK。SACK缓存了所有了数据地图。当快速重传发生时,就可以清晰的知道哪些是应该重新发送的了。
(5)滑动窗口
在TCP首部格式中的窗口,表示了接收方一次能接受多少来自发送发的数据包,是接受方系统专门开辟出来的一块缓存空间,保证了数据传输效率。
为了避免在数据传输过程中,由于数据包往返时间过长,而导致的传输效率太低。TCP协议引进了窗口的概念。发送方主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据。如果按期收到确认应答,此时数据就可以从缓存区清除。即使在往返时间较长的情况下,它也不会降低网络通信的效率。
TCP
协议通过滑动窗口解决了流量控制和乱序重排。
(6)流量控制
TCP协议通过滑动窗口来进行流量控制,流量控制是为了控制发送方的发送速率。如果TCP首部的窗口设置为零,则代表接收方没有内存空间用于数据接受。
(7)拥塞控制
拥塞控制主要是为了避免网络中出现大量的数据,从而导致路由器或链路过载。
流量控制主要是为了让接收方能来得及接受。
而拥塞控制主要是为了降低整个网络的拥塞程度。
拥塞控制的四个算法:
发送方需要维护一个叫cwnd()的状态变量。
1.慢开始
在数据第一次传输开始时,不会发送大量的数据,首先会让cwnd=1,确保网络通畅的情况下,才会在下次发送数据时,让cwnd=2,之后的每次发送,都会比上一次多一倍。
2.拥塞避免
当慢开始进行时,每轮次都是上一轮的两倍,如果一直进行下去,之后的每次发送的数据量过于巨大,就必然会产生网络拥塞,为了避免其出现。我们定义了一个慢开始门限ssthresh
,当 cwnd >= ssthresh
时,进入拥塞避免,每个轮次只将 cwnd
加 1。如果出现了超时,则令 ssthresh = cwnd / 2
,然后开始执行快恢复。
3.快重传
当发送发连续三次出现 来自接收方的确认,就会立即重传对方尚未收到的报文段。
4.快恢复
当快重传生效后,数据传输不会执行慢开始,而是会让ssthread = 当前CWND / 2 ,并让cwnd = ssthread,然后直接执行拥塞避免算法,每次传输数据,都在上次的cwnd基础上+1.
(8)TCP协议如何保证传输可靠性
- 校验和:端对端的确认,如果在传输过程中,双方收到的检验和有任何差错,TCP就会拒绝确认此报文段。
- 序列号:TCP将传输的每个字节都进行了编号,用于确认应答。
- 超时重发:当第一次发送的数据包超过规定时间,没有得到回复,就会启动超时重发(重新·发送)。
- ACK:确认应答,只有ACK=1,发送方才会认为接收方收到数据。
- 连接管理:TCP提供面向对象的连接管理,在发送数据之前,有确认的流程。
- 流量控制:TCP使用的流量控制协议,就是滑动窗口协议,一方面控制数据传输流量,另一方面可以防止包丢失。
- 窗口管理:TCP通过设置窗口的大小值,通过配合“滑动窗口”,实行并发机制。确保传输效率。
- ARQ协议:分组发送,当确认发送后,在进行下一个组的发送。
2.UDP协议
User Datagram tocal(用户数据协议),提供面向无连接的通信服务.在它收到应用程序发来的数据后,原封不动的发到网上。使用时需要充分考虑好上层协议,并制作相应的应用程序。
(1)UDP协议的场景
- 包含总量较少的通信(SMTP DNS等)。
- 视频,音频等多媒体通信(及时通信)。
- 广播通信。
(2)UDP协议的特点:
- 面向报文传输,不保证交付,不堵塞,适合多媒体通信。
- 支持一对一,一对多,多对一,多对多的交互通信。
- UDP的首部只有8个字节。
(3)UDP协议的首部格式
由数据字段与报文首部组成。
3.TCP协议与UDP协议的区别
类型 | 特点 | ||
是否面向连接 | 传输可靠性 | 传输形式 | |
TCP | 是 | 可靠 | 字节流 |
UDP | 否 | 不可靠 | 数据报文段 |
UDP在传输数据的时候,不需要建立连接,接收方也不需要确认消息,数据传输速度快,主要用于网络即时通话,广播,直播等。
TCP提供面向连接的服务,在传输数据的时候需要建立连接,数据传输后释放连接。它在数据传输是的可靠性上拥有数据重传,数据确认,流量控制,拥塞避免等。但是也增加许多性能开销,例如:超时重传,连接管理。流量控制,拥塞避免等。TCP一般用于文件传输,数据下载,收发邮件,远程登陆等。