网络原理知识

张开发
2026/4/24 17:24:36 15 分钟阅读

分享文章

网络原理知识
上次我们说过基于socket api的两种网络编程方式——UDP与TCP重点是1.读写数据通过Socket通过Socket内置的InputStream与OutputStream读写的基本单位是字节2.当前在编写客户端服务器的时候是需要约定请求/响应之间的分隔符的3.服务器这边accept得到的socket对象记得及时关闭4.要处理多个客户端需要搭配多线程/线程池补充一下网络编程的内容。IO多路复用基于第四条如果客户进一步增加此时多线程/线程池会产生大量的线程之前提到线程不是越多越好太多了反而影响进程执行效率于是操作系统中内置了IO多路复用——本质上就是一个线程同时负责处理多个客户端的请求。正如三个人一起买东西吃A想吃蛋炒饭B想吃面C想吃煎饼现在有三个方案1A一个人去买饭先买蛋炒饭再买面最后买煎饼单个线程处理多个请求过于复杂2三个人一起出动分别买三样食物多线程效率提高的同时系统开销也很大3A一个人买先来到蛋炒饭摊那里叫老板做蛋炒饭一会来拿然后来到面馆叫老板做面一会来拿然后去煎饼摊重复这样的操作等三者谁先做好就依次拿谁的食物只用了一份等待的时间同时等待三个任务的完成。多个客户端就是多个小摊的老板每个客户端绝大多数时间是沉默的工作线程只需要等待等到客户端发来数据线程再来处理就可以了多个客户端同时发数据的概率较小即使出现了这样的情况启用其他的线程也可以IO多路复用是当前开发服务器的主流的核心技术操作系统内置的只需要调用api即可。Java也通过了NIO来封装了IO多路复用。网络原理网络初识中认识网络的协议栈TCP/IP分成五层应用层、传输层、网络层、数据链路层、物理层这五层也是面试常考内容。而应用层是程序员打交道最多的层次与应用程序直接相关程序员写的代码只要是涉及到网络通信的都可以视为应用层的一部分。当然应用层中涉及到的网络通信协议很多也是程序员自己定制的。自定义协议的方式具体如何自定义协议呢这里分成两个阶段第一根据需求明确传输哪些信息第二约定好信息组织的格式。1.根据需求明确传输信息2.约定好信息组织的格式有很多种方式。1行文本的方式但比较土20年前的方式。上述只是举个例子实际约定的时候是有很多变数的自定义协议你根据自己的需求来制定只要客户端与服务器都按照这同一套规则进行构造与解析数据即可但如果是很多人一起搞客户端与服务器需要这些人商量好。2通过xml格式来约定请求和响应的数据同HTML一样xml是成对的键值对结构到时候在前端基础时会学到HTML。xml标签的内容是可以自定义的这一点与HTML不同。优点是可读性好缺点是冗余信息过多在网络传输中会消耗过多的带宽服务器中最贵的部分价格高于CPU。3json当下最流行的网络数据格式组织的方案他用另外一种简便的方式表示了键值对。优点是可读性好且消耗的带宽比xml更少缺点是仍然存在冗余信息。4protobuf基于二进制的格式对数据进行压缩不涉及到冗余信息了但带宽消耗最少的同时可读性也变差了因为二进制文件我们也看不懂。在性能要求高的场景就需要使用如果性能要求不高还是更建议使用json。综上来做个总结HTTP协议重点应用层这里除了自定义协议之外也有大佬们搞好的协议了http协议就是其中一种http协议是当前web开发中最核心的协议使用网站都会用到http即使在招聘要求上都会看到很多公司明确给出对这个的熟练掌握与数据结构与算法一样工作后也需要。Spring就是围绕http展开的。这里的https就是在http的基础上加了一个安全层。HTTP是一问一答模式的协议即客户端发一个请求服务器就返回一个响应请求和响应是一一对应的。正如浏览器打开网页的场景或手机app加载数据的场景就是典型的一问一答场景。抓包工具抓包工具能够获取到网络的数据包将详细的格式解析出来。抓包工具就相当于代理。在你电脑上所有的网络通信都会先发给这个抓包程序抓包程序再把数据转发给服务器。fiddler专门抓HTTP的抓包工具官网上下载不了那么推荐到搜狗下载那里下载不然弹出什么广告什么的就很麻烦了。下载好安装了之后当你成功进来了之后进行一些操作时比如从百度上搜索东西点一下这些按钮点击左页面的内容你就会看到右图的信息快捷键crtla选中所有自己可以删除点这个是将二进制的内容进行解析。后续要学习的就是这些内容都表达什么意思。最后看一下我的页面吧我先点击左边的蓝色部分再点的inspector然后点的两个Raw。

更多文章