网络原理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 协议就非常合适。

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

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

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

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

六、关于抓包

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

相关推荐
Yang96112 小时前
光缆故障快速排查实操技巧,鼎讯信通 Smart-S3 OTDR 一线使用心得
网络
LDZKKJ4 小时前
OpenAI模型“越狱“入侵Hugging Face——AI安全史上的至暗时刻
网络·人工智能·安全
xqqxqxxq5 小时前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记
泡沫冰@6 小时前
上章节中文件的讲解
前端·网络·nginx
海域云-罗鹏8 小时前
分支访问总部ERP卡顿?如何部署SD-WAN组网解决方案
服务器·网络·安全
Shell运维手记9 小时前
ARP 协议超详细讲解(适合网工考试 / 运维理解)
运维·网络·网络协议·智能路由器
优化Henry9 小时前
学习笔记之VoNR语音业务注册流程
网络·笔记·学习·5g·信息与通信
ShineWinsu10 小时前
对于Linux:HTTP中cookie、session的解析
linux·网络·c++·网络协议·http·cookie·session
huainingning10 小时前
华三瘦AP切换为胖AP并配置无线功能
运维·网络·网络协议·tcp/ip
xywww16811 小时前
开发团队接入 Opus 5 / Sonnet 5:模型路由、升级阈值和成本账怎么算
服务器·网络·p2p