【网络通信基础与实践番外一】多图预警之图解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来说也能够进行分解。

相关推荐
hzyyyyyyyu2 小时前
内网安全隧道搭建-ngrok-frp-nps-sapp
服务器·网络·安全
刽子手发艺2 小时前
WebSocket详解、WebSocket入门案例
网络·websocket·网络协议
速盾cdn6 小时前
速盾:CDN是否支持屏蔽IP?
网络·网络协议·tcp/ip
yaoxin5211236 小时前
第二十七章 TCP 客户端 服务器通信 - 连接管理
服务器·网络·tcp/ip
内核程序员kevin6 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
PersistJiao8 小时前
Spark 分布式计算中网络传输和序列化的关系(一)
大数据·网络·spark
黑客Ash10 小时前
【D01】网络安全概论
网络·安全·web安全·php
->yjy10 小时前
计算机网络(第一章)
网络·计算机网络·php
摘星星ʕ•̫͡•ʔ11 小时前
计算机网络 第三章:数据链路层(关于争用期的超详细内容)
网络·计算机网络