TCP/UDP协议
TCP协议
概述
TCP(Transmission Control Protocol 传输控制协议) 是一种面向连接的、可靠的、基于字节流的传输层通信协议
由 IETF 的RFC 793定义,TCP 是面向连接的、可靠的流协议
报文结构
源端口:标识发送方的应用进程
目的端口:标识接收方的应用进程
序号(Seq):保证数据传输的有序性
确认号(Ack):对收到的数据进行确认
Flag字段(8位)
- ACK:确认号标志,置1表示确认号有效,表示收到对端的特定数据
- RST:复位标志,置1表示拒绝错误和非法的数据包,复位错误的连接
- SYN:同步序号标志,置1表示同步序号,用来建立连接
- FIN:结束标志,置1表示连接将被断开,用于拆除连接
Option字段(可选项):MSS最大报文段长度,通过置位,协商能承载的TCP数据大小
传输机制-三次握手
传输机制-四次挥手
面向字节流
RST标志位
关闭TCP连接的正常方法是四次挥手,但不是只有四次挥手才能关闭TCP连接
RST 标志位作用
用于复位因某种原因导致的错误连接,也用来拒绝非法数据和请求
如果接收到RST标志位的时候,通常发生了某些错误
RST也可能被接收方或者中间设备置位
RST置位的原因
服务器端口没有打开(listen)
服务器响应太慢,用户终止连接
网络攻击
其他
流量控制-滑动窗口机制
窗口大小决定了在收到确认前可以发送的字节数
可靠传输-停止等待协议
无差错情况
超时重传
确认丢失
确认迟到
拥塞控制
网络拥塞
指的是在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏
若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降
TCP的四种拥塞控制算法
慢开始
拥塞控制
快重传
快恢复
图例
UDP协议
概述
UDP(User Datagram Protocol,用户数据报协议)一种面向无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETE RFC 768是UDP的正式规范
UDP在IP报文协议的协议号是17
报文结构
协议特点
1、在传输数据之前,不需要进行复杂的三次握手来建立连接
2、在传输数据时,没有协议间通信流量(确认号),也不需要浪费不必要的处理时间(接收确认信号再发一次)
3、传输结束后,不再用四次挥手来结束连接
因为UDP协议是面向无连接的
TCP和UDP对比总结
TCP | UDP | |
---|---|---|
可靠性 | 可靠 | 不可靠 |
建立连接 | 面向连接 | 无连接 |
报文 | 面向字节流 | 面向报文 |
传输方式 | 点对点 | 一对一、一对多、多对多 |
传输效率 | 低 | 高 |
流量控制 | 有(滑动窗口) | 无 |
拥塞控制 | 有 | 无 |
应用场景 | 对传输效率要求低,对传输准确性要求高,要求有连接的场景 | 对传输效率要求高,对传输准确性要求低 |
TCP适用场景
当网络硬件失效或者负担太重时,数据包可能就会产生丢失、重复、延时、乱序的现象,这些都会导致我们的通信不正常
如果让应用程序来负担差错控制的工作,无疑将给程序员带来许多复杂的工作,于是,我们使用的通信协议来保证通信的可靠性是非常有必要的
TCP一般用于文件传输(FTP、HTTP对数据准确性要求高,速度可以相对慢)、发送或接收邮件(POP、SMTP对数据准确性要求高,非紧急应用)、远程登陆(Telnet、SSH对数据准确性有一定要求,有连接的概念)等等
UDP适用场景
1、在高效可靠的网络环境中(不需要考虑网络通信不好导致的丢包、乱序、延时、重复等问题),因为UDP是无连接的服务,不用消耗不必要的网络资源(TCP中的协议间通信)和处理时间(预期确认需要的时间),从而效率要高得多
2、在轻权通信中,当需要传输的数据量很小(可以装在一个IP数据包内)时
UDP很适合这种客户机向服务器传送简单服务请求的环境,如这类协议包括TFTP、SNMP、DNS、DHCP等
3、对实时性要求很强的通信中(允许一定量的丢包率时,如赛事直播、视频等)
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论