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

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

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

二、多路复用

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

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

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

三、自定义协议

自定义协议有两个阶段:

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

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

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

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

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

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

有很多种方式

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

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

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

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

\n // 空白行

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

关于 hemlxml 都是成对的标签构成的键值对结构因为 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 协议就非常合适。

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

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

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

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

六、关于抓包

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

相关推荐
KaMeidebaby3 小时前
卡梅德生物技术快报|小 RNA 适配体合成 + 多方法亲和力表征全流程标准化操作手册
前端·网络·数据库·人工智能·算法
阿成学长_Cain5 小时前
Linux telinit 命令详解:运行级别切换|关机重启|系统维护一站式掌握
linux·运维·前端·网络
NiceCloud喜云6 小时前
Anthropic 一周三连发:Cowork 多端、Fable 5 按需付费、J-space 论文的技术解读
java·服务器·网络·人工智能·ai
门思科技6 小时前
TKL + EB:重新定义 LoRaWAN 在存量设备改造中的价值,让传统设备快速接入物联网
网络·物联网
hai3152475437 小时前
九章芯片电路集成体系:密度矩阵逆向·全域均衡网络计算总框架
网络·线性代数·矩阵
芝麻馅汤圆儿7 小时前
跨三层环境(交换机vlan/vlanif配置)
网络
wjql27 小时前
手机远程操控另一台手机的方法 手机可以远程操控手机吗
网络
奶油话梅糖8 小时前
锐捷常用命令速查表
java·网络·windows
rcms152702692188 小时前
AMAT 0190-32401 通讯模块
网络