【1.7.1】传输层协议(TCP/UDP)

最近在认知防火墙的时候,不断的跳出来tcp,udp的概念;本着遇到问题,就理解问题的原则,先来简单了解一下这几个名词到底有什么区别

都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。

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

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

  • 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
  • 在传输层中有TCP协议与UDP协议。
  • 在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。

HTTP是应用层协议,TCP是传输层协议! 数据包在网络传输过程中,HTTP被封装在TCP包内!!

一、传输层基本定义

传输层(Transport Layer)是 OSI 协议的第四层协议,是唯一负责总体的数据传输和数据控制传输层的一层协议。传输层提供端到端的交换数据机制,它不仅对会话层、表示层和应用层这高三层提供可靠的传输服务,还对网络层提供可靠的目的地站点信息。

为了更好地学习和了解传输层,本节将介绍其基本知识。通过学习这些基本知识,可以更好地掌握传输层中涉及的相关概念,并理解传输层的作用。

传输层的作用

网际层提供了主机之间的逻辑通道,即通过寻址的方式,把数据包从一个主机发到另一个主机上。如果一个主机有多个进程同时在使用网络连接,那么数据包到达主机之后,如何区分它属于哪个进程呢?为了区分数据包所属的进程,就需要使用到传输层。

传输层提供了应用进程之间的端到端连接,其作用如下:

  • 为网络应用程序提供接口。
  • 为端到端连接提供流量控制、差错控制、服务质量等管理服务。
  • 提供多路复用、多路分解机制。

二、面向连接和无连接

针对不同情况下的数据质量保证,传输层提供了两种数据传输协议类型,分别为面向连接与无连接。下面介绍这两种类型的概念和

2.1 面向连接 – TCP(传输控制协议)

下面以李四与张三的对话来说明面向连接的工作原理,如图所示。

其中,李四向张三说的每一句话都要得到张三的回应,然后才会说下一句话,直到李四说完最后一句话。

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

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

面向连接的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协议面向连接的特性导致了一些额外的通信量的产生。

2.2 无连接 – 面向非连接的UDP协议

无连接是指通信双方不需要事先建立通信线路,而是把每个带有目的地址的包(报文分组)发送到线路上,由系统选定路线进行传输,不需要目标方进行回复。

下面以李四与张三的对话来说明无连接的工作原理,如图所示。

从图中可以看到,李四向张三说出了要说的话,而不需要得到张三的回复。

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

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

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

  • TCP UDP
    是否连接 面向连接 面向非连接
    传输可靠性 可靠 不可靠
    应用场合 传输大量的数据,对可靠性要求较高的场合 传送少量数据、对可靠性要求不高的场景
    速度

三、端口和套接字

为了区分同一个主机上不同应用程序的数据包,传输层提供了端口和套接字概念。下面介绍端口和套接字的作用。

3.1 端口的作用

  • 在数据链路层中,通过 MAC 地址来寻找局域网中的主机;
  • 在网际层中,通过 IP 地址来寻找网络中互连的主机或路由器。
  • 在传输层中,需要通过端口进行寻址,来识别同一计算机中同时通信的不同应用程序。

3.1 常用端口

端口号用来识别应用程序。

常用 TCP 端口号和对应的应用程序如表所示。

常见的 TCP 端口及对应的应用程序

应用程序	端口号	简要说明
tcpmux	1	TCP 端口服务多路复用器
Echo	7	回显
discard	9	抛弃或空
systat	11	用户
daytime	13	时间
netstat	15	网络状态
qotd	17	每日引用
chargen	19	字符发生器
ftp-data	20	文件传输协议数据
FTP	21	文件传输协议控制
ssh	22	安全 Shell
Telnet	23	终端网络连接
SMTP	25	简单邮件传输协议
new-fe	27	NSW 用户系统
time	37	时间服务程序
name	42	主机名称服务程序
domain	53	域名服务程序(DNS)
gopher	70	Gopher 服务
finger	79	Finger
http	80	WWW 服务
link	87	TTY 链接
supdup	95	SUPDUP 协议
pop2	109	邮局协议2
pop3	110	邮局协议3
auth	113	身份验证服务
uucp-path	117	UUCP 路径服务
nntp	119	USENET 网络新闻传输协议
nbsession	139	NetBIOS 会话服务
IMAP4	143	因特网消息访问协议4
BGP	179	边界网关协议
IRC	194	互联网中继聊天
SLP	427	服务位置协议
HTTPS	443	加密传输协议 TLS/SSL
dantz	497	备份服务
rsync	873	文件同步

常见的UDP端口号及对应的应用程序如表所示。

常见的 UDP 端口及对应的应用程序

应用程序	端口号	简要说明
Echo	7	回显
discard	9	抛弃或空
systat	11	用户
daytime	13	时间
qotd	17	每日引用
chargen	19	字符发生器
time	37	时间服务程序
domain	57	域名服务程序(DNS)
bootps	67	引导程序协议服务 /DHCP
bootpc	68	引导程序协议客户端 /DHCP
tftp	69	简单文件传输协议
ntp	123	网络时间协议,用于时间同步
nbname	137	NetBIOS 名称
snmp	161	简单网络管理协议
snmp-trap	162	简单网络管理协议 trap
syslog	514	系统日志服务

3.3 套接字

应用层通过传输层进行数据通信时,TCP 和 UDP 会遇到需要同时为多个应用程序进程提供并发服务的问题。

多个 TCP 连接或多个应用程序进程可能需要通过同一个 TCP 协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与 TCP/IP 协议交互提供了称为套接字(Socket)的接口,区分不同应用程序进程间的网络通信和连接。

套接字是由主机的 IP 地址加上主机上的端口号组成的地址。例如,套接字地址 101.102.103.104:21,表示指向 IP 地址为 101.102.103.104 的计算机的 21 端口。

3.4 多路复用和多路分解

在网络上主机与主机之间的通信实质上是主机上运行的应用进程之间的通信。在进行通信时,往往同时运行多个应用程序。

为了能够让一个计算机同时支持多个网络程序,并且同时保持与多台计算机进行连接,就需要使用多路复用和多路分解,其含义如下:

  • 多路复用:从源主机的不同套接字中收集数据块,并为每个数据块封装首部信息,从而生成报文段,然后将报文段传递到网络层中。
  • 多路分解:将传输层报文段中的数据交付到正确的套接字。

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn