《图解TCP/IP》阅读笔记(第六章 6.1、6.2)—— 传输层的作用、端口号

news2024/9/22 13:46:05

第六章 TCP与UDP

TCP与UDP和赫赫威名,在此前几章已略有耳闻。

TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。

首先,我们先来回顾一下传输层的定义。

上一章中提到过,IP中有一个协议字段,用于标识网络层的上一层采用的究竟是那种传输层协议。根据这个协议号,就可以识别IP传输的数据部分究竟是TCP的内容,还是UDP的内容。

同样,TCP与UDP为了标识自己传输的数据部分究竟应该发送给哪个应用,也设定了这样一个编号。这个编号就是端口号。

书中给出了一个例子,大概意思就是,地址就是IP,但是即使知道了地址,却不知道包裹是寄给这家中哪个人的,而端口号就起到这样一个作用:识别传输层的上一层,即应用层中具体是哪个应用接收数据。就好比“姓氏”一般,知道了姓氏,就知道包裹具体要给谁。

此处要提到的一点是,此处的端口是路由器、交换机等设备上网卡的端口有所不同,且一个应用程序可以使用多个端口。

TCP/IP的众多应用协议大多以客户端、服务端的形式运行。作为服务器的程序有必要提前启动,准备接收客户端的请求。而服务端程序,在UNIX系统中叫做守护进程。例如HTTP的服务端程序是httpd(HTTP守护进程),而ssh的服务端程序则是sshd(SSH守护进程)。在UNIX系统中并非需要一个一个的启用这些守护进程,而是启动一个超级守护进程inetd(互联网守护进程)。该进程收到客户端的请求后,会fork新的进程,并转换(exec)为sshd等各个守护进程。

确定一个请求究竟发给那个服务端(守护进程),可以通过所收到的数据包的目标端口号轻松识别。例如,使用TCP请求建立连接时,如果目标端口号为22,则转给sshd;如果是80,则转给httpd。然后,这些守护进程会继续对该连接上的通信传输进行处理。

以下图为例,传输协议的数据被传递给HTTP、TELNET、FTP等应用层协议。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3UU5y7JH-1671352081521)(C:\Users\19041\AppData\Roaming\Typora\typora-user-images\image-20221218115717827.png)]

刚刚讲了讲,传输层的不同之处和作用,那么接下来就要具体讲讲TCP和UDP了。

其实传输层不仅只有这两种协议(想想也不可能),但是其中最具有代表性的协议莫过于TCP和UDP。

首先介绍TCP,TCP面向连接,是一种可靠的流协议。使用TCP发送消息时,虽然可以保证发送的顺序,但仍是犹如没有间隔的数据流发送给接收端。其实行“顺序控制”或者“重发控制”机制,还具备“流控制”、“拥塞控制”等众多功能。

其次是UDP,这是一种不可靠的数据报协议,传输速度通常比TCP快得多。细微的处理会交由上层应用去完成,UDP确保发送消息的大小,但不确保消息一定会送达,因此应用需要根据自己的需求进行重发处理。

这两种协议孰优孰劣,自然难以区分,要根据应用场景的不同选择不同的传输协议。TCP用于在传输层有必要实现可靠传输的情况。而UDP则主要用于那些对高速传输和实时性有较高要求的通信或者广播通信。以通话为例,使用TCP,数据在传输中途丢失则会被重发,这样就难以流畅的传输通话人的声音。但是UDP则不同,即使有部分数据丢失,也只会影响一小部分通话,对于整体的通话过程并无大碍。此外,在多播和广播通信中也要使用UDP,此前所讲的DHCP,和此后要接触的RIP等基于广播的协议,依赖的就是UDP。

此处,书中提到了套接字(Socket)的概念。在使用UDP或者TCP时,会使用到操作系统提供的类库,又称为API(Application Programming Interface,应用编程接口)。

而TCP、UDP的API中,广泛使用到的就是套接字(socket)。其原本由BSD UNIX开发,后被移植到Windows的Winsock以及嵌入式操作系统中。应用可以根据套接字,设置对端的IP地址、端口号,实现数据的发送与接收,见下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8YTARrNk-1671352081522)(C:\Users\19041\AppData\Roaming\Typora\typora-user-images\image-20221218124301935.png)]

6.2 端口号

让我们回顾一下,数据链路中的地址为MAC地址,IP中的地址为IP地址。

前者用来识别同一链路中不同的计算机,后者用来识别TCP/IP网络中互联的主机和路由器。

那么在传输层中有没有类似地址的概念呢?其实我们心中已经有了答案,那就是端口号。

端口号用于识别同一台计算机中进行通信的不同应用程序,因此也被成为程序地址。如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-79UfsA0X-1671352081522)(C:\Users\19041\AppData\Roaming\Typora\typora-user-images\image-20221218152255600.png)]

在一个通信过程中,仅凭目标端口号是远远不够的。书中给出了这样一个场景,见下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vkddCFN8-1671352081523)(C:\Users\19041\AppData\Roaming\Typora\typora-user-images\image-20221218152942141.png)]

客户端A想要与服务器发生通信①和②,其目标端口一致,都是服务器的80号端口。那么服务器如何区分这两个通信过程呢?答案也很简单,根据客户端A的源端口。比如同时打开两个Web浏览器,同时访问服务器上不同的资源。

而图中还有一个通信③,其目标端口与源端口完全一致,这时如何与通信①做区分呢?答案也很简单,根据IP地址就可以了(讲到这仿佛有些戏谑,仿佛前面的内容没怎么看过一样)。

另一种情况,就是IP的地址和源端口一模一样,但协议号不同。这种情况下,也会被认为是两个不同的通信。

这里要说明的意义就是,只有{源IP,目标IP,协议号,源端口号,目标端口号}五元完全一致的,才会被认为是统一通信。通信控制中的IntServ就是如此判断的。

那么,电脑上的应用那么多,端口号如何确定呢?需要人为分配吗?

实际上,端口号的分配有很多种方法。之前我们已经提到一种,就是为什么Http要用80号端口呢?因为这是标准,也叫做静态方法,指每个应用都有其指定的端口号。例如HTTP、TELNET、FTP等广为使用的应用协议中所使用的端口号就是固定的。这些端口号也被称为知名端口号(Well-Known Port Number),其一般由0~1023的数字分配而成,可以查表进行查询。应用程序应当避免使用知名端口号进行既定目的之外的通信,以免产生冲突。

除了知名端口号外,还有一些端口号也被注册过,分布在1024~49151的数字之间。

另一种则是时序分配法,也称作动态分配法,端口号取值为49152~65535。这种情况下,服务端有必要确定监听端口号,但是接受服务的客户端没必要确定端口号。这种方法下,客户端应用程序可以完全不用自己设置端口号,全权交给操作系统进行分配。操作系统的分配按时可以在之前分配号码的基础上加1,这种方式最简单。

根据这种动态分配端口号的机制,即使同一个客户端程序发起多个TCP连接,识别这些连接的五元组也不会完全相同。

按照五元组的说法,不同的传输协议,其实是可以使用相同的端口号的。数据到达IP层后,会先检查IP首部中的协议号,再传给相应协议的模块。如果是TCP则传给TCP,如果是UDP则传给UDP模块去做端口号的处理。

另外,那些知名端口号,则和传输层协议没有关系,只要端口一致,就分配给同一程序。例如,53号端口,无论协议是TCP还是UDP,都会用于DNS服务,而80号端口则会用于HTTP服务。

本篇小结

从本篇文章开始,就正式进入第六章的内容。

本篇简要介绍了什么是传输层,其被设立的目的是为了便于应用层找到通信的具体应用程序。以及点出通信过程中,使用的TCP、UDP有什么不同之处。

之后,也是方便后续的内容,简单提了提什么是端口号,以及如何根据端口号识别应用。最后一部分,讲了讲确定端口号的两种方式:静态分配与动态分配。

本篇的内容并不复杂,记忆点也不多,通读一遍有所了解即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

猿如意|程序员的如意神器之【chat GPT】测评。

chat GPT测评1、使用感受2、功能展示3、期待优化地方3.1 猿如意网页版搜索功能3.2 chat GPT3.2.1 测试抢券才能体验3.2.2 聊天体验1、使用感受 首先,需要对猿如意进行点赞。 正如宣传语所说,猿如意,程序员的的如意兵器,这句话&am…

[附源码]Node.js计算机毕业设计个性化旅游线路推荐系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

WordCloud库简介与使用示例

今天继续给大家介绍Python相关知识,本文主要内容是WordCloud库简介与使用示例。 一、WordCloud库简介与安装 WordCloud是一款Python的第三方库,可以用于生成词云。词云可以以词语为基本单位,然后根据词语的出现频率确定词语的大小&#xff…

linux red hat 8.0 root密码破解

简介: root用户是linux用户最大权限的用户,如果不慎将其密码忘记是不可直接更改的,只能通过破解的方式来重置root密码。 linux系统的启动过程: 1 开机自检(POST),初始化部分硬件 2 搜素可用…

嵌入式从业者应知应会知识点 - 索引

大家好,我是痞子衡,是正经搞技术的痞子。本系列痞子衡给大家介绍的是嵌入式从业者应知应会知识点。 嵌入式开发需要掌握的知识点非常多,不同的技术方向有不同的知识侧重点,本系列试图整理总结嵌入式开发(尤其是软件&a…

毕业设计 stm32车牌识别 - 单片机 嵌入式 物联网 机器视觉

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码5 最后0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长…

juc-3-volatile

目录 1 多线程下变量的不可见性及解决方案 2 不可见性解决方案 2.1 加锁方式解决 2.2 使用volatile关键字 2.3 while(true)速度快调用本地线程内存,加延时即可访问主内存的共享变量 3 volatile不保证原子性以及解决方案 3.1 案例 volatile 验证不是原子性 3.…

详细解析预处理

预处理一.总体概述1.注释去除2.宏替换二.宏定义1.数值宏常量2.字符串宏常量3.用宏定义注释符号4.用宏定义表达式(难点)1.第一种情况2.第二种情况5.#undef(宏的有效范围)1.两个问题2.#undef的使用3.一段代码的理解三.条件编译1.#if…

基于nodejs商城系统开发与设计(项目源码+论文设计+ppt答辩+视频录制)

网上购物商城系统以弥补传统购物方式的弊端。在目前的商城里,如果采用网上商城方式,用户购物时就不需要到店里面排队,这样不仅能实时地了解商品的特色,而且方便了顾客,同时也减轻了商城的服务压力。随着WLAN技术的普及…

计算机毕设Python+Vue新文道考研机构在线教学辅导系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

python的panda库读写文件

目录 1.读取excel文件 (1)语法 (2)实例 2.读取cvs文件 (1)语法 (2)实例 3.读取txt文件 (1)语法 (2)实例 4.写入文件 &…

【driver.js】基础使用

介绍 driver.js: 轻量级、无依赖性、普通的 JavaScript 引擎,可在整个页面上推动用户的注意力; 🔆突出显示页面上的任何(字面上的任何)项目✋阻止用户交互📣 创建功能介绍👓为用户添加焦点转移器&#x1f6…

【Flask框架】——21 Flask上下文

上下文:即语境,语意,在程序中可以理解为在代码执行到某一时刻时,根据之前代码所做的操作以及下文即将要执行的逻辑,可以决定在当前时刻下可以使用到的变量,或者可以完成的事情。 Flask中有两种上下文&…

UDP的报文结构和注意事项

UDP的报文结构和注意事项一、传输层协议二、UDP报文结构一、传输层协议 传输层实现了端到端之间的传输,重点关注的是起点和终点。 核心的协议有两个: 二、UDP报文结构 大部分教科书给出的报文结构都是这样的: 其实只是为了排版方便~~ 实…

关于进程的几个问题

作者:~小明学编程 文章专栏:JavaEE 格言:热爱编程的,终将被编程所厚爱。 今天给大家分享几个关于进程的小问题 1.什么是进程? 2.进程是怎么管理的? 3.进程里面的PCB里都有啥? 4.进程的调度是怎…

解释器模式

文章目录解释器模式1.解释器模式的本质2.何时选用解释器模式3.优缺点4.解释器模式的结构5.实现计算器加减操作解释器模式 当想解析一个文件或者其他内容时,可以根据规律自己定义一种文法,并定义一个解释器,然后解析这种文法,以达到…

MATLAB-自定义函数拟合(fittype-高斯拟合)

在回归拟合分析时,一般情况下,MATLAB会直接提供常用的类型,用fittype创建拟合模型,至于MATLAB具体提供了哪些模型,参见帮助“List of library models for curve and surface fitting”,如果库中没有自己想要的拟合表达式形式,可以自己进行定义,具体介绍如下: 1. fitty…

嵌入式:ARM间接寻址、变址寻址与多寄存器寻址

文章目录寄存器间接寻址基址加偏址寻址(变址寻址)偏移地址传送数据类型块拷贝寻址(多寄存器寻址)块拷贝寻址示例寄存器间接寻址 寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如…

尚医通 (三十七) --------- 定时任务与统计

目录一、就医提醒1. 搭建定时任务模块 service-task2. 添加就医提醒处理二、预约统计1. ECharts2. 获取医院每天平台预约数据接口3. 添加 feign 方法4. 搭建 service-statistics5. 前端展示一、就医提醒 我们通过定时任务,每天 8 点执行,提醒就诊。 1.…

[附源码]Python计算机毕业设计Django校园招聘系统设计

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…