tcp(传输控制协议):
1.特性比较:
1.有链接:
通过三次握手,四次挥手建立断开连接
2.可靠传输:
1.通过连接管理建立连接
2.通过序列号和确认序列号实现对包序进行管理
3.通过确认应答实现,确定对方收到数据
4.通过超时重传确保丢失的数据能够传达
5.通过校验和确保数据的正确性
3.面向字节流:
特性:确保数据能够安全传输–保证数据的安全传输,传输灵活、传输速率低、容易发生粘包问题
粘包问题的解决:数据定长,特殊字符,还有tlv数据格式
使用场景: 对数据安全性的要求高用tcp -->点型场景:文件传输
因为tcp实现可靠传输,所以性能下降,他通过下这些机制实现性能的提升:
1.滑动窗口
(停止等待协议一应一答,回退n步协议,选择重传)
2.快速重传
3.延时应答(对处理速度比较自信等待一定时间,等窗口稍微大的时候同一进行回复)
4.拥塞窗口(探测网络状况,防止一开始丢包)
5…流量控制(通过查看缓冲区的剩余大小每次设定窗口大小,控制发送数据的快慢,防止缓冲区满了大量丢包)
6.捎带应答 (网络带宽是固定的,特定的去回复收到数据,会影响传输速率,当回复的数据包的时候,将数据包的tcp头ack标志位置为1来回复上一条数据)
udp(用户数据报协议):
1.无连接:
知道对端的ip和端口就直接进行传输,不需要建立连接
2.不可靠:
没有确认机制,没有重传机制,如果因为网络故障数据段无法发送到对方,udp协议层也不会给应用层发送任何错误信息
3.面向数据报:
不能够灵活的控制读写数据的次数和数量
特性:无法保证数据的安全传输,传输不太灵活,传输速度快,无粘包问题
使用场景:对数据的实时性要求高的程序用udp-典型场景:传视频
2.协议头部比较:
UDP:头中有16位源端口,16位目的端口,16位的数据长度(64k),16位的校验和,因为有这个长度,所以需要在应用层对包进行分割,因为udp是不可靠的所以需要进行包序管理
tcp:头中有16位源端口,16为目的端口,32为序列号,32位确认序列
号,4为首部长度,6位保留,6位标志位(urg,ack,fin,psh,syn),16位的紧急指针,16位窗口大小,16位校验和,16位的紧急指针