TCP、UDP 和 HTTP 详解

简介: TCP、UDP 和 HTTP 详解

先来一个讲 TCP、UDP 和 HTTP 关系的

http: 是用于 www 浏览的一个协议。

tcp:是机器之间建立连接用的到的一个协议。

1、TCP/IP 是个协议组,可分为三个层次:网络层、传输层和应用层。

在网络层有 IP 协议、ICMP 协议、ARP 协议、RARP 协议和 BOOTP 协议。

在传输层中有 TCP 协议与 UDP 协议。

在应用层有 FTP、HTTP、TELNET、SMTP、DNS 等协议。

因此,HTTP 本身就是一个协议,是从 Web 服务器传输超文本到本地浏览器的传送协议。

2、HTTP 协议是建立在请求 / 响应模型上的。首先由客户建立一条与服务器的 TCP 链接,并发送一个请求到服务器,请求中包含请求方法、URI、协 议版本以及相关的 MIME 样式的消息。服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的 MIME 式样的消息。

HTTP/1.0 为每一次 HTTP 的请求 / 响应建立一条新的 TCP 链接,因此一个包含 HTML 内容和图片的页面将需要建立多次的短期的 TCP 链接。一次 TCP 链接的建立将需要 3 次握手。

另外,为了获得适当的传输速度,则需要 TCP 花费额外的回路链接时间(RTT)。每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数据,只 是保证链接的可靠性,因此 HTTP/1.1 提出了可持续链接的实现方法。HTTP/1.1 将只建立一次 TCP 的链接而重复地使用它传输一系列的请求 / 响应 消息,因此减少了链接建立的次数和经常性的链接开销。

3、结论:虽然 HTTP 本身是一个协议,但其最终还是基于 TCP 的。不过,目前,有人正在研究基于 TCP+UDP 混合的 HTTP 协议。

具体介绍

IP (网际协议)

在网络通信中,网络组件的寻址对信息的路由选择和传输来说是相当关键的。相同网络中的两台机器间的消息传输有各自的技术协定。LAN 是通过提供 6 字节的唯一标识符(“MAC” 地址)在机器间发送消息的。SNA 网络中的每台机器都有一个逻辑单元及与其相应的网络地址。DECNET、AppleTalk 和 Novell IPX 均有一个用来分配编号到各个本地网和工作站的配置。

HTTP 是超文本传输协议,是客户端浏览器或其他程序与 Web 服务器之间的 应用层通信协议。在 Internet 上的 Web 服务器上存放的都是超文本信息, 客户机需要通过 HTTP 协议传输所要访问的超文本信息。HTTP 包含命令和传输信息,不仅可用于 Web 访问,也可以用于其他因特网 / 内联网应用系统之间的 通信,从而实现各类应用资源超媒体访问的集成

TCP (传输控制协议)

通过序列化应答和必要时重发数据包,TCP 为应用程序提供了可靠的传输流和虚拟连接服务。TCP 主要提供数据流转送,可靠传输,有效流控制,全双工操作和多路传输技术。可查阅 TCP 部分获取更多详细资料。

至于 HTTP 协议,它是 TCP 协议族中的一种。使用 TCP80 端口

HTTP 是应用层协议,TCP 是传输层协议!

数据包在网络传输过程中,HTTP 被封装在 TCP 包内!!

1. TCP/UDP

面向连接的 TCP

“面向连接” 就是在正式通信前必须要与对方建立起连接。比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个 TCP 连接必须要经过三次 “对话” 才能 建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。

我们来看看这三次对话的简单过程:

1. 主机 A 向主机 B 发出连 接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;

2. 主机 B 向主机 A 发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工 作)的数据包:“可以,你什么时候发?”,这是第二次对话;

3. 主机 A 再发出一个数据包确认主机 B 的要求同步:“我现在就发,你接着吧!”,这是第三次对话。

三次 “对话” 的目的是使数据包的发送和接收同步,经过三次 “对话” 之后,主机 A 才向主机 B 正式发送数据。

TCP 协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用 TCP 协议传输数据。

我 们来做一个实验,用计算机 A(安装 Windows 2000 Server 操作系统)从 “网上邻居” 上的一台计算机 B 拷贝大小为 8,644,608 字节的文件,通过状态栏右下角网卡的发送和接收指标就会发现:虽然是 数据流是由计算机 B 流向计算机 A,但是计算机 A 仍发送了 3,456 个数据包,如图 2 所示。这些数据包是怎样产生的呢?因为文件传输时使用了 TCP/IP 协 议,更确切地说是使用了面向连接的 TCP 协议,计算机 A 接收数据包的时候,要向计算机 B 回发数据包,所以也产生了一些通信量。

如果事先用网络监视器监视网络流量,就会发现由此产生的数据流量是 9,478,819 字节,比文件大小多出 10.96%(如图 3 所示),原因不仅在于数据包和帧本身占用了一些空间,而且也在于 TCP 协议面向连接的特性导致了一些额外的通信量的产生。

面向非连接的 UDP 协议

“面向非连接” 就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。这与现在风行的手机短信非常相似:你在发短信的时候,只需要输入对方手机号就 OK 了。

UDP(User Data Protocol,用户数据报协议)是与 TCP 相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

UDP 适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用 “ping” 命令来测试两台主机之间 TCP/IP 通信是否正常,其实 “ping” 命令的原理就是向对方主机发送 UDP 数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如, 在默认状态下,一次 “ping” 操作发送 4 个数据包(如图 2 所示)。大家可以看到,发送的数据包数量是 4 包,收到的也是 4 包(因为对方主机收到后会发回一 个确认收到的数据包)。这充分说明了 UDP 协议是面向非连接的协议,没有建立连接的过程。正因为 UDP 协议没有连接的过程,所以它的通信效果高;但也正因 为如此,它的可靠性不如 TCP 协议高。QQ 就使用 UDP 发消息,因此有时会出现收不到消息的情况。

附表:tcp 协议和 udp 协议的差别

tcp udp

是否连接 面向连接 面向非连接

传输可靠性 可靠的 不可靠的

应用场合 传输大量的数据 少量数据

速度 慢 快

TCP 协议和 UDP 协议各有所长、各有所短,适用于不同要求的通信环境。TCP 协议和 UDP 协议之间的差别如附表所示。

相关文章
|
4天前
|
网络协议 安全 Linux
TCP 和 UDP 基本认知
TCP 和 UDP 基本认知
|
4天前
|
缓存 负载均衡 网络协议
【亮剑】一次完整的 HTTP 请求过程,包括 DNS 解析、TCP 握手、HTTP 请求和响应等环节
【4月更文挑战第30天】本文介绍了HTTP请求的重要性和详细过程。首先,DNS解析将域名转换为IP地址,通过递归和迭代查询找到目标服务器。接着,TCP三次握手建立连接。然后,客户端发送HTTP请求,服务器处理请求并返回响应。最后,理解这个过程有助于优化网站性能,如使用DNS缓存、HTTP/2、Keep-Alive、CDN和负载均衡等实践建议。
|
5天前
|
网络协议 JavaScript 前端开发
Node.js的网络编程:深入TCP/UDP网络编程
【4月更文挑战第29天】本文介绍了如何在Node.js中进行TCP和UDP网络编程。使用net模块,可以创建TCP服务器和客户端,实现可靠的数据传输。例如,通过`net.createServer()`创建服务器,监听数据、关闭和错误事件。客户端使用`net.createConnection()`连接服务器并通信。另一方面,dgram模块用于UDP编程,创建UDP套接字并绑定端口,通过`server.send()`发送和接收数据报。TCP提供连接和数据可靠性,适合需要顺序和完整性的场景,而UDP更轻量级,适用于实时性要求高的应用。Node.js的网络编程能力使其成为开发高效网络应用的理想选择。
|
6天前
|
缓存 网络协议 网络性能优化
NewH3C—IP、TCP和UDP
NewH3C—IP、TCP和UDP
|
7天前
|
网络协议 安全 网络性能优化
CCNA 200-301系列:TCP和UDP简介
【4月更文挑战第21天】
21 8
|
8天前
|
缓存 网络协议 安全
TCP和UDP 传输层协议的区别
TCP协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。
13 2
|
10天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
15天前
|
网络协议 Linux Windows
TCP/IP、Http、Socket之间的区别
TCP/IP、Http、Socket之间的区别
|
17天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
19天前
|
域名解析 网络协议 前端开发