TCP 和UDP的区别
TCP是面向连接的;
所谓连接 就是 打开的时候要握手,收发数据的时候要确认(传说中的窗口协议保持滑动过去的窗口都已成功发送,接收方已经成功接收)。
UDP是无连接的。
所谓无连接 就是 打开连接无需握手, 收发数据无需确认, 发送方只管发,接收方只管收。
具体到编程过程中,无论是有连接还是无连接 这些都是操作系统帮我们实现的协议细节,
我们编程的时候只需要 打开一个TCP/UDP的缓冲区,然后从这个缓冲区发送和接受数据。
TCP/UDP 打开, 发送, 接受 这几个过程 在具体编程中又有了相应区别
TCP打开必须要三次握手,也就是确实和对方取得了联系, 这个scoket缓冲区才是建立起来了,然后你才可以收发数据, 发送的时候其实就是把内容放到缓冲区,操作系统替你发送出去, 如果发送失败, TCP协议有他自己的滑动窗口, 保证你提交的数据都成功发送。
另外TCP服务端有些特殊, 服务器端监听的端口监听到有通信请求,需要再创建一个专门通信的TCP端口进行通信,这就是有时候服务器端连接数会爆掉的原因。
UDP就不一样了, 因为是无连接的,不需要握手, 因此直接打开就行了,有可能对方都没有监听对应的端口,这个socket也是可以成功建立的,发送信息也不会报错。
关于数据库长连接、短连接
长连接或者短连接 其实是刻意认为制定的, 不管TCP还是UDP都是一次打开,通信,关闭的过程, 没有长短这一说, 一般短连接就是 打开,通信一次,关闭 长连接就是打开 多次通信 甚至只要不出事故就一直通信 然后关闭的状态。 值得提醒的是长连接会 粘包 拆包 , 因为你可能某一次发送的数据特别大,被放置到下一个缓存区了, 由于长连接没有close 所以 服务器端没有办法通过feof来判断数据是否结束, 所以必须引入协议头来解决包与包之间的分界。