都是TCP/ip 的族内协议
UDP: 面向非连接的 不安全的 相对高效的,数据结构只有 源端口号,目的端口号,UDP长度,UDP校验码(使用 IP 首部、UDP 首部和数据报中的数据进行计算,接收方可以通过校验码验证数据的准确性,发现传输过程中出现的问题;)8个字节不用三次握手
- 应用场景: 例如直播、电话会议、媒体传输等场景经常使用 UDP协议
TCP :传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议
• 源端口、目标端口
发送方进程的端口号,数据接收方的端口号(范围0-65535);
- 序号
主要是为了解决乱序问题(编好号才知道哪个先来,哪个后到); - 确认序号
发出去的包应该有确认,这样能知道对方是否收到,如果没收到就应该重新发送,这个解决的是不丢包的问题; - 状态位
SYN 是发起一个链接,ACK 是回复,RST 是重新连接,FIN 是结束连接(TCP 是面向连接的,因此需要双方维护连接的状态,这些状态位的包会引起双方的状态变更); - 窗口大小
TCP 要做流量控制,需要通信双方各声明一个窗口,标识自己当前的处理能力;
TCP三次握手
TCP协议发送数据之前必须在通信的两端建立连接,建立连接的方法是TCP三次握手:
TCP三次握手
- 第一次握手
客户端向服务端发送连接请求报文;请求发送后,客户端便进入 SYN-SENT 状态; - 第二次握手
服务端收到连接请求报文后,如果同意连接,则会发送一个应答,发送完成后便进入 SYN-RECEIVED 状态; - 第三次握手
当客户端收到连接同意的应答后,还要向服务端发送一个确认报文;客户端发完这个报文后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。
为什么 TCP 建立连接需要三次握手,而不是两次?
TCP既要保证数据可靠传输,又要提高传输的效率,而用三次(客户端与服务端发送的报文都得到了响应,通信双方全都有来有回)恰恰满足了以上两方面的需求!
网友评论