【网络通信基础与实践番外一】多图预警之图解UDP和TCP前置知识

参考大佬的文章https://www.cnblogs.com/cxuanBlog/p/14059379.html

一、宏观架构中的传输层

在计算机中,任何一个可以交换信息的介质都可以称为端系统。计算机网络的运输层则负责把报文从一端运输到另一端,运输层实现了让两个互不相关的主机进行了逻辑通信的功能,看起来像是让两个主机相连一样。

数据包的结构如上图所示,数据包经过每层后,该层协议都会在数据包附上包首部,而当数据包经过传输层之后,会为其附上TCP首部,首部包含着源端口号和目的端口号。在发送端运输层将从发送应用程序接收到的报文转化为运输层分组,分组也被称为报文段(segment)。运输层一般会将报文段进行分割,分成较小的块,为每一块加上运输层首部并将其向目的地发送。

在运输层发送的过程中,可以选择的运输层协议主要有TCP和UDP。

二、谈谈一些基础概念

1、TCP和UDP

2、套接字

(1)socket的概念

socket实际上与TCP/IP没有必然联系,socket的出现只是方便了TCP/IP的使用 。可以直接使用下面Socket API的这些方法

(2)socket API方法

create():创建一个socket

bind():socket的标识,一般用于绑定端口号

listen():准备接收连接

connect():准备充当发送者

accept():准备充当接收者

write():发送数据

read():接收数据

close():关闭连接

(3)套接字处理过程

1是指调用create方法创建通信链路中的端点,创建完成后会返回描述该套接字的套接字描述符

2是指调用bind方法应用程序通过套接字描述符将唯一的名称绑定在套接字上,服务器必须绑定一个名称才能在网络中访问

3是指调用listen方法表示客户端愿意等待连接的意愿

4是指客户端应用程序调用connect方法发起与服务器的连接请求

5是指服务器应用程序使用accept API接受客户端连接请求

6是指在流套接字之间建立连接后,客户端和服务器之间就可以发起read/write API调用了

7是指当服务器或者客户端要停止操作时,调用close API释放套接字获取的所有系统资源

但是注意socket API不属于通信模型,socket API允许应用程序与传输层和网络层进行交互

为了方便资源的使用,提高机器的性能、利用率和稳定性等原因,我们的计算机都有一层软件叫做操作系统,它用于帮助我们管理计算机可以使用的资源,当我们的计算机要使用一个资源的时候,可以向操作系统申请,再由操作系统为我们分配和管理资源。通常我们要访问一个内核设别或者文件时,程序可以调用系统函数,系统就会为我们打开设备或者文件,然后返回一个文件描述符fd(或者称为ID,是一个整数),我们要访问该设备或者文件,只能通过你该文件描述符。

同理当我们使用网络时,要使用到对应的操作系统的操作和网络设备,所以我们可以向操作系统申请,然后系统会为我们创建一个套接字socket,并返回这个socket的ID,以后我们的程序要使用网络资源,只要向这个socket的编号ID操作即可、而我们每个网络进程至少对应着一个socket,向socket中的ID写数据,相当于是向网络发送数据,向socket中读数据,相当于是接收数据。

(4)端口

端口号是16位的非负整数,范围是0~65535之间,分为三种,

第一种是周知/标准端口号,范围是0~1023;

第二种是注册端口号,范围是1024~49151;

私有端口号,范围是49152~65535;

当一个报文到达服务器时,通过端口号来区分不同的应用程序,但是仅仅依靠端口号来确定某一条报文是不够的。互联网上一般使用源IP地址、目标IP地址、源端口号、目标端口号来进行区分。若果其中的某一项不同,就认为是不同的报文段。

而确认端口号的方法有两种,

第一种是标准既定的端口号,例如SSH使用22标识,FTP采用21标识,HTTP采用80标识;

第二种是时序分配的端口号,凭借操作系统为每个应用程序分配互不冲突的端口号;

(5)多路复用和多路分解

多路复用就是指从多个socket接收数据,为每块数据封装上头部信息,生成报文段,交给网络层

多路分解就是指依据头部信息将收到的报文段交给对应的socket,即不同的进程

如上图所示,多路复用体现在从主机1和主机3的不同的socket接收数据,并为每块数据封装上头部信息生成报文段。

多路分解体现在将接收到的不同的报文段交给对应的socket,即不同的进程。

(i)无连接的多路复用和多路分解

主要用于UDP协议,UDP套接字是一个二元组,这个二元组包含目的IP和目的端口,主机在收到UDP段后检查段中的目的端口号,将UDP段导向绑定在该端口号的socket。

(ii)面向连接的的多路复用和多路分解

TCP的socket用四元组来标识:源IP、源目端口号、目标IP、目标端口号

接收端利用所有的四个值将报文导向合适的socket,服务器可能支持多个TCP socket,每个socket用自己的四元组唯一标识

如上图所示,主机C向主机B发起了两个HTTP请求(具有着不同的源端口号),主机A向主机B发起了一个HTTP请求,主机A、B、C都有自己唯一的IP地址,当主机C发出这两个HTTP请求后,正因为这两个HTTP请求具有着不同的源端口号所以主机B能够分解这两个HTTP连接。而对于主机A和主机C来说,这两个主机有着不同的IP地址,所以对于主机B来说也能够进行分解。

相关推荐
你无法关注此用户35 分钟前
华为设备OSPF配置与实战指南
运维·网络
会飞的土拨鼠呀1 小时前
Linux 测试本机与192.168.1.130 主机161/udp端口连通性
linux·运维·udp
试剂界的爱马仕1 小时前
软珊瑚成分 CI-A:靶向口腔癌细胞的 “氧化利剑” 与 ERK 密码
网络·人工智能·科技·机器学习·ci/cd·ai写作
一只小松许️1 小时前
UDP包大小与丢包率的关系:原理分析与优化实践
网络协议·udp·智能路由器
gadiaola1 小时前
【计算机网络】第3章:传输层—面向连接的传输:TCP
网络·网络协议·tcp/ip·计算机网络
安全系统学习4 小时前
【网络安全】漏洞分析:阿帕奇漏洞学习
java·网络·安全·web安全·系统安全
王火火(DDoS CC防护)4 小时前
UDP与TCP的区别是什么?
网络协议·tcp/ip·udp
小邓儿◑.◑4 小时前
C++初阶 | 模板
网络·c++·windows
链上Sniper4 小时前
Python 区块链开发实战:从零到一构建智能合约
开发语言·网络·python·架构·区块链·php·智能合约
领世达检测V133529092494 小时前
「EN 18031」访问控制机制(ACM - 1):智能路由器的安全守卫
网络·智能路由器