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

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

一些基础知识

  • IP地址:用来标识网络中的一个通信实体的地址。通信实体可以是计算机、路由器等。 比如互联网的每个服务器都要有自己的IP地址,而每个局域网的计算机要通信也要配置IP地址。目前主流使用的IP地址是IPV4,但是随着网络规模的不断扩大,IPV4面临着枯竭的危险,所以推出了IPV6。
  1.  IPV4:32位地址,并以8位为一个单位,分成四部分,以点分十进制表示,如192.168.0.1。因为8位二进制的计数范围是00000000---11111111,对应十进制的0-255,所以-4.278.4.1是错误的IPV4地址。
  2. 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 使用的流量控制协议是可变大小的滑动窗口协议。如下图所示:

  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()方法即可产生挥手操作。

  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连接的时间要比主动端早一些。

è¿éåå¾çæè¿°

动图很形象的表示了这一过程(来源: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对系统资源要求较少。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值