TCP/IP协议,TCP和UDP的区别及特点

Author Avatar
lucky 2020年10月29日
  • 在其它设备中阅读本文章

原文地址:https://blog.csdn.net/zzfightingy/article/details/88383635


这篇博客主要用来纪录自己对 TCP/IP 和 UDP 的个人理解,若有不对还请慷慨指正

一些基础知识

  • IP 地址:用来标识网络中的一个通信实体的地址。通信实体可以是计算机、路由器等。 比如互联网的每个服务器都要有自己的 IP 地址,而每个局域网的计算机要通信也要配置 IP 地址。目前主流使用的 IP 地址是 IPV4,但是随着网络规模的不断扩大,IPV4 面临着枯竭的危险,所以推出了 IPV6。
  • IPV4:32 位地址,并以 8 位为一个单位,分成四部分,以点分十进制表示,如 192.168.0.1。因为 8 位二进制的计数范围是 00000000---11111111,对应十进制的 0 -255,所以 -4.278.4.1 是错误的 IPV4 地址。
  • IPV6:128 位(16 个字节) 写成 8 个 16 位的无符号整数,每个整数用四个十六进制位表示,每个数之间用冒号 (:) 分开,如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984
  • 端口:根据上一条我们知道 IP 地址用来标识一台计算机的,但是一台计算机上可能提供多种网络应用程序,如何来区分这些不同的程序呢? 这就要用到端口。端口是虚拟的概念,并不是说在主机上真的有若干个端口。通过端口,可以在一个主机上运行多个网络应用程序。 端口的表示是一个 16 位的二进制整数,对应十进制的 0 -65535。Oracle、MySQL、Tomcat、QQ、msn、迅雷、电驴、360 等网络程序都有自己的端口。
  • URL:在 www 上,每一信息资源都有统一且唯一的地址,该地址就叫 URL(Uniform Resource Locator),它是 www 的统一资源定位符。URL 由 4 部分组成:协议 (http://)、存放资源的主机域名 (www.google.com)、端口号(可省略,如:80)和资源文件名(index.html),其后一般还有别的参数,如超链接和锚点(?xxx=xxx&xxx#xxx)。如果未指定该端口号,则使用协议默认的端口。例如 http 协议的默认端口为 80。

定义

TCP/IP 是互联网相关的各类协议族的总称,如 TCP,UDP,IP,FTP,HTTP 等都属于 TCP/IP 族内的协议。(解释不唯一)

TCP/IP 的参考模型主要分为四层:应用层、传输层、网络层和数据链路层。(有时还会加上物理层,因为无论何种协议和参考模型都是以二进制数据形式在物理媒体上传输数据)

  • 应用层
    向用户提供一组常用的应用程序,比如电子邮件、文件传输等,应用层产生并处理应用的数据,将数据发送给传输层进行传输。
  • 传输层
    传输层负责应用程序间的通信,将来自应用层的信息流格式化封装,并提供可靠传输,实现进程直接的通信。为了保证信息传输可靠性,传输层协议规定接收端必须发回确认,并且假如信息丢失,则必须重新发送,详见“三次握手”过程。传输层协议主要就是:传输控制协议 TCP(Transmission Control Protocol) 和用户数据报协议 UDP(User Datagram protocol)。
  • 网络层(又叫 IP 层)
    网络层将来自传输层的格式化信息流打包成 IP 数据包,交给数据链路层进行处理来实现不同主机之间的通信。其功能主要包括三方面。
    1. 发送数据时,处理来自传输层的发送请求,收到请求后,将要发送的数据装入 IP 数据包,然后将 IP 数据包发往指定的网络接口。
    2. 处理接收自别的主机的输入数据包。
    3. 处理路径、流控、阻塞等问题。
  • 数据链路层
    数据链路层是负责接收来自网络层的 IP 数据包并封装成帧再通过网络发送;或者从网络上接收物理帧,抽出 IP 数据包,再交给网络层。

(数据链路层主要解决的三个问题:https://blog.csdn.net/SouthWind0/article/details/80038014

TCP

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP 为了保证数据包传输的可靠行,会给每个包一个序号,同时此序号也保证了发送到接收端主机能够按序接收。然后接收端主机对成功接收到的数据包发回一个相应的确认字符 (ACK,Acknowledgement),如果发送端主机在合理的往返时延(RTT) 内未收到确认字符 ACK,那么对应的数据包就被认为丢失并将被重传。

  • 建立 TCP 连接(三次握手)
    当一个基于 TCP 传输层协议的连接被建立时,发送端和接收端总共发送 3 个包,称为建立连接时的 3 次握手。

当发送端发出 SYN 连接请求(SYN:同步序列编号 Sychronize Sequence Numbers)后,等待接收端回复 SYN 和 ACK 信号,收到回复的确认信号后,发送端对对方的 SYN 再执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,TCP 使用的流量控制协议是可变大小的滑动窗口协议。如下图所示:

20190310221151503.png

1. 第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号Seq=X,保存在包头的序列号(Sequence Number)字段里。进入 SYN_SEND 状态。
2. 第二次握手:服务器发回确认包(SYN+ACK)应答,即SYN标志位和ACK标志位均为1。同时将确认序号ACK设置为客户端的Seq加1,即X+1,此时确认包由SYN(Seq=Y)和ACK((ACK=X+1)组成。进入 SYN_RECV 状态。
3. 第三次握手:客户端收到SYN+ACK后,再次回应确认包ACK(SYN标志位为0,ACK标志位为1),并且把服务器发来Seq字段+1(即ACK = Y + 1)放在确认字段中发送给服务端。进入 Established 状态。

三次握手完成,TCP 客户端和服务器端成功建立连接,可以开始传输数据了。

  • 终止 TCP 连接(四次挥手)
    TCP 连接的终止需要发送四个包,因此称为四次挥手(four-way handshake),这是由于 TCP 的半关闭(half-close)造成的。在一个 TCP 连接下,客户端或服务器均可主动发起挥手动作。在 socket 编程中,任何一端调用 close() 方法即可产生挥手操作。

20190310222945286.png

1. 某个应用进程首先调用 close(),称该端执行“主动关闭”(active close)。该主动端的 TCP 于是发送一个 FIN 分节,表示数据发送完毕。其序列号Seq=X(等于前面已经传过来的数据的最后一个字节的序号加1),此时被动端进入FIN-WAIT-1(终止等待1)状态。
2. 被动端收到主动端发来的连接终止报文,发回确认报文ACK=X+1,并且带上自己的序列号Seq=Z,此时,被动端就进入了CLOSE-WAIT(关闭等待)状态。#注:此时TCP服务器通知应用层的应用进程主动端向被动端的方向释放了,这时候处于半关闭状态,即主动端已经没有数据要发送了,但是被动端若再发送数据,主动端依然接收。这个半关闭状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3. 主动端收到被动端发回的确认字段后,此时,主动端就进入FIN-WAIT-2(终止等待2)状态,等待被动端发送连接终止报文(在这之前主动端还需接受被动端发送的最后的数据)。待被动端将最后的数据发送完毕后,就向主动端发送连接终止报文,FIN=1,ACK=X,由于先前在半关闭状态时服务器很可能又发送了一些数据,因此假定此时的序列号为Seq=Y。此时,被动端就进入了LAST-ACK(最后确认)状态,等待主动端的确认。
4. 主动端收到被动端的连接终止报文后,必须发出确认,ACK=Y,而自己的序列号是Seq=X(此时主动端进入TIME-WAIT(时间等待)状态。注意此时TCP连接还没有终止,必须经过2∗MSL(最长报文段寿命)的时间后,才进入CLOSED状态)。而被动端只要收到了主动端发出的确认,立即进入CLOSED状态。可以看到,被动端结束TCP连接的时间要比主动端早一些。

20170607205756255.gif

动图很形象的表示了这一过程(来源:https://blog.csdn.net/qzcsu/article/details/72861891

UDP

UDP (User Datagram Protocol)协议,即用户数据报协议,是 OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP 与 TCP 协议一样用于处理数据包,但 UDP 是一种无连接的协议,不保证可靠性。UDP 有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP 用来支持那些需要在计算机之间传输数据的网络应用。

TCP 和 UDP 的区别

  1. TCP 面向连接(如打电话要先拨号建立连接);UDP 是无连接的,即发送数据之前不需要建立连接
  2. TCP 提供可靠的服务。UDP 尽最大努力交付,即不保证可靠交付。也就是说,通过 TCP 连接传送的数据,无差错,不丢失,不重复,且按序到达,TCP 通过校验和,重传控制,序号标识,滑动窗口、确认应答等机制实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
  3. UDP 具有较好的实时性,工作效率比 TCP 高,适用于对高速传输和实时性有较高的通信或广播通信。
  4. 每一条 TCP 连接只能是点到点的;UDP 支持一对一,一对多,多对一和多对多的交互通信。
  5. TCP 对系统资源要求较多,UDP 对系统资源要求较少。
评论已关闭