前言
首先咱们来理解一下 tcp 和 udp 是什么?
计算机与网络设备要互相通信,单方就必须基于雷同的办法。比方,如何探测到通信指标、由哪一边先发动通信、应用哪种语言进行通信、怎么完结通信等规定都须要当时确定。不同的硬件、操作系统之间的通信,所有的这所有都须要一种规定。而咱们就把这种规定称为协定(protocol)。
TCP/IP
中有两个具备代表性的传输层协定,别离是TCP
和UDP
TCP/IP
是互联网相干的各类协定族的总称,比方:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协定扩大:
QUIC(Quick UDP Internet Connection)
是谷歌制订的一种互联网传输层协定,它基于 UDP 传输层协定,同时兼具 TCP、TLS、HTTP/ 2 等协定的可靠性与安全性,能够无效缩小连贯与传输提早,更好地应答以后传输层与应用层的挑战。
UDP:
UDP 协定全称是用户数据报协定,在网络中它与 TCP 协定一样用于解决数据包,是一种 无连贯 的协定。在 OSI 模型中,在第四层——传输层,处于 IP 协定的上一层。UDP 有不提供数据包分组、组装和不能对数据包进行排序的毛病,也就是说,当报文发送之后,是无奈得悉其是否平安残缺达到的。
TCP 协定:
TCP 协定全称是传输控制协议是一种 面向连贯 的、牢靠的、基于字节流的传输层通信协议,由 IETF 的 RFC 793 定义。TCP 是面向连贯的、牢靠的流协定。流就是指不间断的数据结构,你能够把它设想成排水管中的水流。
TCP 和 UDP 的比拟
UDP | TCP | |
---|---|---|
是否连贯 | 无连贯 | 面向链接 |
是否牢靠 | 不牢靠传输,不反对流量管制和拥塞管制 | 牢靠传输,应用流量管制和拥塞管制 |
连贯对象个数 | 反对一对一,一对多,多对一和多对多交互通信 | 只能是一对一通信 |
传输方式 | 面向报文 | 面向字节流 |
首部开销 | 首部开销小,仅 8 字节 | 首部最小 20 字节,最大 60 字节 |
应用场景 | 实用于实时利用(IP 电话,视频会议,直播等) | 实用于要求牢靠传输的利用,例如文件传输 |
总结
- TCP 向下层提供面向连贯的牢靠服务,UDP 向下层提供无连贯不牢靠服务。
- 尽管 UDP 并没有 TCP 传输来的精确,然而也能在很多实时性要求高的中央有所作为
- 对数据准确性要求高,速度能够绝对较慢的,能够选用 TCP
TCP 协定的 3 次握手与 4 次挥手过程
为什么须要三次握手呢?为了避免已生效的连贯申请报文段忽然又传送到了服务端,因此产生谬误。
比方:client 收回的第一个连贯申请报文段并没有失落,而是在某个网络结点长时间的滞留了,以至延误到连贯开释当前的某个工夫才达到 server。原本这是一个早已生效的报文段,然而 server 收到此生效的连贯申请报文段后,就误认为是 client 再次收回的一个新的连贯申请,于是就向 client 收回确认报文段,批准建设连贯。假如不采纳“三次握手”,那么只有 server 收回确认,新的连贯就建设了,因为 client 并没有收回建设连贯的申请,因而不会理会 server 的确认,也不会向 server 发送数据,但 server 却认为新的运输连贯曾经建设,并始终期待 client 发来数据。所以没有采纳“三次握手”,这种状况下 server 的很多资源就白白浪费掉了。
为什么须要四次挥手呢?
TCP 是全双工模式,当 client 收回 FIN 报文段时,只是示意 client 曾经没有数据要发送了,client 通知 server,它的数据曾经全副发送结束了;然而,这个时候 client 还是能够承受来 server 的数据;当 server 返回 ACK 报文段时,示意它曾经晓得 client 没有数据发送了,然而 server 还是能够发送数据到 client 的;当 server 也发送了 FIN 报文段时,这个时候就示意 server 也没有数据要发送了,就会通知 client,我也没有数据要发送了,如果收到 client 确认报文段,之后彼此就会欢快的中断这次 TCP 连贯。