返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >初始网络编程
  • 270
分享到

初始网络编程

网络协议网络编程 2023-09-13 22:09:14 270人浏览 八月长安
摘要

专栏简介: JavaEE从入门到进阶 题目来源: LeetCode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现


专栏简介: 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 地址主要有两个作用 , 分别是 寻址 和 路由.

  • 在寻址过程中 , 不单单是通过 IP 地址就能找到互联网中的一个主机 , 其实 IP 地址包含网络号和主机号  , 网络号需要语子网掩码 255.255.255.0 按位与获得 , 主机号需要与按位取反后的子网掩码 255.255.255.0 按位与获得.
  • 路由是指在网络中选择合适的路径将数据包从源地址传输到目标地址的过程。它涉及到网络设备(如路由器)的选择和配置,以确保数据包按照正确的路径传输。

综上所述,寻址是为了确定设备的唯一地址,而路由是为了选择合适的路径将数据包从源地址传输到目标地址。寻址是在设备级别进行的,而路由是在网络级别进行的。

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


2.2 端口号

概念:

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

格式:

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

由于 tcp/UDP 协议的端口号字段是 16 位的 , 所以可以表示的端口号范围是 2 ^ 16 -1(65535).

注意事项:

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

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

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

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


2.3 认识协议

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

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

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

概念:

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

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

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

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

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

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

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

协议(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协议中 , 用五元组来标识一个网络通信:

源IP: 标识源主机

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

目的IP: 标识目的主机

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

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

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


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 把这个应用层数据 , 交给传输层.

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

 

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

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

什么是以太网呢?电脑上的以太网接口,Wi-Fi接口,以太网交换机、路由器上的千兆,万兆以太网口,还有网线,它们都是以太网的组成部分。以太网就是一种在「局域网」内,把附近的设备连接起来,使它们之间可以进行通讯的技术

以太网在判断网络包目的地时和 IP 的方式不同,因此必须采用相匹配的方式才能在以太网中将包发往目的地,而 Mac 头部就是干这个用的,所以,在以太网进行通讯要用到 MAC 地址

MAC 头部是以太网使用的头部,它包含了接收方和发送方的 MAC 地址等信息,我们可以通过 ARP 协议获取对方的 MAC 地址

所以说,网络接口层主要为网络层提供「链路级别」传输的服务,负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标识网络上的设备。

 

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

 下图为数据分用过程:

来源地址:https://blog.csdn.net/liu_xuixui/article/details/128714571

--结束END--

本文标题: 初始网络编程

本文链接: https://lsjlt.com/news/406523.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 初始网络编程
    专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现...
    99+
    2023-09-13
    网络协议 网络编程
  • 初识网络编程
    c/s b/s 架构client 客户端/server 服务端browser 浏览器/server 服务端现在多数都是客户端与服务端之间进行交互,获取信息但像微信小程序,支付宝等一些应用都开始发展小程序功能,通过微信就可直接在内部调用其他...
    99+
    2023-01-31
    网络编程
  • 新手初学Java网络编程
    目录运行线程回调同步方法同步块死锁优先级暂停可以对IO阻塞可以对同步对象阻塞可以放弃可以休眠可以连接另一个线程可以等待一个对象可以结束可以被更高优先级线程抢占总结运行线程 创建Thr...
    99+
    2024-04-02
  • [MySQL]初始JDBC编程
    专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现...
    99+
    2023-09-11
    mysql 数据库 java
  • 网络编程(JavaEE初阶系列10)
    目录 前言: 1.网络编程的基础 1.1为什么需要网络编程 1.2什么是网络编程 1.3网络编程中的基本概念 1.3.1发送端和接收端 1.3.2请求和响应 1.3.3客户端和服务端 2.Socket套接字 2.1概念 2.2分类 3.U...
    99+
    2023-09-07
    网络
  • win7如何初始化网络设置
    这篇文章主要介绍“win7如何初始化网络设置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win7如何初始化网络设置”文章能帮助大家解决问题。操作步骤:点“开始”菜单,找到并打开“控制面板”,进去之...
    99+
    2023-07-01
  • win7无线网络初始化怎么设置
    这篇“win7无线网络初始化怎么设置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win7无线网络初始化怎么设置”文章吧。w...
    99+
    2023-07-04
  • 网络编程
    1. 网络编程入门 1.1 网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 网络编程...
    99+
    2023-08-30
    网络 Java
  • Java网络编程 - 网络编程介绍 - 网络通信三要素
    文章目录 网络编程网络编程介绍网络通信三要素要素一: IP地址IP地址基本介绍IP地址的操作类 要素二: 端口号要素三: 协议TCP协议UDP协议 网络编程 网络...
    99+
    2023-09-07
    网络 java 网络协议
  • mac网络初始化设置的方法是什么
    要进行Mac网络初始化设置,可以按照以下步骤进行操作:1. 打开“系统偏好设置”,可以通过点击屏幕左上角的苹果图标,然后选择“系统偏...
    99+
    2023-09-12
    mac
  • python网络编程-socket编程
    一、服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站)   C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发   二、OSI七层模型 互联网协议按照功能不同分为...
    99+
    2023-01-31
    网络编程 python socket
  • Android网络编程
    Android网络编程目录小朋友你是不是有很多问号???一、网页源码查看器二、消息机制的写法(重点)1、相关概念2、Handler的使用3、消息...
    99+
    2022-06-06
    Android
  • 网络编程(全)
    【网络编程】 今日内容 软件架构CS/BS网络通信三要素TCP通信Socket套接字ServerSocket文件上传自定义服务器 第一章 网络编程入门 1.1软件结构 C/S结构 :全称为Client...
    99+
    2023-09-06
    网络 tcp/ip 服务器
  • Java 网络编程
    Java 网络编程   目录 Java 网络编程   Socket 编程 ServerSocket 类的方法 Socket 类的方法   InetAddress 类的方法 Socket 客户端实例 Socket 服务端实例     网络编...
    99+
    2023-10-09
    java
  • Python 网络编程
    Python 网络编程 Python 提供了两个级别访问的网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统 Socket 接口的全部方法。 高级别的网络服务模块 S...
    99+
    2023-08-31
    网络 服务器 运维
  • 网络编程—tcp
              一、TCP简介           二、tcp网络程序-客户端           三、tcp网络程序-服务器           四、案例:文件下载器           五、tcp三次握手、四次挥手        ...
    99+
    2023-01-31
    网络编程 tcp
  • 网络编程—udp
    一、ip地址 1. 什么是地址 地址就是用来标记地点的   2. ip地址的作用 ip地址:用来在网络中标记一台电脑,比如192.168.1.1;在本地局域网上是唯一的。   3. ip地址的分类 每一个IP地址包括两部分:网络地址和主机...
    99+
    2023-01-31
    网络编程 udp
  • Python网络编程
    # notes 要点网络编程 客户端/服务器架构 客户端/服务器网络编程 套接字是计算机网络数据结构。在任何类型的通信开始之前,网络应用程序必须创建套接字。可以将它们比作电话插孔,没有它将无法进行通信。 进程间通信(Inter Proc...
    99+
    2023-01-31
    网络编程 Python
  • 【网络编程】网络编程 和 Socket 套接字认识
    ✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 目 录 🎧一. 网络编程基础🎺1. 为什么需要网络编程?🎷2....
    99+
    2023-08-23
    网络 服务器 java
  • C#网络编程之Socket编程
    目录一:什么是SOCKET套接字分类二:SOCKET相关概念1、端口2、协议2.1 TCP:2.2 UDP三:socket一般应用模式:四:SOCKET通信基本流程图:服务器端:客户...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作