计算机网络传输层TCP/UDP/Socket及之间的联系和区别

再开始之前大家先了解一下我们谈及几个容易让人误解的关键词:
1.客户端:有的书上在讲解传输层的时候把发起连接请求的主机称为客户端。这里的客户端其实就是指主机,并不是客户端进程(应用层的叫法)。
2.服务器/服务端:在传输层上的服务器是指接收请求连接的主机。这个跟我们认识的通过http响应的服务端是不同的。它就是指一台主机。 说到这里,我们正式开始:

一、传输层协议TCP/UDP基本概念

在TCP/IP体系结构中,传输层的作用是向应用层提供端到端的可靠传输。这里的端到端的传输是指,在一个TCP连接中,只有服务器端和客户端之间进行通信。传输层使用两种协议,即TCP和UDP,TCP是面向连接的可靠性传输协议。UDP是面向无连接的不可靠传输协议。可靠传输和不可靠传输是指在不同的网络传输环境假设下的两种传输方式。

1.TCP

TCP通过下列的方式提供端到端的可靠传输。

-数据分割。TCP将来自应用层的数据分割成固定大小的数据块,并传递给网络层,这些数据块称为报文。

  • 定时重传。当TCP发出一个报文后,立即启动定时器,并等待目的端确认是否收到这个报文,如果发送方不能及时收到确认是否收到这个报文,如果发送方不能及时收到确认,TCP将重发这个报文。
  • 连接确认。当TCP接收方收到TCP发送端的数据是,他将发送一个确认。
  • 校验和。TCP保存首部和数据的校验和。其目的是检测数据在传输过程中的变化。如果接收到报文的校验和有误,TCP将丢弃这个报文,并不发送收到此报文的确认信息,致使发送端重发此报文。
  • 顺序化收到的报文。由于TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此,接收端将收到的TCP报文段重新排序,并以正确的顺序将数据交给应用层。
  • 丢弃重复的数据。TCP的接收端将丢弃重复发送的报文。
  • 流量控制。TCP传输的双方都有固定大小的缓存空间。TCP传输允许发送接收端缓存空间可以接纳的报文数量。但是,当TCP传输发生在高速设备和低速设备之间时,将产生低速设备缓存空间用尽,即缓存空间溢出的现象。此时,TCP将向高速设备发出抑制报文的要求,等待低速设备处理完成收到的报文后,再开始接收新的报文。

2.用户数据报协议UDP

UDP是面向无连接的。不可靠的传输协议。

在使用UDP进行网络传输的过程中,UDP只负责数据传输。首先,UDP只负责将数据发出,不保证数据一定到达目的;如果传输中出现故障,UDP不负责重传数据,数据是否重传将由应用程序来控制。其次,当户数正确到达后,UDP协议的接收方不负责发送“数据已经到达”的确认信息。确认信息将由接受党的应用程序负责。

UDP在网络层使用IP层提供的不可靠的数据报服务。仅通过端口号指明发送程序端口和接收程序端口,不保证数据包一定到达目的的主机。因此,对应用层而言,UDP提供的数据传输服务被称为是无连接的。不可靠的用户数据报服务。

当然UDP的存在也是有原因的:

在一些特定环境下,UDP是有优势的。例如,要发送的信息较短,不值得在主机之间建立一次连接。另外,面向连接的通信只能在两个主机之间进行,若要实现多个主机之间的一对多或多对多的数据传输,即广播或多播,就需要使用UDP协议。由于UDP的特性(面向无连接的协议),因而具有资源消耗小,处理速度快的优点,所以通常的音频(IP电话),视频和普通数据在传输使用UDP较多,因为他们即使偶尔丢失一两个数据包也不会对接收结果产生太大的影响。例如聊天用的ICQ使用的就是UDP协议。

二、TCP和UDP的区别

1.TCP是面向连接的。UDP是面向无连接的即发送数据前不需要先建立链接。

面向连接是指在报文传输之前,首先在发送端和接收端之间建立一个逻辑的传输链路,当链路成功建立后在传输报文,当所有报文的传输完成后,撤销已经建立的逻辑链路。也就是说在客户端和服务端在彼此交换数据之前,必须首先建立一个TCP连接。这很像普通的电话系统,当地那话两端的通话人确认电话联通后,双方才开始讲述通话的内容。

面向无连接是指无须再发送端和接收端之间建立链接,每个报文独立发送。

当然这里所说的面向连接和面向无连接并不是指TCP/UDP客户端和服务端不进行连接,而是说针对应用层某些应用在通信时端口之间是否相连接。

2**.TCP提供可靠的服务**,也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达,UDP尽最大努力交付,即不保证可靠交付。

可靠传输是指当网络中传输的信息相对于网络的带宽而言比较大时,为了保证信息正确到达,必须采取一系列的措施来实现可靠传输,例如,采取纠错,确认和控制重传等机制。

相反不可靠传输是指当网络中传输的信息相对于网络的带宽而言比较小时,在纯属过程中出错的概率也比较小。此时,如果每个信息都确认,反而增加了传输延时。

3.TCP是面向字节流,UDP面向报文,并且网络出现拥塞不会使得发送效率降低(因此会出现丢包,对实时的应用比如ip电话和视频会议等。)

4.TCP只能是1对1的,UDP支持1对1,1对多。

5.TCP的首部较大为20字节,而UDP只有8字节。因为TCP首部保存了对数据的校验。确认其是否正确的传输。

看到这里我想大家对TCP/UDP有了一个大概的认识,接下来我们介绍一种区别于TCP协议,但本质上又是使用TCP协议的东西Socket

三、socket

1.套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协 议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以 和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

2.建立socket连接(其实就是应用了socket技术的TCP协议)

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。

套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户 端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

怎么理解Socket呢?一句话:它本质上是TCP协议,但跟TCP协议的区别就是建立连接的方式。我们上面提到了Socket的连接方式是通过套接字的方式建立连接的。这就过程就相当于一个特务在大街上一直喊着接头暗号,而另一个有接头暗号的特务获取了敌人的秘密信息之后拿着接头暗号去找这个大喊暗号的特务,一旦这种暗号对接上,双方就互相识别了对方的身份,于是开始了愉快的聊天。怎么样,理解了吗?

那么TCP又是怎样的一种建立连接的方式呢?没错,就是我们常听过的TCP的三次握手,下面是建立连接的图例:具体的讲解我们放到下一篇。
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值