标签:机制 处理 serve 准确率 拥塞控制 发送 通讯 场景 缓冲区
TCP是面向连接的,在连接持续的过程中,socket中收到的数据都是由同一台主机发出的,因此,知道保证数据是有序的到达就行了,至于每次读取多少数据自己看着办。
UDP是无连接的协议,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。客户端一次读取超过一个报文的数据,则会数据错乱
由于TCP有重传机制,UDP不会进行重传。
消息在传输过程中可能会乱序,后发送的消息可能会先到达,TCP会对其进行重排序,UDP不会。
TCP报头是20字节 > UDP报头是8字节。
UDP适用于对传输效率要求高,但准确率要求低的应用场景:
TCP适合对传输效率要求低,但准确率要求高的应用场景:
要发送的数据 > 发送缓冲区剩余空间大小,将会拆包。
待发送数据 > 最大报文长度,将会拆包。
要发送的数据 < TCP发送缓冲区的大小,TCP会启用Nagle算法,对多次的数据流进行合并,写入缓冲区的数据一次发送出去,将会发生粘包。
接收数据端的应用层没有及时读取缓冲区中的数据,服务器下次发送将会发生粘包。
他不会对数据包进行合并发送,每一个数据包都是完整的(数据+UDP头+IP头等等封装一次)也就没有粘包一说了。
客户端在数据包固定位置添加包的长度信息,服务器接收到数据后,先解析包长度,然后根据包长度截取数据包(客户端有自动重发机制,故而在应用层不会导致数据的不完整性)
? 第一次握手:客户端发送一个同步标志SYN=1,ACK=0标志的数据包给接收端,请求进行连接;
? 第二次握手:接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,可以通讯了,并且让发送端发送一个确认数据包
? 第三次握手:发送端发送一个SYN=0,ACK=1的数据包给接收端,确认连接建立,可以通讯。
? 中断连接端可以是Client端,也可以是Server端。
? 因为三次握手中Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。
? 但是关闭连接时,当Server端收到FIN报文时,并不会立即关闭SOCKET,先应答Client端一个ACK报文,等确认所有的数据都发送完了,才能发送FIN报文,由于不能一起发送,所以是四次握手。
标签:机制 处理 serve 准确率 拥塞控制 发送 通讯 场景 缓冲区
原文地址:https://www.cnblogs.com/justblue/p/13022414.html