TCP: 面向字节流的传输方式 , 应用层和 TCP 的交互是一次一个数据块 (大小不等), 但 TCP 把应用程序看成一连串的无结构的字节流. TCP 有一个缓冲, 当应用程序传送的数据块太长, TCP 将它划分短一些再发送. 如果应用程序发送数据太短, TCOP 等待积累足够多的字节后再构成报文段发送出去.
UDP: 面向报文的传输方式 应用层交给 UDP 多长的报文, UDP 都照样发送, 即一次一个报文. 因此, 应用程序必须选择大小合适的报文. 若报文太长, 则 IP 层需要分片, 降低效率. 若太短, 会使 IP 太小. UDP 对应用层交下来的报文, 既不合并, 也不拆分, 而是保留这些报文的边界. 也就是说, 应用层给 UDP 多长的报文, UDP 都照样发送.
TCP 传输控制协议
面向连接的协议
需要三次握手
客户端发送: SYN=1,SEQ=x, 端口号
服务器回复: SYN=1,ACK=x+1.SEQ=y
客户端发送: ACK=y+1,SEQ=x+1
需要四次挥手
A 向 B 提出停止连接请求, FIN=1
B 收到, ACK=1
B 向 A 提出停止连接请求, FIN=1
A 收到, ACK=1
Tcp 报头最小长度: 20 字节
优点:(可靠, 稳定)
传递数据前, 会有三次握手建立连接
传递数据时, 有确认, 重传, 拥塞机制
传递后, 会断开连接节省系统资源
缺点:(传输速度慢, 效率低, 占用系统资源高, 易被攻击)
传递数据前, 建立连接需要耗时
传递数据时, 确认, 重传, 拥塞会消耗大量事件以及 CPU 和内存等硬件资源
确认机制和三次握手机制会被人利用, 实现 DOS,DDOS 攻击
如何保证接受的顺序性
TCP 协议使用 SEQ 和 ACK 机制保证了顺序性
TCP 每个报文都是有序号的. 确认应答信号 ACK=SEQ+1
UDP 用户数据报协议
面向无连接的协议
包头只有 8 字节
简介:
传输数据前源端和终端不建立连接, 当他想传送时就简单的抓取来自应用程序的数据, 并尽可能快的把他扔到网络上
在发送端, UDP 传送数据的速度仅仅是受应用程序生成数据的速度, 计算机的能力和传输带宽的限制
在接收端, UDP 把每个消息段放在队列中, 应用程序每次从队列中读取一个消息段
不建立连接, 不需要维护连接状态, 一台服务器可以同时向多个客户机传输相同的消息
标题只有 8 字节, 相对于 TCP 的 20 字节, 额外开销小
吞吐量不受拥挤算法的调节, 只受应用软件生成数据的速度, 传输带宽和终端主机性能的限制
UDP 使用尽最大努力的交付, 不保证可靠性
UDp 面向报文, 发送方的 UDP 对应用程序交下来的报文, 在添加首部后就交给 IP 层. 既不拆分也不合并, 而是保留这些报文的边界, 因此, 应用程序需要选择合适的报文大小
优点 (传输速度快, 较安全)
传输数据前, 不需要建立连接
传输数据时, 没有确认, 重传, 拥塞机制
被攻击的漏洞少
缺点 (不可靠, 不稳定)
没有 TCP 机制, 网络不好时, 很可能丢包
用 UDP 协议通讯时怎样得知目标机是否获得了数据包
仿造 TCP 的做法, 每发一个 UDP 包, 都在里面加一个 SEQ 序号, 接收方收到包后, 将 SEQ 序号回复给发送方. 如果发送方在指定时间以内没有收到回应, 说明丢包了.
为什么 TCP 比 UDP 可靠
TCP 是面向连接的, 在建立连接后才发送数据; 而 UDP 是无连接的, 不管对方存不存在都会发送数据
TCP 有确认机制
什么时候用 TCP
当对网络通讯质量有要求的时候, 比如: 整个数据要准确无误的传递给对方, 这往往用于一些要求可靠的应用, 比如 HTTP,HTTPS,FTP 等传输文件的协议, POP,SMTP 等邮件传输的协议.
在日常生活中, 常见使用 TCP 协议的应用如下:
浏览器, 用的 HTTP
FlashFXP, 用的 FTP
Outlook, 用的 POP,SMTP
Putty, 用的 Telnet,SSH
QQ 文件传输
什么时候用 UDP
当对网络通讯质量要求不高的时候, 要求网络通讯速度能尽量的快, 这时就可以使用 UDP.
比如, 日常生活中, 常见使用 UDP 协议的应用如下:
QQ 语音
QQ 视频
TFTP
TCP 无边界, UDP 有边界
TCP 无边界
客户端分多次发送数据给服务器, 若服务器的缓冲区够大, 那么服务器端会在客户端发送完之后一次性接收过来, 所以是无边界的;
UDP 有边界
客户端每发送一次, 服务器端就会接收一次, 也就是说发送多少次就会接收多少次, 因此是有边界的.
来源: http://www.bubuko.com/infodetail-3000636.html