Linux网络编程1(网络基础定义)

简介: Linux网络编程1(网络基础定义)

网络早已成为我们日常生活的一部分,经常使用互联网的人很难长时间内离开互联网。你是否好奇你的电脑仅仅插上一根网线,你发给朋友的聊天信息就能准确无误的到达朋友的手机或者电脑上,你是否好奇为何你仅仅在浏览器输入一个网址,点击一下enter,网页图片和视频就展现在你的眼前,这一切的背后究竟是什么原理?在网络编程的系列学习中,我们将逐渐揭开网络神秘的面纱,不仅要懂网络,还知道如何编写网络程序


网络的起源

网络最初是美国军方用来通信的一种手段,后来逐渐下放在民用市场被广泛使用,一开始的网络是由美国政府掌管,后来逐渐分配给各大运营商(ISP)来管理,随着越来越多的人加入互联网,互联网的规模也变得越来越大。网络的出现是一种必然的趋势,随着人们逐渐依靠计算机来解决问题,就暴露出很多问题

某人用计算机A得出计算结果,要记下数据,来到计算机B把A的数据结果输入进去,然后再把计算机B的结果输入到计算机C中得出最终结果,这个过程中虽然计算机解决了计算问题,但是各个计算机之间相互独立,还是很不方便

如果计算机A和计算机B,C之间能够互相连接起来,A计算完把结果传送给B,B再传送给C这样不就不需要人跑来跑去,如下图

要是此时计算机C想直接从A拿到数据,直接在A,C之间接线单这一个还好,如果接入更多的计算机呢?难不成每个计算机之间都接一条线吗?成本太高了,怎么更好的解决呢?我们可以引入第四台计算机,如下图

A把运算结果上传到服务器上,B和C可以访问这个服务器获取A的数据,并且以后再接入更多的计算机也不怕了,这是服务器的用法之一,现在的服务器有着更丰富的功能,是撑起互联网大厦的支柱

那么计算机A该如何找到服务器又成了一个问题,可以让A在这个局域网内进行广播,当服务器收到了广播,发现是在找自己,于是应答,建立A与服务器之间的通信,这样做会带来一系列的问题。首先A是广播,只要A发送消息,那么局域网内的所以机器都能收到消息,如果有非法计算机监听通信信息,会很危险,并且A发送消息时,整个局域网的信道都被占用,B和C都不能发送消息,否则就会产生信息碰撞,种种的不方便催生了交换机的诞生

交换机的原理是所有局域网内的主机都连接到交换机上,当计算机A想要给服务器发送信息时,只要发给交换机,交换机会自动找到服务器把信息转交,这样避免了信息泄露和碰撞

路由器又是个什么东西呢?假设现在成都有一个局域网A,上海有一个局域网B,现在A和B想要进行通信,两个局域网之间的互相连接就是靠路由器来实现的,把一个局域网比作一个山村的话,那么路由器就是离开这个山村去往外面世界唯一的通道,世界上的各个路由器互相连接就构成了庞大的互联网世界


网络分层模型

上面仅仅是对互联网的一个简单描述,如果仅仅是科普程度也差不多了,但是作为程序编写人员,我们对互联网的了解要更加深刻,深入到具体的实现细节中,那么首先得明白互联网的层次模型,互联网共有两种层次模型,一种是OSI模型,一种是TCP/IP的模型

分层的目的是什么?要知道在主机上随手点击一下的网络请求具体实现要经过很多层次,假设你在使用浏览器,输入网址后点击访问,那么浏览器这个软件会将请求信息转交给OS,OS会对转交信息进行一定层度的包装,然后再转交给网卡,网卡将请求信息转换成模拟或者波信号发送出去

在这个过程中,浏览器软件负责请求网络通信,OS负责将信息包装,网卡负责传播信号,任何一个环节出了问题,就体现出分层解耦的作用了,当浏览器请求出了问题,并不会影响到OS和硬件,每一层都有自己的工作要做,当然刚学理解不了这些很正常,随着对每一个层次的深入学习后,再次看这个分层模型就能理解为何要这么做

实际上我们并不使用OSI模型,因为在实际的程序编写上发现应用层,表示层,会话层之间的联系很紧密,即耦合度高,不便于分开处理,因此TCP模型将这三个模型压缩成一个应用层,我么实际上使用的就是TCP模型,因为我们主要负责软件方面的,因此最底层的硬件部分我们并不怎么关心,所以TCP模型又可以看作是只有四层


网络的信息传送过程

网络信息传送就是指一个请求信息是如何通过层次模型,层层包装最后传输给目的主机的,这个过程用语言描述并不直观,大家可以观看相关的视频来理解,例如在b站上搜计算机网络,就可以查看到相关的内容,建议大家去看看,找不到可以联系笔者


协议

上面那张分层图,每一个分层都有对应的协议,那么什么是协议呢?大家都是明白协议的意思的只是不好口述出来,协议说简单点就是通信双方互相约定以某一种方式进行通信,以日常生活中的快递公司为例

常见的快递公司有邮政,京东,顺丰等,当我们在网上购物,商家会选择一个快递公司将货物递送出去,那么快递小哥如何知道要送达到哪里呢?快递公司会专门定制它们公司的快递送达协议,快递小哥只要根据这个协议执行,那么就能够把快递送给用户,这个快递协议具体就是体现在快递单上,快递单记录了该快递公司名称,用户地址,用户姓名,用户号码等等必要信息,所以快递协议是体现在快递单上的

同样的,我们后面会学习TCP协议,IP协议等,然后你会发现这些协议都有一个报头,TCP报头,IP报头等,和快递单是类似的,协议的内容体现在报头上的

上图就是IP协议的报头,每个字段的具体内容大家可以搜索查看,我们这里看看这个报头内部有一个协议字段,这个是什么意思?这个字段是记录的是当前信息的上一个协议用的是哪个?是TCP还是UDP,还是OSPF协议等等

为什么当前协议还有记录上一层使用的是什么协议呢?如果你看了网络信息传送过程视频你应该能想明白,当目的主机收到分组信息,会逐层向上传递,传到IP层时,它的上层有很多协议,有udp,有tcp,那么该传给谁呢?这个时候就提现到这个协议字段的作用了,协议字段里记录的是哪一个协议就传给哪一个协议


以太网名称由来

平时主机上连接的网线而形成的局域网络被称为以太网,那么为什么叫以太网这个奇怪的名字呢?早期的物理学家发现声音的传播是依靠介质的,在真空状态下无法传播声音,于是就推测光的传播肯定也是要依靠介质的,于是把光的传播所依靠的介质称为以太,并做了大量实验想找到这种介质。后来有人科学的证明了,光的传播是不需要介质的,前面的实验就成了笑谈,网络祖师爷起这个名字是对物理界的一种调侃或致敬,不必奇怪,大佬嘛,能成为大佬,基本很多圈子都有身影


IP和MAC地址

在网络上如何查找到具体的一台联网主机呢?这就靠IP地址了,IP地址就相当于主机的门牌号,唯一的标识网络上的一台主机

你可能会疑惑,32位的整数,2的32次方也不过才40亿多,怎么能满足全球50多亿的上网需求呢?我们将在后面解释这部分内容,不过未来的趋势是使用IPv6协议,共有128位,几乎可以给地球每一个沙子都分配一个ip地址,不过现在IPv6的普及还需要一段时间

MAC地址唯一的标识了一台网络硬件设备,MAC地址有48位, MAC地址一般是写死到网络硬件设备上的

MAC地址能标识唯一,IP地址也能标识唯一,那么为何还要IP地址呢?直接统一用MAC地址不就好了,有时候一台主机不止有一个网卡,如果有多个网卡,那么就会有多个MAC地址。在网络信息传输过程中,IP地址是不变的 ,一旦确定了目的主机的IP地址,就不会更改,MAC地址是动态变化的,每经过一个新的路由就要更新一跳的MAC地址,MAC地址常用来局域网内搜寻某个主机,随着对网络学的加深,大家会对这两个地址有更加深刻的理解  


目录
相关文章
|
3月前
|
安全 Linux 网络安全
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
121 0
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
|
4月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
288 18
|
4月前
|
网络协议 关系型数据库 Linux
【App Service Linux】在Linux App Service中安装 tcpdump 并抓取网络包
在App Service for Linux环境中,无法像Windows一样直接使用网络排查工具抓包。本文介绍了如何通过TCPDUMP在Linux环境下抓取网络包,包括SSH进入容器、安装tcpdump、执行抓包命令及下载分析文件的完整操作步骤。
228 5
|
5月前
|
Web App开发 网络协议 Linux
【Linux】网络基础
TCP/IP五层模型是网络通信的基础框架,将复杂的数据传输过程分为物理层、数据链路层、网络层、传输层和应用层,每层各司其职,协同完成远程通信。该模型确保了不同设备和网络之间的互联互通,是现代互联网运行的核心机制。
357 5
|
5月前
|
网络协议 Linux 开发者
深入Linux中UDP网络通信机制编程探索
以上步骤概述了Linux中UDP网络通信的编程机制。在实现时,因关注细节和上下文环境可能有所调整,但大致流程是一致的。这些知识片段旨在帮助开发者快速上手Linux下的UDP编程,并提供可靠的信息作为编程的基础。在编程实践中,应结合实际业务需求,设计合适的数据传输协议,确保数据的正确性和实时性。
152 0
|
7月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
218 18
|
7月前
|
Linux 数据安全/隐私保护
使用Linux命令行接入无线网络Wi-Fi的示例。
现在,你已经使用命令行成功地连接到 Wi-Fi 网络了。这两个示例涵盖了用 `nmcli` 和 `wpa_supplicant` 连接无线网络的常见场景,让你能够不依赖图形化界面来完成这个任务。在日常使用中熟练掌握这些基本操作能增强你对 Linux 系统的理解,帮助你更有效地处理各种问题。
496 12
|
7月前
|
安全 Ubuntu Linux
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
252 0
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
|
9月前
|
Ubuntu Linux
Linux系统管理:服务器时间与网络时间同步技巧。
以上就是在Linux服务器上设置时间同步的方式。然而,要正确运用这些知识,需要理解其背后的工作原理:服务器根据网络中的其他机器的时间进行校对,逐步地精确自己的系统时间,就像一只犹豫不决的啮齿动物,通过观察其他啮齿动物的行为,逐渐确定自己的行为逻辑,既简单,又有趣。最后希望这个过程既能给你带来乐趣,也能提高你作为系统管理员的专业素养。
1347 20
|
9月前
|
JSON 运维 Ubuntu
Linux下如何使用Curl进行网络请求
希望这篇文章能帮助您在Linux下更好地使用Curl进行网络请求。如有疑问,请随时提问!
472 10