TCP、UDP、HTTP的区别

1、TCP
TCP是传输层的一个协议,基于IP协议,用来传输类似HTTP的信息。如果把IP协议类比为一个“公路”的话,那TCP协议可以看成是在公路上行驶的“卡车”。TCP协议是面向连接的协议,通过三次握手机制,尽量保证连接的可靠性。

TCP三次握手机制
第一次:客户端发送一个SYN包到服务端,并进入SYN_SEND状态,等待服务端的响应。
第二次:服务端收到SYN包,并确认,同时自己也发送一个SYN包,即SYN+ACK包,此时服务端进入SYN_RECV状态。
第三次:客户端收到服务端的SYN+ACK包,向服务端发送一个确认ACK包,进入ESTABLISHED状态,完成连接。

2、UDP
UDP也是传输层的一个协议。但是与TCP不同的是,UDP不是面向连接的,并不保证传输的可靠性,没有TCP的建立连接的三次握手机制,对于传输效率上面有了提升。


TCP和UDP的区别:
TCP面向连接(如打电话要先拨号建立连接) UDP是无连接的,即发送数据之前不需要建立连接
TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
TCP首部开销20字节;UDP的首部开销小,只有8个字节
TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

TCP 与 UDP 的应用场景
两种协议都是传输层协议,为应用层提供信息载体。TCP协议是基于连接的可靠协议,有流量控制和差错控制,也正因为有可靠性的保证和控制手段,所以传输效率比UDP低;UDP协议是基于无连接的不可靠协议,没有控制手段,仅仅是将数据发送给对方,因此效率比TCP要高
从特点上我们已经知道,TCP 是可靠的但传输速度慢 ,UDP 是不可靠的但传输速度快。因此在选用具体协议通信时,应该根据通信数据的要求而决定。
若通信数据完整性需让位与通信实时性,则应该选用 TCP 协议(如文件传输、重要状态的更新等);反之,则使用 UDP 协议(如视频传输、实时通信等)


3、HTTP
HTTP是在应用层的一个协议,本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传输协议。
HTTP协议基于请求\响应模型的,并且是基于TCP协议的。

HTTP、TCP、UDP,Socket,HTTPS(史上最强理解,没有之一)

TCP HTTP UDP三者的关系如下: TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和…

### TCPUDPHTTP区别与应用场景 #### 一、协议层次 TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)都位于 OSI 模型中的传输层,而 HTTP(HyperText Transfer Protocol)则属于应用层。HTTP 基于 TCP 进行数据传输[^1]。 #### 二、连接性和可靠性 - **TCP** 是一种面向连接的可靠协议,它通过三次握手建立连接并确保数据包按顺序到达目标设备。如果某个数据包丢失,则会触发重传机制以恢复丢失的数据[^3]。 - **UDP** 则是一个无连接且不可靠的协议,不提供错误校验或重新传输功能。这意味着一旦发送方发出消息后便不再关心其是否成功抵达目的地[^2]。 - **HTTP** 并不是直接处理底层网络通信细节而是依赖像 TCP这样的基础服务来完成实际的数据交换过程,在每次请求之前都需要先创建一个新的 TCP 链接。 #### 三、性能表现 由于额外增加了确认收到每一个分组所需的往返时间(RTT),所以相比起轻量级快速但可能丢帧甚至乱序送达信息给接收端用户的 UPD 来说,TCP通常会有更高的延迟成本,但是它可以保证所有传递出去的内容都能被正确解读出来. #### 四、典型使用场景 - 当应用程序需要高度精确度而又可以接受一定范围内的延时时(比如浏览网页),那么应该优先考虑采用支持完整事务流程管理能力较强的TCP作为首选解决方案之一; - 对实时性强却允许一定程度上牺牲准确性的情况之下,(例如在线游戏或者IP语音通话VOIP业务当中),此时选用较为简单高效的UPD往往能够满足需求. - 而对于具体的web资源获取操作而言(http get/post etc.),自然离不开基于tcp之上构建起来的标准http交互模式了. ```python import socket # 创建一个基于TCP的socket对象 sock_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建一个基于UDP的socket对象 sock_udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值