计算机网络基础

前言

在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:"下边永远是地狱!"
博客主页:KC老衲爱尼姑的博客主页

博主的github,平常所写代码皆在于此

共勉:talk is cheap, show me the code

作者是爪哇岛的新手,水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!


文章目录


网络基础知识

网络发展史

独立模式

每一台计算机之间都是相互独立的,无法进行通信。每台计算机都负责处理某个业务。如下图所示

举个栗子,张三用A计算机完成加法,然后移动到B计算机前完成减法,最后去使用C计算机完成除法。在张三完成这一系列的操作的时候,其他人处理等待状态,效率是非常低的。

网络互连

随着时代的发展,越来越需要计算机之间能能够互相通信,共享软件和数据,人们就研究出了不同计算机之间的通信方式(网络),可以让多个计算机协同工作来完成业务,计算机之间就有了网络互连。通过的网络将多台计算机连接在一起,完成不同计算机之间的数据传输。这种通信方式被称为网络通信。根据网络互连的规模不同,可以划分为局域网和广域网。

局域网

即 Local Area Network,简称LAN。Local 即标识了局域网是本地,局部组建的一种私有网络。局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。

局域网组建网络的方式有很多种:

(1)基于网线直连

(2)基于集线器组建

(3)基于交换机组建

(4)基于交换机和路由器组建

广域网

广域网,即 Wide Area Network,简称WAN。通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的

局域网都属于其子网。

举个例子,如果一家公司,有很多的分公司,甚至海外公司,把这些公司以专线的方式连接起来,就是一个"广域网"。如果属于全球的公共型广域网,则称为互联网,互联网属于广域网的一个子集。

网络通信基础

网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。

IP地址

概念

IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。就像网上购物,需要填家庭住址,不然快递小哥也不知道送到哪里去。

格式

IP地址是一个32位的二进制数,通常被分割为4个"8位二进制数"(也就是4个字节),如:01100100.00000100.00000101.00000110。通常用"点分十进制"的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6。

特殊IP

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1。本机环回主要用于本机到本机的网络通信。IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识。

端口号

概念

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

类似于我们告诉了快递小哥地址,同时还要告诉具体是那个人(端口号)。

格式

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

注意事项

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

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

  3. 程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能绑定同一个端口号。


各位看官如果觉得文章写得不错,点赞评论关注走一波!谢谢啦!。

相关推荐
Charles_go13 小时前
C#7、如何处理异常
开发语言·c#
我曾遇到一束光13 小时前
Springboot3.X+security6.5+jdk21
java·开发语言
万岳软件开发小城13 小时前
在线教育系统源码架构设计指南:高并发场景下的性能优化与数据安全
php·在线教育系统源码·教育平台搭建·教育app开发·教育软件开发
Tipriest_13 小时前
C++ 图形中间件库Magnum详细介绍
开发语言·c++·magnum
tryxr14 小时前
Java 不同创建线程的方式什么时候才可以使用 this 来获取线程的引用
java·开发语言·多线程
消失的旧时光-194314 小时前
Kotlin JSON 序列化库选型指南:Kotlinx.serialization vs Gson
开发语言·kotlin·json
newchenxf14 小时前
AndroidStudio版本和AGP版本和gradle版本以及kotlin gradle plugin版本关系梳理 2025
android·开发语言·kotlin
猫头虎14 小时前
Rust评测案例:Rust、Java、Python、Go、C++ 实现五大排序算法的执行时间效率比较(基于 OnlineGDB 平台)
java·开发语言·c++·python·golang·rust·排序算法
milanyangbo14 小时前
从局部性原理到一致性模型:深入剖析缓存设计的核心权衡
开发语言·后端·缓存·架构
ftpeak14 小时前
Rust 嵌入式开发的经验之谈
开发语言·后端·rust