![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络
文章平均质量分 93
接受平凡 努力出众
执行力,就是生命力!
展开
-
【网络篇】第十八篇——ping的工作原理
当遇到问题的时候,总不能死的不明不白,没头没脑的作风不是计算机网络的风格。如果跨网段的话,还会涉及网关的转发、路由器的转发等等。ping是基于ICMP协议工作的,所以要明白ping的工作原理,就要理解ICMP协议。地址,选择路由的下一跳,还有每经过一个路由器到达一个新的局域网,需要换 MAC。收到这个消息的主机借此了解在整个线路的某一处发生了拥堵的情况,从而增大。协议访问对端主机时,能找到对端的主机了,可是对端主机的防火墙已经禁止。当路由表中没有该主机的信息,或者该主机没有连接到网络,那么会通过。原创 2022-11-27 18:04:43 · 2008 阅读 · 9 评论 -
【网络篇】第十八篇——IP协议相关技术
如上图中的蓝色部分。原创 2022-11-27 13:42:42 · 939 阅读 · 3 评论 -
【网络篇】第十七篇——IP协议详解
分卡与组装 网段划分 IP地址的构成 DHCP协议 IP地址的分类IP分类的缺点无分类地址 CIDR 特殊的IP地址 IP地址的数量限制 私网IP地址和公网IP地址 路由 路由表生成算法IP6基本认识 IPv4 首部与 IPv6 首部原创 2022-11-26 14:38:10 · 815 阅读 · 3 评论 -
【网络篇】第十六篇——再谈端口号
pidof命令用于查找特定正在运行的程序的PID。pidof是一个简单的命令,没有太多选项。通常,您只会使用要搜索的程序的名称来调用pidof。原创 2022-11-25 11:07:15 · 2858 阅读 · 5 评论 -
【网络篇】第十五篇——HTTP协议(二)
GET方法和POST方法;HTTP VS HTTPS;HTTP/1.1,HTTP/2,HTTP/3演变原创 2022-11-24 23:46:15 · 684 阅读 · 3 评论 -
【网络篇】第十四篇——HTTP协议(一)(附带电视剧李浔同款爱心+端口号被恶意占用如何清除)
超文本传输协议是一个用于传输超媒体文档的应用层协议。它是为web浏览器与web服务器之间的通信而设计的,但也可以用于其他目的。HTTP遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。尽管通常基于TCP/IP层,但它可以在任何可靠的传输层上使用,也就是说,该协议不会像UDP那样静默的丢掉信息。RUDP-作为UDP的可靠升级版本-是一种合适的替代选择。原创 2022-11-15 23:12:21 · 722 阅读 · 9 评论 -
【网络篇】第十三篇——认识“协议“与实现网络版计算器
当服务端调用accept函数获取到新连接并创建新线程后,该线程就需要为该客户端提供计算服务,此时该线程需要先读取客户端发来的计算请求,然后进行对应的计算操作,如果客户端发来的计算请求存在除0、模0、非法运算等问题,就将响应结构体当中的状态字段对应设置为1、2、3即可。比如现在要实现一个网络版的计算器,那么客户端每次给服务端发送的请求数据当中,就需要包括左操作数、右操作数以及对应需要进行的操作,此时客户端要发送的就不是一个简单的字符串,而是一组结构化的数据。将结构化的数据组合成一个字符串。原创 2022-11-14 16:27:36 · 140 阅读 · 0 评论 -
【网络篇】第十二篇——TCP协议通讯流程
为什么TCP连接确立需要三次握手,而不是两次?还是四次?这是一个经常能被问到的问题。避免历史连接(主要原因)上面文字出自 RFC 793,三次握手的主要原因是为了防止旧的重复连接初始化造成混乱。网络环境是比较复杂的,它不一定能保证我们先发送的数据包就一定能再我们期望的时间内送达,它可能半路 Poor Gay 了。原创 2022-11-14 15:51:52 · 2457 阅读 · 4 评论 -
【网络篇】第十一篇——简单的TCP英译汉服务器
在前面几篇博客实现了简单的TCP服务器,最开始我们实现的是单执行流的TCP服务器,之后通过代码测试发现单执行流的TCP服务器无法同时为多个客户端提供服务,于是又转而实现了多执行流的TCP服务器。在实现多执行流的TCP服务器时,分别演示了多进程和多线程的实现方式,为了进一步优化基于多线程的TCP服务器,最终还将线程池接入到了TCP服务器当中。此时访问TCP服务器的各个客户端,分别由不同的执行流为其提供服务,因此这些客户端能够同时享受服务器提供的服务。当时我们说过,如果想要让这里的TCP服务器处理其他任务,只需原创 2022-11-13 23:54:43 · 316 阅读 · 5 评论 -
【网络篇】第十篇——线程池版的TCP网络程序
其中在线程池里面有一个任务队列,当有新的任务到来的时候,就可以将任务Push到线程池当中,在线程池当中我们默认创建了5个线程,这些线程不断检测任务队列当中是否有任务,如果有任务就拿出任务,然后调用该任务对应的Run函数对该任务进行处理,如果线程池当中没有任务那么当前线程就会进入休眠状态。此时当客户端连接服务器后,服务端的主线程就会获取该客户端的连接请求,并将其封装为一个任务对象后塞入任务队列,此时线程池中的5个线程就会有一个线程从任务队列当中获取到该任务,并执行该任务的处理函数为客户端提供服务。原创 2022-11-13 23:42:18 · 608 阅读 · 2 评论 -
【网络篇】第九篇——多线程版的TCP网络程序
需要注意的是,虽然新线程能够直接访问主线程accept上来的文件描述符,但此时新线程并不知道它所服务的客户端对应的是哪一个文件描述符,因此主线程创建新线程后需要告诉新线程对应应该访问的文件描述符的值,也就是告诉每个新线程在服务客户端时,应该对哪一个套接字进行操作。此时无论有多少个客户端发来连接请求,在服务端都会创建出相应数量的新线程为对应客户端提供服务,而当客户端一个个退出后,为其提供服务的新线程也就会相继退出,最终就只剩下最初的主线程仍在等待新连接的到来。原创 2022-11-13 14:13:04 · 637 阅读 · 3 评论 -
【网络篇】第八篇——多进程版的TCP网络程序
之前我们已经利用socket编程实现了一个单进程的TCP网络程序(tcp详解),但上一章遗留了一个问题,当我们再开启一个终端去连接服务端,可以发现的是第二个客户端不能和服务器正常通信了,除非我们第一个客户端退出之后,第二个客户端才能和服务器正常通信。可以注意到大部分的socket接口都是阻塞型的。原创 2022-11-13 11:22:38 · 704 阅读 · 3 评论 -
【网络篇】第七篇——网络套接字编程(三)(TCP详解)
简单的TCP网络程序服务端服务端创建套接字服务端绑定服务端监听服务端获取连接服务端处理请求客户端客户端创建套接字客户端连接服务器客户端发起请求服务器测试单执行流服务器的弊端 TCP服务器在调用socket函数创建套接字时,参数设置如下:如果创建套接字后获得的文件描述符是小于0的,说明套接字创建失败,此时也就没必要进行后续操作了,直接终止程序即可。注意: 绑定步骤如下:由于TCP服务器初始化时需要服务器的端口号,因此在服务器类当中需要引入端口号,当实例化服务器对象时就需要给传入一个端口号。而由于我当前使原创 2022-11-09 17:45:51 · 1701 阅读 · 5 评论 -
【网络篇】第六篇——网络套接字编程(二)(UDP详解)
而我们现在所写的代码都叫做用户级代码,也就是说我们是在应用层编写代码,因此我们调用的实际是下三层的接口,而传输层和网络层都是在操作系统内完成的,也就意味着我们在应用层调用的接口都叫做系统调用接口。系统当当中提供的一个INADDR_ANY,这是一个宏值,它对应的值就是0。在进行绑定的时候需要将IP地址和端口号告诉对应的网络文件,此时就可以改变网络文件当中文件操作函数的指向,将对应的操作函数改为对应网卡的操作方法,此时读数据和写数据对应的操作对象就是网卡了,所以绑定实际上就是将文件和网络关联起来。原创 2022-10-31 11:09:01 · 853 阅读 · 7 评论 -
【网络篇】第五篇——网络套接字编程(一)(socket详解)
如果不断有新的请求进来,它们就按照先后顺序在缓冲区中排队,直到缓冲区满。1) 首先会检查缓冲区,如果缓冲区的可用空间长度小于要发送的数据,那么 write()/send() 会被阻塞(暂停执行),直到缓冲区中的数据被发送到目标机器,腾出足够的空间,才唤醒 write()/send() 函数继续写入数据。前面我们说过,两台计算机之间的通信相当于两个套接字之间的通信,在服务器端用 write() 向套接字写入数据,客户端就能收到,然后再使用 read() 从套接字中读取出来,就完成了一次通信。原创 2022-10-28 12:57:54 · 2223 阅读 · 7 评论 -
【网络篇】第四篇——网络字节序
但由于发送端和接收端采用的分别是小端存储和大端存储,此时对于内存地址从低到高为44332211的序列,发送端按小端的方式识别出来是0x11223344,而接收端按大端的方式识别出来是0x44332211,此时接收端识别到的数据与发送端原本想要发送的数据就不一样了,这就是由于大小端的偏差导致数据识别出现了错误。如果编写的程序只在本地机器上运行,那么是不需要考虑大小端问题的,因为同一台机器上的数据采用的存储方式都是一样的,要么采用的都是大端存储模式,要么采用的都是小端存储模式。为什么网络字节序采用的是大端?原创 2022-10-27 21:48:35 · 1393 阅读 · 7 评论 -
【网络篇】第三篇——源端口号和目的端口号
首先,可靠是需要我们做更多的工作的,TCP协议虽然是一种可靠的传输协议,但这一定意味着TCP协议在底层需要做更多的工作,因此TCP协议底层的实现是比较复杂的,我们不能只看到TCP协议面向连接可靠这一个特点,我们也要能看到TCP协议对应的缺点。同样的,UDP协议虽然是一种不可靠的传输协议,但这一定意味着UDP协议在底层不需要做过多的工作,因此UDP协议底层的实现一定比TCP协议要简单,UDP协议虽然不可靠,但是它能够快速的将数据发送给对方,虽然在数据在传输的过程中可能会出错。原创 2022-10-27 19:38:06 · 11395 阅读 · 0 评论 -
【网络篇】第二篇——IP协议与MAC地址详解
几天过去,包裹(数据)到站点了,快递小哥一看,WTF,这是谁的,为什么只有收货地址(IP地址),没有个人信息(MAC地址),信息是不是出错了?因此当数据跨网络到达另一个局域网时,其源MAC地址和目的MAC地址就需要发生变化,因此当数据达到路由器时,路由器会将该数据当中链路层的报头去掉,然后再重新封装一个报头,此时该数据的源MAC地址和目的MAC地址就发生了变化。这里的人对外面的世界非常好奇,有一天,村庄的一个女人发现有镖局可以代购物品(数据),她看到琳琅满目的物品图片,她觉得她的生活仿佛打开了新的大门。原创 2022-10-27 17:12:11 · 6808 阅读 · 7 评论 -
【网络篇】第一篇——网络入门基础
目标服务器本身也是一台计算机,该计算机的操作系统就是linux,而我们在访问目标服务器的时候使用的可能是windows,安卓等操作系统,此外,对端服务器也有自己的协议栈,对端服务器将拿到数据通过协议栈进行各种解包操作后上交给应用层,在对端服务器的应用层就有一个对应的软件服务器,比如抖音服务包,软件服务器内部对收到的用户请求进行各种分析处理后,再将对应的数据以相同的方式返回给用户。因为发送到局域网当中的数据是所有主机都能够收到的,因此当一个主机将数据发送出去后,该主机本身也是能够收到这个数据的。原创 2022-10-25 15:06:17 · 1452 阅读 · 4 评论