网络编程启蒙

这篇具有很好参考价值的文章主要介绍了网络编程启蒙。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

👑作者主页:Java冰激凌
📖专栏链接:JavaEE

局域网、广域网

首先我们来了解一下路由器 在当前的网络时代 路由器已经成为了我们家庭中不可缺少的一部分了 当然不仅仅应用于家庭 我们在大部分情况下 连接wifi都是连接到路由器覆盖出来的网络中的 当然我们基本都认识路由器 那么这次我们来简单的介绍一下路由器 路由器主要有两类端口 一类是WAN口 一类是LAN口 而我们经常使用到的一般是我们的WAN口 我们家中入户的宽带一般就是插这个口 那么我们是否会有一个疑惑 为何已经有了光猫我们还需要有路由器呢?其实我们的光猫的功能是非常的少的 并且也不支持网络拓展 而路由器功能强大 就被广泛的应用到了我们的wifi组件中

WAN口

我们一般在家中入户的宽带就是插这个口

LAN口

其中插在LAN口上的设备 在一个局域网里通过WAN口链接到另外一个局域网


所以路由器是连接了两个局域网 (LAN口一个 WAN口一个)


那么什么是局域网和广域网呢?

其实我们对于局域网和广域网的认知只是一个浅度的概念 我们可以简单的理解为 你家庭中的无线 这个就是局域网 而覆盖一整个小区 甚至更大的 我们可以认为他是一个广域网 两者的区别就是 广域网覆盖的比局域网大


IP地址

ip地址相信我们也是很熟系的 ip地址是我们主机在网络中的位置 也就是说 它描述了网络上一个主机的位置 我们可以来简单的看一下如何查询自己主机当前的ip地址
我们只需打开cmd窗口输入ipconfig即可看到自己的ip地址
网络编程启蒙但是 这个并不代表这个ip地址是外网 其实在我们的路由器中 路由器接收的网络才是外网 也就是外部可以直接访问的网络 我们这个属于内部网路 也就是路由器根据规划ip地址分配给我们单个设备使用网络的ip地址 外界并不能根据此ip地址来找到我的主机

IPV4

IPV4使用点分十进制来表示的 为了方便人们读取 就类似于192.168.0.1 这个ip地址就是我们经常见到的ip地址 他本身是一串很长的二进制表示的(32位)那么我们为了更好的记住这个ip规定了格式 每8位为一个 划分为 00.00.00.00这样的地址 其中也有一个特殊的IP地址 就是我们的127.0.0.1 这个是环回IP用于我们访问自己主机中的内容的时候来访问
为什么说我们当前主机是内部网络ip呢?这个就要讲解到我们的IPV4 我们的IPV4是由32位的二进制构成的 所以说 IPV4可以表示的地址为 2^32 也就是大概42亿个ip地址 我们也可知 如果我们的一个设备需要上网 是必须要分配到一个ip地址才可以上网的 但是在网络时代的今天 全球六十亿人口的引导下 我们的IPV4地址明显已经不够用了 更别说我们现在推广的智能家居 手机 电脑各种 都是需要到IP地址的 所以我们IPV4提出了对应的优化

动态规划ip

这是我们的IPV4的第一个优化机制 这个机制将所有的IP地址进行统一管理 当一个设备需要上网的时候 才会给这个设备分配ip地址 这个简单的优化虽然还能够解决一部分的ip地址匮乏 但是远远也是满足不了高速发展的今天的

NAT

NAT机制是90年代提出的 这个NAT机制将一个路由器分配到了一个IP地址 这个IP地址又可以进行划分子网 在子网中可以分配对应多少个数的ip 但是这个也带来了一个很严重的问题 网络分化 也就是我们刚开始提到的外网和内网 这样分配出的网络 我们只能在同一个局域网下进行互相访问 而外界是无法对于我们的主机进行访问的 (这样解决 也有一定的好处 首先是暂时解决了ip地址不够用的问题 也一定程度的保护了我们的网络安全 比较外界无法访问咱们嘛)但是我们只能这么一直迁就它吗?不 ! 我们还有IPV6的提出

IPV6

在IPV4快要枯竭的时候 IPV6协议已经被提出 IPV6由我们的128位二进制组成 跟IPV4相比 32位 你感觉只是大了四倍吗 ?漏!大漏特漏! 我们这边要这么计算 2^128 = 2 ^ 32 * 2 ^ 32 * 2 ^ 32 * 2^32 可不是简单的四倍 而IPV6可以大到什么地步 ?我们都知道我们的CPU都是由我们的沙子提取硅来制作的 IPV6大到可以给地球上每一粒沙子都分配一个IP地址 恐怖吧 并且 如果我们使用了IPV6 我们的生活质量会有大大的提高 可以实现万物互联 这个万物互联可不是我们现在简单的万物互联 简单举例:当夜幕降临的时候 车路过路灯就会亮 并且当车走了之后 这个路灯会降低亮度 大大的省电

IPV6的普及

其实我们当今世界上的国家中 我们中国是当今全球中IPV6普及最高的国家 我们国家在当初IPV6提出的时候 是最先一批做出响应的 在IPV6研制成功之后 并且也在实际中得到的应用

IPV6的应用

很多童鞋可能不知道 其实我们国家在2008年的时候 在2008年奥运会的时候 已经全面使用了IPV6 通讯 传播 甚至出租车都是使用到了IPV6 并且也是国际首例的使用IPV6的应用 并且我们的奥运会也是成功的使用IPv6举办下来的 并且不出意外的话 这个将作为国际典范的使用 可惜NAT机制的问世 IPV6也很快的被石沉大海了 但是我们要明确 IPV4的IP分配权是掌握在m国手里的 要想避免被鹰酱又威胁 这个威胁还是很大的 如果鹰酱停止给中国分配IP地址 那么中国的所有设备都无法访问互联网 我们国家也在大力的推荐着IPV6的应用 现在 我们国家的IPV6覆盖率已经达到了80%以上


端口号

端口号描述了一个主机上的某个应用程序 端口号本质上是一个2个字节(16byte )的无符号数 0-65535
并且 在一个程序启动的时候 都需要绑定上一个端口号以便客户端程序来访问


协议

进行有效通信 前提就是能够明确通信协议 本质上就是约定发出来的数据时啥样的格式 接收方按照对应的格式来进行解析网络通信的时候 本质上 传输的是光信号和电信号 通过光信号的频率(高频率/低频率) 电信号的电平(高电平/低电平) 来表示0和1

协议分层

因为我们的网络通信这个过程是非常的复杂的 所以将一个大的并且复杂的协议 拆分成很多个小的简单的协议 每个协议负责一部分的工作

协议分层的好处

  1. 每层协议不需要理解其他层的协议(更好的做到了封装)
  2. 把对应层的协议替换成其他协议(更好的做到了解耦合)(众所周知 我们写代码最好的方式就是高内聚 低耦合)

OSI

OSI由七层模型构成
网络编程启蒙
但是 我们在实际使用中 一般只会使用五层协议 分别是应用层 传输层 网络层 数据链路层 物理层

物理层

网络通信中的硬件设备 网线/网卡针对硬件设备的约定 就是物理层协议锁负责的范畴 需要保证所有的主机和网络设备之间 都是相互匹配的

数据链路层

负责完成相邻(一根网线相连的两个设备)的两个设备之间的通信的

网络层(全局)

负责点到点之间的通信 网络中的任意节点到任意节点之间的通信 (不一定是相邻了 更多的是不相邻的)
网络层就负责在这两个点之间 规划出一条合适路线(实际的网络环境结构非常复杂 两个点之间的路线不止一条 就需要规划出最合适的一条合适的路线 就例如 我们没有导航的话 如果要去到一个地址 我们就需要摸索这方向 但是我们又不知道具体的路该怎么走 所有我们需要边走边问路 根据一直问路 就可以招到我们要去的地址 网络层采用的也是如此 投石问路的过程 会一层一层的询问 越询问越近

传输层负责

端到端之间的通信 起点和终点
只是关注结果 不关注过程

应用层

和应用程序相关的 你传输的这个数据时干啥的 不同程序又有不同的用处 这一层 就好比我淘宝买了快递 然后商家包装给快递 快递负责我的运输 路线规划 然后交到我手上 我不需要关心他路上是怎么走的 我只需要下单 然后使用即可 这也类似于我们当初说过的 面向对象和面向过程


网络设备所在分层

一台主机 其实就对应了物理层到应用层 五层(把这五层都给实现了)
一台路由器 主要就是物理层到网络层(主要是实现了物理层 数据链路层 网络层)
一台交换机 主要就是物理层到数据链路层(主要是实现了物理层 数据链路层)

网络分层中的一组重要概念\封装 和分用(重点)

我们来简单的绘制一下 不同的分层协议之间是如何配合的
假设我们现在为QQ的协议 (当然协议的实现是不同的 这是程序员约定的)
假设我们约定协议格式是这样的 当前状态为 A同学给B同学发送了一条hello的QQ消息
网络编程启蒙
首先这个封装会在应用层完成 之后应用层调用socket api 把应用层的数据交给传输层
传输层会在应用层打包出来的内容进一步封装一个TCP报头(这个后期会讲TCP报头)
封装为一个TCP数据报 所以也可以简单理解为 TCP数据报 = TCP协议报头 + 数据载荷
这个TCP数据报头中有很多信息 其中 最重要的就是源端口和目的端口
网络编程启蒙
接下来就会把传输层的数据报交给网络层
网络层会把接收而来的数据继续打伤IP的协议报头 继续封装为IP数据报
IP数据报 = IP 协议 + 载荷(完整的TCP数据报)
这个IP数据协议报头中也有很多信息 最重要的是源IP和目的IP
网络编程启蒙
紧接着 网络层会将IP数据报交给数据链路层 典型的数据链路层协议 叫做以太网 就会构造一个以太网数据帧
在数据链路层中 会给IP数据报打上帧头和帧尾 其中 帧头中包含的是接下来要到达的地址是什么 帧尾中主要包含的是校验和 这个校验和是因为网络传输中会有很多情况会发生“比特反转”事件 用来检验是否发生了比特反转 如果发生了比特反转 就证明这个数据报是错误的
网络编程启蒙
完成此工作之后 会讲以太网数据帧交给物理层
物理层拿到之后 会根据刚才的以太网数据帧(一组0和1)
把这里的0 和1 编程高低电平 通过网线传输出去
或者将这里的0 和1 编程高频/低频 的电磁波 通过光纤 无线的方式传播出去


以上的过程是发送 我来尝试着解析一下 其实解析就是反向的来 我们画一个其中的过程(简图 实际情况比这个复杂的很)
网络编程启蒙
当B收到这个消息后 是物理层先收到进行解析 之后物理层会将这个交给数据链路层
网络编程启蒙
数据链路层接收到以太网数据帧之后 会将其进行解析 将帧头和帧尾卸下网络编程启蒙
将其解析为IP数据报 之后再交给网络层
网络层收到这个IP数据报之后 会进行解析 将IP的协议报头卸下
网络编程启蒙
之后再交给传输层
传输层接收到这个TCP数据报之后 会进行解析将TCP数据报头卸下 然后将数据载荷交给引用层
网络编程启蒙
当应用层接收到数据载荷后 直接进行解析


以上的操作 也正是顺应了每一层完成每一层的任务 也不会管其他层的东西
这也是一个简单的网络传输的模型 因为在实际的网络传输中 中间会经过多个路由器 交换机 服务器 之后才会发给到B客户端文章来源地址https://www.toymoban.com/news/detail-443461.html

到了这里,关于网络编程启蒙的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络编程】网络编程概念,socket套接字,基于UDP和TCP的网络编程

    前言: 大家好,我是 良辰丫 ,今天我们一起来学习网络编程,网络编程的基本概念,认识套接字,UDP与TCP编程.💞💞💞 🧑个人主页:良辰针不戳 📖所属专栏:javaEE初阶 🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。 💦期待大家三连,关注

    2023年04月20日
    浏览(42)
  • 【Linux网络编程】网络编程套接字二

    喜欢的点赞,收藏,关注一下把! TCP和UDP在编程接口上是非常像的,前面我们说过TCP是面向连接的,UDP我们上篇博客也写过了,我们发现UDP服务端客户端写好启动直接就发消息了没有建立连接。TCP是建立连接的,注定在写的时候肯定有写不一样的地方。具体怎么不一样,我们

    2024年04月15日
    浏览(43)
  • 【网络编程】Linux网络编程基础与实战第三弹——网络名词术语

    数据包从源地址到目的地址所经过的路径,由一系列路由节点组成。 某个路由节点为数据包选择投递方向的选路过程。 路由器工作原理 路由器是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号的设备。

    2024年02月08日
    浏览(36)
  • 【网络编程】网络编程 和 Socket 套接字认识

    ✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,获取到网络上的一个视频资源。 与本地打开视频文件类似,只是视频文件这个资源的来源是网络。 相比本地资源来说,网络提供了更为丰富的网络资源:

    2023年04月15日
    浏览(39)
  • 【C++】6.网络编程:网络编程(TCP&UDP)

    网络编程是C++ API操作中很重要的一部分,包含 TCP 和 UDP 。 网络传输模型可以抽象为7个层: 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 。 但在使用TCP/IP协议时,可以简化为这4层: 网络接口、网络层、传输层、应用层 。 TCP:可靠传输,三次握手建立

    2024年02月16日
    浏览(32)
  • 「网络编程」第二讲:网络编程socket套接字(一)

    「前言」文章是关于网络编程的socket套接字方面的,下面开始讲解! 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「每篇一句」 春风得意马蹄疾,一日看尽长安花。 ——孟郊《登科后》 目录 一、预备知识 1.1 源IP和目的IP 1.

    2024年02月09日
    浏览(42)
  • 网络编程——TCP编程

    在C语言中进行TCP编程的一般步骤如下: (1) 包含头文件: 在代码中包含必要的头文件,以便使用TCP编程所需的函数和数据类型。通常情况下,你需要包含 sys/socket.h、netinet/in.h 和 arpa/inet.h。 (2) 创建套接字: 使用 socket() 函数创建一个套接字,该套接字将用于网络通信。

    2024年02月05日
    浏览(30)
  • 网络编程——UDP编程

    在C语言中进行UDP编程的一般步骤如下: (1) 包含头文件 : 在代码中包含必要的头文件,以便使用UDP编程所需的函数和数据类型。通常情况下,你需要包含 sys/socket.h、netinet/in.h 和 arpa/inet.h。 (2) 创建套接字 : 使用 socket() 函数创建一个套接字,该套接字将用于网络通信

    2024年02月05日
    浏览(32)
  • 网络编程 初探windows编程

    目录 一、什么是Winodws编程 二、开发环境搭建以及如何学习 三、VA助手安装 四、第一个Win32程序 五、窗口类句柄/窗口类对象 六、Winodws消息循环机制 七、Windows数据类型 Windows 编程指的是在 Microsoft Windows 操作系统上进行软件开发的过程,通常涉及使用 Windows API、.NET Framework、

    2024年02月05日
    浏览(36)
  • 【Linux网络编程】网络编程套接字(TCP服务器)

    作者:爱写代码的刚子 时间:2024.4.4 前言:本篇博客主要介绍TCP及其服务器编码 只介绍基于IPv4的socket网络编程,sockaddr_in中的成员struct in_addr sin_addr表示32位 的IP地址 但是我们通常用点分十进制的字符串表示IP地址,以下函数可以在字符串表示和in_addr表示之间转换 字符串转in

    2024年04月14日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包