TCP和UDP的区别
TCP/IP协议,即Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。
传输层负责主机进程之间的传递,网络层负责主机之间的传递。
运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。运输层还要对收到的报文进行差错检测。运输层需要有两种不同的运输协议,即面向连接的 TCP 和无连接的 UDP。
TCP/IP 的运输层有两个不同的协议:
(1)用户数据报协议UDP(User Datagram Protocol):无连接的UDP协议
(2)传输控制协议TCP(Transmission Control Protocol):面向连接的可靠的TCP协议
用户数据报协议UDP
UDP 是一种无连接的,不可靠的并且缺乏流量控制和差错控制的协议。它使用端口号对来自应用层的数据实现多路复用。
“最简约的” Internet 传输协议。“尽力而为的” 服务, UDP 数据段可以:丢失,应用数据不按序到达。无连接:在UDP收发双方之间,无需握手信号。每个 UDP 数据段的操作都互相独立。
1.UDP提供的服务:面向非连接的、不可靠的传输服务
2.UDP的特点:面向非连接,数据直接封装在IP数据报中投递。不确认,不排序。运行效率高,实现简单。支持一对一、一对多、多对一和多对多的交互通信。
3.利用UDP的应用程序额外要承担可靠性方面的全部工作
传输控制协议TCP
TCP 是面向连接的运输层协议。每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。TCP 提供可靠交付的服务。TCP 提供全双工通信。面向字节流。
点对点:一个发送方, 一个接收方
可靠, 按序的字节流:无“报文边界”,无结构但有顺序
流水式控制:TCP的拥塞和流量控制,设置窗口大小
发送&接收缓存
全双工数据传输:在同一连接上双向传输。MSS: maximum segment size(最大段字节数-1500,536,512)
面向连接: 握手过程 (交换控制信息) 在交换数据前初始化收发双方的状态,“三次握手”。
流量控制:发送方的发送速度不得超过接收方的处理速度
TCP 连接是一条虚连接而不是一条真正的物理连接。
TCP 对应用进程一次把多长的报文发送到 TCP 的缓存中是不关心的。
TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。
TCP 可把太长的数据块划分短一些再传送。TCP 也可等待积累有足够多的字节后再构成报文段发送出去。
TCP 把连接作为最基本的抽象。
每一条 TCP 连接有两个端点。
TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字(socket)或插口。
TCP 和 UDP 的区别
TCP 是面向连接的,UDP 是面向无连接的
UDP程序结构较简单
TCP 是面向字节流的,UDP 是基于数据报的
TCP 保证数据正确性,UDP 可能丢包
TCP 保证数据顺序,UDP 不保证
什么是面向连接,什么是面向无连接
在互通之前,面向连接的协议会先建立连接,如 TCP 有三次握手,而 UDP 不会
TCP 为什么是可靠连接
通过 TCP 连接传输的数据无差错,不丢失,不重复,且按顺序到达。
TCP 报文头里面的序号能使 TCP 的数据按序到达;报文头里面的确认序号能保证不丢包,累计确认及超时重传机制。
TCP 拥有流量控制及拥塞控制的机制
TCP 的顺序问题,丢包问题,流量控制都是通过滑动窗口来解决的;拥塞控制时通过拥塞窗口来解决的
利用UDP实现TCP的功能
1.添加seq/ack机制,确保数据发送到对端
2.添加发送和接收缓冲区,主要是用户超时重传
3.添加超时重传机制
详细说明:发送端发送数据时,生成一个随机seq=x,然后每一片按照数据大小分配seq。数据到达接收端后接收端放入缓存,并发送一个ack=x的包,表示对方已经收到了数据。发送端收到了ack包后,删除缓冲区对应的数据。时间到后,定时任务检查是否需要重传数据。