初始网络编程

news2024/11/9 5:14:36


专栏简介: JavaEE从入门到进阶

题目来源: leetcode,牛客,剑指offer.

创作目标: 记录学习JavaEE学习历程

希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长.

学历代表过去,能力代表现在,学习能力代表未来! 


目录

1.网络发展史

1.1 独立模式

1.2 网络互联

1.3 局域网

1.4 广域网

2.网络通信基础

2.1 IP地址

2.2 端口号

2.3 认识协议

2.4 五元组

2.5 协议分层

2.6 封装和分用


1.网络发展史

1.1 独立模式


1.2 网络互联

随着时代的发展 , 越来越需要计算机之间共享通信 , 数据和软件 , 即多个计算机协同完成任务 , 于是有了网络互联.

网络互联:将多台计算机连在一起完成数据共享.

数据共享的本质是网络传输 , 即计算机之间通过网络来传输数据 , 也称网路通信.

根据网络互联的规模不同 , 可以分为广域网局域网.


1.3 局域网

局域网即 Local Area Network 简称LAN.局域网内的主机之间可以进行网络通信 , 又称内网. 但局域网和局域网之间在没有连接的情况下不能进行通信.

最初两个主机之间想要进行网络通信 , 通常采用网络直连的方式 , 但一次只能连一个电脑局限性较大.

随后出现了集线器的网络互联方式 , 但集线器没有寻址的功能 , 它会把信息同时发给相连的所有主机 , 由主机去辨认该信息是否是自己的 , 因此还是有很大的局限性.

交换机的出现解决了集线器无法寻址的缺陷 , 而且交换机相当于内置了一个号码本 , 可以精确的对应号码发送信息 , 如果发送信息时 , 号码本上没有对应的电话 , 这时才会进行广播式的发送 , 一但找到目标会立即更新号码本. 但只能组建局域网

路由器的出现解决了 , 局域网之间无法进行互联的局限.


1.4 广域网

广域网简称 Wide Area Network , 简称 WAN. 通过路由器将多个局域网组建起来构成广域网 , 广域网内部的每个局域网都是其子网.


2.网络通信基础

网络的互联的目的是进行网络通信 , 也就是网络数据传输 , 更具体一点就是 , 网络主机中的不同进程间基于网络传输数据.

那么 , 在组件网络中如何判断 , 到底是那台主机将数据传输到另一台主机上? 这时就需要IP地址.

2.1 IP地址

  • 概念:

IP地址主要用于标识网络主机 , 其他网络设备(路由器)的网络地址 , 简单来说:IP地址用于定位主机的网络地址.

  • 格式:

IP地址是一个32位的二进制数 , 通常被分割为4个"8位二进制数" , 也就是4个字节.

例如:01100100.00000100.00000101.00000110. 

通常用"点分十进制来表示" , 即 a.b.c.d 的形式(a,b,c,d 都是 0-256之间的十进制整数).

例如: 100.4.5.6

  • 特殊IP:

127.*的IP地址用于本机环回测试(loop back) , 通常是 127.0.0.1

本机环回主要用于本机到本机的网络通信(系统内部为了性能不会走网络的传输方式) , 对于网络编程而言 , 常见的开发方式都是本机到本机的网络通信.

IP地址解决了网络通信时 , 定位网络主机的问题 , 但是还存在一个问题 , 传输到目的主机后 , 由哪个进程来接收这个数据呢?这就需要端口号来标识.


2.2 端口号

概念:

在网络通信中 , IP地址用于标识主机网络地址 , 端口号可以标识主机中发送数据 , 和接收数据的进程 , 简单说: 端口号用于定位主机中的进程.

格式:

端口号是0-65535范围的数字 , 在网络通信中 , 进程可以通过绑定一个端口号 , 来发送及接收数据.

注意事项:

两个不同的进程 , 不能绑定同一个端口号 , 但一个进程可以绑定多个端口号.

一个进程启动后,系统会随机分配一个端口(启动端口)

程序代码中 , 进行网络编程时 , 需要绑定端口号(收发数据的端口) 来发送 , 接收数据.

进程绑定一个端口号后 , fork一个子进程 , 可以实现多个进程绑定一个端口号.


2.3 认识协议

有了IP地址和端口号 , 可以定位到网络中唯一一个进程 , 但还存在一个问题 , 网络通信是基于二进制0/1数据来传输 , 如何告诉对方发送的数据是什么样呢?

网络通信传输的数据类型可以有很多中: 图片,视频,文本等. 同一个类型的数据 , 格式也可能不同 , 如发送一个文本字符串 "你好,世界!" , 那么如果表示发送的数据是哪种类型?以及文本的编码格式是什么?

因此基于网络数据传输 , 需要使用协议来规定双方的数据格式

概念:

协议 , 网络协议的简称 , 网络协议是网络通信(即网络数据传输)经过的所有网络设备多必须遵从的一组约定,规则. 如怎样建立连接 , 怎样相互识别. 只有遵守这个约定 , 计算机之间才能通信交流. 通常由三要素组成:

1.语法: 即数据与控制信息的结构或格式:

  • 类似打电话时双方约定都使用普通话

2.语义: 即需要发出何种控制信息 , 完成何种动作以及作出何种响应.

  • 语义主要用来说明通信双方应当怎么做 , 用于协调与差错处理的控制信息.
  • 类似于打电话时 , 一方说: 你愁啥? 另一方说: 瞅你咋地?

3.时序 , 即事件顺序的详细说明.

  • 时序定义了何时进行通信 , 先讲什么 , 后什么 , 讲话的速度. 比如是采用同步传输还是异步传输.
  • 类似于男生和女生打电话 , 总是有男生发起通话 , 而总是男生恋恋不舍的时候 , 由女生要求结束通话.

协议(protocol)最终体现在网络上传输数据包的格式.

作用:

为什么需要协议?

就好比见网友 , 彼此协商胸口插只玫瑰花见面 , 这就是一种提前的约定 , 也可以称之为协议.

计算机之间的传输媒介是光信号和电信号. 通过"频率"和"强弱"来表示 0 和 1 这样的信息. 想要传递各种不同的信息 , 就需要约定好双方的数据格式.

计算机生成厂商 , 操作系统 , 网络硬件设备都很多 , 如果让这些不同的厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来约定一个共同的标准 , 大家都来遵守 , 这就是网络协议.

知名协议的默认端口:

系统端口号范围为 0-65535 , 其中: 0-1023 为知名端口号 , 这些端口预留给服务端程序绑定广泛使用的应用层协议 , 如:

  • 22端口 : 预留给SSH服务器绑定SSH协议
  • 21端口: 预留给FTP服务器绑定FTP协议
  • 23端口: 预留给Telnet服务器绑定Telent协议
  • 80端口: 预留给HTTP服务器绑定HTTP协议
  • 443端口: 预留给HTTPS服务器绑定HTTPS协议

Tips: 以上只是说 0-1023 范围的知名端口号用于绑定知名协议 , 但某个服务器也可以使用其他1024-65535 范围内的端口来绑定知名协议.例如: 餐厅的VIP包房是给会员使用 , 但会员也可以不坐包房 , 坐普通位置.


2.4 五元组

在TCP/IP协议中 , 用五元组来标识一个网络通信:

1.源IP: 标识源主机

2.源端口号: 标识源主机中该次通信发送数据的进程

3.目的IP: 标识目的主机

4.标识目的端口号: 标识目的主机中该次通信接收数据的进程

5.协议号: 标识发送进程和接收进程双方约定的数据格式

五元组在网络通信中类似于发快递:


2.5 协议分层

对于网络分层来说 , 往往分成几个层次进行定义.

什么是协议分层

协议分层类似于打电话时 , 定义不同的层次协议.

上述例子中 , 协议只有两层 , 但是实际的网络通信会更复杂 , 需要更多的层次.


分层的作用

分层的最大好处类似于面向接口编程 , 定义好两层之间的接口规范 , 让双方遵循这个规范来对接.

在代码中 , 类似于定义好一个窗口 , 一方为接口的实现类(提供方 , 提供服务) , 一方为接口的使用类(使用方 , 使用服务).

  • 对于使用方来说 , 并不关心提供方是如何实现的 , 只需使用接口即可
  • 对于提供方来说 , 利用封装的特性 , 隐藏了实现的细节 , 只需要开放接口即可

 这样可更好的展开和维护.


OSI七层模型:

OSI: 即Open System interconnection , 开放系统互联.

  • OSI 七层网络模型是一个逻辑上的定义和规范: 把网络从逻辑上分成了七层.
  • OSI 七层模型是一种框架上的设计方法 , 其中最主要的功能就是帮助不同类型的主机实现数据传输.
  • 它最大的优点就是将服务 , 接口协议这三个概念明确的区分开来 , 通过这七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯.

OSI 七层网络模型划分为以下七层 ,上层协议要调用下层协议(上层协议把数据交给下层继续封装) 下层为上层提供服务支持(下层协议解析好数据交给上级).

分层名称功能每层功能概览
7应用层针对特定应用的协议针对每个应用的协议
6表示层设备固有的数据格式和网络标准的数据格式的转换接收不同表示形式的信息,如文字流,图像,声音等
5会话层通信管理,负责建立和断开通信连接何时建立连接,何时断开连接以及保持多久连接?
4传输层管理两个节点之间的数据传输站在商家和客户的角度,不关心传输的过程只关心终点和起点.(上海---西安)
3网络层地址管理与路由选择

上海--西安走哪条路线,最划算

上海--苏州--西安

上海--徐州--西安

2数据链路层互联设备之间传送和识别数据帧每个站点之间做飞机还是火车....
1物理层界定连接器和网线的规格相当于修路

OSI 七层网络模型既复杂又不实用 , 所以没有落地实现.

实现组件网络时 , 只是已 OSI 七层模型设计中的部分分层 , 即以下 TCP/IP五层(或四层) 模型来实现.


TCP/IP 五层模型

TCP/IP 是一组协议的代码词 , 它还包括许多协议 , 组成了 TCP/IP 协议簇.

TCP/IP 通信协议采用了五层的层级结构 , 每一层都呼叫它的下一层所提供的的网络来完成自己的需求.

  • 应用层: 负责应用程序间沟通 , 如简单电子邮件传输(SMTP) , 文件传输协议(FTP) , 网络远程访问协议(Telnet) 等. 我们的网络编程主要针对应用层.
  • 传输层: 负责两台主机之间的数据传输. 如传输控制协议(TCP) , 能够保证数据可靠的从源主机发送到目标主机.
  • 网络层: 在IP协议中 , 通过IP地址来标识一台主机 , 并通过路由表示的方式规划出两台主机之间的数据传输路线. (路由器工作在网络层).
  • 数据链路层: 负责设备之间数据帧的传输和识别 , 例如使用网线传输还是Wifi传输?(交换机工作在数据链路层)
  • 物理层: 负责光/电信号的传递方式.(集线器工作在物理层)

由于物理层我们考虑的较少. 因此很多时候也可以称为 TCP/IP 四层模型.


网络分层对应

两台计算机通过 TCP/IP 通讯的过程如下:


2.6 封装和分用

  • 不同的协议层对数据包有不同的称谓 , 在传输层叫(segment) , 在网络层叫做数据报(datagram) , 在链路层叫做(frame).
  • 应用层数据通过协议栈发到网络上时 , 每层协议都要加上一个数据首部(报头)(header) , 称为封装(Encapsulation)
  • 首部信息中包含一些类似于首部有多长 , 载荷(payload)有多长 , 上层协议是什么....
  • 数据封装成帧后发送到传输介质上 , 到达目的主机后每层协议再剥掉相应的首部 , 根据首部中的"上层协议字段"将数据交给对应的上层协议处理.

下图为数据封装的过程:

 例如: 我们用QQ 给好友发送 hello 这个字符串.

  • 应用层: 假设一个应用层协议格式(具体的应用格式只有开发App的程序猿才知道) , "应用层数据报" 本质上就是一个遵守约定格式的字符串 , 而程序员要做的是调用系统 api 把这个应用层数据 , 交给传输层.

  • 传输层(进入系统内核) , 在传输层就是把上述应用层数据 , 构造成传输层的数据报. 传输层使用到的协议最知名的就是UTP和TCP , 假设构造 TCP 数据报(就是在应用层基础上加个TCP首部) , 这是另一个格式的字符串涉及到 源端口 和 目的端口.

 

  • 网络层: 最知名的 IP 协议 , IP协议要基于上述数据 , 打包成一个 IP 数据报. 也相当于一个字符串 , 包含了另一组信息(源 IP , 目的 IP).

  • 链路层: 最知名的协议 , 叫做"以太网". 基于上述数据还要打包成一个"以太网数据帧".

  • 物理层: 最后交给物理层 , 把上述的二进制数据转化为 电信号 / 光信号.此时就把数据真正发送出去了.

 下图为数据分用过程:

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

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

相关文章

一文全解决 数据库连接报错Communications link failure,create connection SQLException

具体报错如下: 解决思路: 当时看到数据库报错Communications link failure我就想到应该是数据库连接不上的问题,具体想了以下几种情况 1.数据库未连接 1.1过期了,mysql里有一个wait_timeout的值需要大于数据库连接池的最大超时时…

新来测试用一手Postman实现UI自动化测试拿下了大厂面试官

看到这篇文章的标题,是不是有小伙伴会感到惊讶呢? Postman不是做接口测试的吗?为什么还能做UI自动化测试呢? 其实,只要你了解Selenium的运行原理,就可以理解为什么Postman也能实现UI自动化测试了。 Sele…

Lua 错误处理

Lua 错误处理 参考至菜鸟教程。 程序运行中错误处理是必要的,在我们进行文件操作,数据转移及web service 调用过程中都会出现不可预期的错误。如果不注重错误信息的处理,就会造成信息泄露,程序无法运行等情况。 任何程序语言中&am…

Linux 权限变更操作失误,执行了 chmod -Rf 777 / 如何急救

昨天手贱,执行命令的时候输错了,结果输入了以下命令: chmod -Rf 777 /可想而知,得到的回报惊人哈哈,我现在之所以还笑的出来,是因为折腾了半天已经修复了这个问题了。 先来复盘一下问题解决的过程吧 错误…

华为交换机、路由器设备怎样配置console登录密码

华为交换机路由器设备怎样配置console密码 在对路由器交换机等网络进行管理中,为了安全起见经常需要为设备配置登录密码,尤其是使用串口线直连设备时。 console线路密码认证有两种方式:1,只配置password(密码&#x…

iTOP-RK3568开发板学习笔记(1)编译+烧录系统

迅为 RK3568 开发板学习笔记 文章目录准备开发环境复制 Linux SDK编译 Buildroot烧录固件准备开发环境 将 ITOP-RK3568 资料包中的虚拟机开发环境解压到自己的电脑上, 扩展虚拟机系统的硬盘大小,越大越好( SDK 太大了,后面有提及…

【C++】特殊类设计

​🌠 作者:阿亮joy. 🎆专栏:《吃透西嘎嘎》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉设计一个…

第九层(7):STL之list

文章目录前情回顾list概念优缺点构造函数赋值函数交换函数容器和大小操作插入操作删除操作单个数据访问反转操作排序下一座石碑🎉welcome🎉 ✒️博主介绍:一名大一的智能制造专业学生,在学习C/C的路上会越走越远,后面不…

C++——map|set2

目录 map::operator[] [ ]的实现 multimap 习题 前K个高频单词 两个数组的交集 底层结构 pair有俩个成员一个是first,一个是second 由于pair有俩个模板参数,第一个是first,一个是second map的insert参数类型是valud_type,value_type就是pair …

PNG免抠素材网,免费商用,设计师赶紧马住。

本期分享设计师必备的免抠素材网站,建议收藏! 1、菜鸟图库 https://www.sucai999.com/searchlist/66008.html?vNTYwNDUx 网站主要分享设计类素材为主,有平面海报、UI素材、电商素材、免抠素材、背景图片等等。其中免抠元素数量就非常可观&a…

uniapp项目

目录 一、HBuilder创建项目 二、引入uView 2.1 npm方式安装 2.2 下载方式安装 三、小程序的分包 三、App.vue中的生命周期 四、工具封装 五、api接口请求封装 六、store 七、加载顺序 八、flex的使用 一、HBuilder创建项目 文件--新建--项目--默认模板--Vue2--创建 …

CRLFsuite:一款功能强大的CRLF注入扫描工具

关于CRLFsuite CRLFsuite是一款功能强大的CRLF注入扫描工具,在该工具的帮助下,广大研究人员可以轻松扫描和识别目标应用程序中的CRLF注入漏洞。 关于CRLF 回车换行(CRLF)注入攻击是一种当用户将CRLF字符插入到应用中而触发漏洞…

“华为杯”研究生数学建模竞赛2005年-【华为杯】A题:排队论模型解决出租车最佳数量预测(附获奖论文)

赛题描述 A: Highway Traveling time Estimate and Optimal Routing Ⅰ Highway traveling time estimate is crucial to travelers. Hence, detectors are mounted on some of the US highways. For instance, detectors are mounted on every two-way six-lane highways o…

jsp 大学生心理平台系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp大学生心理平台系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统采用web模式开发,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境 为TOMCAT7.0,Myeclipse8.5开发&#x…

正点原子STM32(基于HAL库)4

目录ADC 实验ADC 简介单通道ADC 采集实验ADC 寄存器硬件设计程序设计(还没拷贝完)单通道ADC 采集(DMA 读取)实验ADC & DMA 寄存器硬件设计多通道ADC 采集(DMA 读取)实验ADC 寄存器硬件设计单通道ADC 过采样(16 位分…

【数据结构初阶】第二篇——顺序表

顺序表的概念及其结构 初始化顺序表 销毁顺序表 打印顺序表 增加数据 头插 尾插 指定下标位置插入 删除数据 头删 尾删 删除指定位置 查找数据 修改数据 顺序表的概念及其结构 基本概念 顺序表是用一段物理地址连续的存储单元一次存储数据元素的线性结构&#xf…

Word控件Spire.Doc 【Table】教程(6): 在 Word 中合并或拆分表格单元格

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

AcWing 1072. 树的最长路径(DFS与树形DP)

AcWing 1072. 树的最长路径(树形DP)一、题目:二、思路:三、代码:四、树形DP1、状态表示2、状态转移3、循环设计4、初末状态5、代码实现一、题目: 二、思路: 为了方便,我们利用下面这…

Vue3现状—必然趋势?

文章目录🌟 专栏介绍🌟 Vue默认版本🌟 拥抱Vue3的UI🌟 Vue3显著优势🌟 专栏介绍 凉哥作为 Vue 的忠诚粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相关技术文章,Vue 框架目前的地位大…

Python爬虫之Scrapy框架系列(8)——XXTop250电影所有信息同时存储到MySql数据库

现在又不满足于只保存在本地txt文本了,所以来试试存储到数据库mysql里怎么搞呢?(首先,要准备好mysql数据库以及navicat数据库可视化管理工具) 目录:分析:如何同时存储到本地txt文本以及mysql数据…