网络原理01(两千字解析)

一、网络编程的原理就是使用 socket api 来编写程序

  • UDP 协议使用 DatagramSocket 和 DatagramPacket 两个接口来编写程序,UDP 协议是无连接 ,字节流传输的 。在使用 UDP 协议来编写程序,就是使用数据报 来编写程序,把我们客户端的请求和服务器的响应都打包成数据报进行传输 。而且它还是不安全的传输 ,他不能知道数据报到底到达对方那里了没有,它只管把这个数据报给丢出去,能否到达他并不关心。
  • TCP 协议使用 ServerSocket 和 Socket两个接口来编写程序
  1. 数据在读写的时候通过 Socket 内置的 InputStream 和 OutputStream 这两个流对象。读写的基本单位还是字节 ,所以完成字符流读取是需要我们规定 请求/响应 之间的分隔符。(默认\n)
  2. 服务器这边的 ServerSocket 需要调用 accept 这个方法,得到 Socket 对象,这个对象在每次创建连接的时候创建,在连接结束的时候需要我们手动销毁
  3. 要处理多个客户端的时候,可以搭配多线程和线程池来搭配

二、多路复用

如果客户端进一步增加,此时多线程/线程池 ,就会产生出大量的线程 ,此时性能也会降低很多。这时候操作系统中内置了 IO 多路复用,本质上就是一个线程同时处理多个客户端的请求。

就像是在小吃街我去买饭 ,需要买三份饭, 我可以先去第一家店铺 点好我的饭,然后和老板说我等下来 ,接下来直接去下一家店 ,再和老板说等下来拿 ,最后去最后一家店也是和老板说等下来拿饭 。然后我就处理了这三个买饭的工作 ,接下来我只需要等哪个老板把饭做好了,喊我去拿的时候去拿就行了 。这样我一个人就可以同时让三个老板同时工作,并且哪个老板完成之后喊我,我再过去接收响应。

这样的办法就叫做多路复用。

三、自定义协议

自定义协议有两个阶段:

1.根据需求,我需要传输哪些信息。

就像是外卖软件,我需要给前端返回一个商家列表,这时候我们和前端约定好数据这样传输

客户端-服务器-传递的信息

请求: 用户的位置信息,用户的id

响应: 商家的id,商家的名字,商家图片,评分,配送费,种类...

2.约定好信息组织的格式

有很多种方式

1) 行文本的格式,一行为一个数据

商家id,商家名字,商家图片,商家评分,配送费用,分类\n

商家id,商家名字,商家图片,商家评分,配送费用,分类\n

商家id,商家名字,商家图片,商家评分,配送费用,分类\n

\n // 空白行

2) 通过 xml 格式来约定 请求和响应 的数据

关于 heml 和 xml 都是成对的标签构成的键值对结构 ,因为 html 标签内容是固定好的,但是 xml 的标签内容是自定义的 ,所以 html 的灵活性比 xml 的灵活性要差(现在的 html 5 允许自定义标签了),所以我们使用 xml 来表示数据。

优点:可读性好
缺点:冗余的信息很多,会消耗更多的网络带宽,在网络传输中,最贵的就是网络带宽。
对于服务器来说: 带宽 > cpu > 内存 > 硬盘

3) json 当下流行的网络数据格式组织的方案

优点是:可读性强,消耗的带宽也比上面的 xml 少很多
缺点是:还存在一些冗余信息

4) protobuf 网络数据格式组织方案

它是基于二进制的格式来对数据进行压缩,这时候因为是二进制,所以不涉及到 json/xml 的冗余信息,我们只需要规定好那几个字节表示什么数据就好了,这时候带宽消耗最少,但是可读性是最差的。

网络数据格式组织方案小结:
1)行文本(最原始)
2)xml (比较原始,可读性好,冗余比较多)
3)json (当前主流的方式,可读性好,比起 xml 冗余降低很多)
4)protobuf (高性能场景下使用,可读性差,冗余最少)

四、关于网络通信的模型

  1. 一问一答 模式
    客户端发一个请求,服务器就返回一个响应,请求和响应一一对应
  2. 多问一答
    在上传大文件的时候,客户端把文件拆成多个部分,分别上传,当服务器接收成功之后返回一个响应
  3. 一问多答
    在下载大文件的时候,我们客户端向服务器发起下载请求,我们服务器把这个大的文件分成多个小文件分别传输给客户端,这时候我们客户端一次请求就能得到服务器的多个响应。
  4. 多问多答
    就像远程控制对方电脑的时候,对方要传过来画面,我们接收画面,我们也需要发送请求,对方也需要发送请求,我们远程不只可以操作一个,也可以操作多个,这时候请求和响应就有多个了。

http是一问一答的模式的协议。

我们浏览器打开网页的场景 /手机app加载数据的场景,是典型的一问一答的场景 ,这时候使用 http 协议就非常合适。

五、关于正向代理和反向代理

我要去超市买东西,我可以让我朋友去给我买 ,我把买东西这个请求给我朋友 ,我朋友 接收这个请求之后去给超市老板 执行这个请求 ,这时候 "朋友" 就是正向代理 。

这时候如果老板雇员工 ,我朋友 去给员工 说我要买的东西,员工 不知道位置,去和老板 说,老板 去告诉她 位置,员工 得到位置去拿东西给我朋友 ,我朋友 最后把东西给我 。这时候这个员工就是反向代理。

总的来说,这个代理的角度是从客户端的角度来分析的,客户端找的代理就是正向代理,服务器找的代理就是反向代理。

六、关于抓包

抓包就是我们客户端找的代理,让这个代理知道并参与我们整个流程,这时候我们就可以通过这个代理来看这个流程到底做了什么工作。

相关推荐
2401_8685347835 分钟前
无线网络规划设计
服务器·网络
螺蛳粉 螺蛳粉1 小时前
第二篇:keepalived VRRP 原理篇:协议与 VIP 漂移机制深入解析
网络·智能路由器·负载均衡·keepalived·高可用
盟接之桥1 小时前
AI助手:你的7×24小时智能管家——让异常预警无处不在
大数据·网络·数据库·人工智能·制造·ai编程
2603_969579283 小时前
内网数据自动备份工具:隔离网络下的数据保护方案
网络
逗脑IDE3 小时前
零基础学ESP32:RFID无线射频卡——让ESP32拥有“刷卡“能力!
开发语言·网络·人工智能·python·esp32·硬件开发
cws2004013 小时前
监控摄像头选型指南
运维·网络·监控
和裕4 小时前
定制纸箱刀模费全解析:费用定义与可减免合作场景
大数据·运维·网络·人工智能·算法
troy1284 小时前
智能体沙箱:如何为 Agent 模型搭建安全试验场,降低幻觉带来的损失
网络·安全
LHR_friendship4 小时前
HCIP课程全部内容
网络·笔记·学习·hcip·华为ensp
Chengbei114 小时前
拒绝无效洞!蚂蚁Src榜一Clown 2.0 SRC SKill 第二代带状态闭环的白盒 & 黑盒审计 Skill
网络·人工智能·安全·web安全·网络安全·自动化·安全架构