计算机网络
文章平均质量分 93
卖寂寞的小男孩
在真正学技术的时期,要做到口不贪佳昧,耳不乐逸声,目不淫欲色,身不怀于安,朝夕励志,强吾之羸。有过必梭,有不善必惧,操好人生大旗的同时也要始终记得沉默是金。
C++领域优质博主,华为云云享专家
展开
-
网络中其他重要技术与协议(DNS系统,ICMP协议,NAT技术与代理服务器)
网络中其他重要的协议。原创 2022-09-19 09:49:10 · 706 阅读 · 11 评论 -
多路转接(使用epoll实现)
第一个参数表示的就是epoll_create创建的epoll空间,第二个参数表示的是操作的选项(可以是删除,更改或者注册一个文件描述符),第三个参数表示要监听的fd,第四个参数告诉内核要监听的事件。当epoll_ctrl的作用是,向文件描述符中输入节点,每一个节点需要包括文件描述符和该文件描述符对应的events,当增加要监听的文件描述符时就插入节点,当删除文件描述符时,就删除节点。它的意思是创建一个epoll空间,epoll空间具体表示的是两段空间,一个策略:红黑树,就绪队列以及回调策略。原创 2022-09-14 16:53:17 · 437 阅读 · 2 评论 -
多路转接(使用select实现)
当timeout设为NULL的时候表示的是阻塞等待:只要数据不就绪,那么select就不返回(注意select是代替read等函数来执行等待的策略的)。当将timeout设为{a,b}时,表示的是阻塞等待a+b个时间,如果数据还没有就绪,则进入非阻塞等待,即直接返回。以上这两种等待都需要交给select来进行,accept,recvfrom等函数就直接进行数据的拷贝了,不再需要进行等待的操作。4.将套接字就绪为两种情况,当是listen_sock的套接字就绪,说明有链接到来了,可以直接进行accept,原创 2022-09-13 14:19:27 · 596 阅读 · 8 评论 -
多路转接(使用poll实现)
在select中是根据位置来进行事件的添加的,比如函数select的第三个位置不是空,就表示有文件描述符的读操作需要关心。3.剩下的就是就绪的文件描述符,当文件描述符时listen_sock的时候,说明有新的链接到来了,此时需要进行accept新的文件描述符,并在数组中为其找到对应的位置,如果没有那么说明已经满载了,此时直接执行四次挥手,即将文件描述符关闭。在select中,需要关心的事件与已经就绪的事件使用的是同一个fd_set位图结构,而在poll中,events表示的是OS需要关心该fd中的事件;原创 2022-09-13 14:17:16 · 246 阅读 · 0 评论 -
五种IO模型总结
大部分情况下都是阻塞IO,比如read函数就是一个阻塞IO,我们可以通过fcntl函数来将阻塞IO变成非阻塞IO。当成功返回大于0的数(表示某一种含义),失败返回-1。第一个参数代表文件描述符,第二个参数代表功能,cmd不同,该函数的功能也不同,最后一个参数是可变参数扩展,用于指定具体的功能。F_DUPFD:复制一个现有的描述符。F_GETFD或F_SETFD:获得/设置文件描述符标记。F_GETFG或F_SETFL:获得/设置文件状态标记。原创 2022-09-11 08:47:49 · 216 阅读 · 6 评论 -
数据链路层(以太网帧与ARP协议)
当MAC协议层通过对有效载荷的解析发现是ARP的请求或者应答的时候,会将报文直接交给ARP协议,ARP协议对报文进行处理之后再返回给MAC协议,此时就不会经过网络层,如果MAC协议通过解析发现是一个IP协议的话,就会将数据发送给网络层,并一层一层向上处理。其中ARP请求报文中包含目的IP,在局域网中的每一台主机都会接收到该报文,并将其进行解包,拿到其中的目的IP和自己的IP进行对比,如果相等则说明是发送给自己的报文,如果不相等则丢弃。由于在请求的时候,还并不知道MACB的值,因此将目的MAC地址填为全F。原创 2022-09-10 09:57:41 · 1201 阅读 · 0 评论 -
IP报文发送过程和原理
在整个的大网络中,我们会发现,不同的局域网中可以有相同IP的主机。当一台主机想像另一台主机发消息的时候,会首先查看自己的网络号与当前局域网的网络号是否相同,如果不相同,就会到路由器构成的网络中去查找哪个网络号符合条件,找到符合条件的网络号之后,再到该网络号对应的局域网中根据主机号找到对应的主机。13位分片偏移:是分片相对于原始IP报文开始处的偏移,其实就是在表示当前分片在原报文处在哪个位置,实际偏移的字节数是这个值*8得到的,因此除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。原创 2022-09-09 09:33:33 · 2529 阅读 · 0 评论 -
TCP协议(全面总结)
本质上是验证两者的收发能力。1.确认双方主机是否健康,只有主机健康才能传输信息。2.验证全双工,三次握手我们是能看到双方都有收发的最小次数。第一次握手和第二次握手可以验证客户端的收发能力,因为在第二次握手时可以确定第一次握手成功,同时第二次握手时client来接收。对于server来说,第一次握手和第三次握手可以验证它的收发能力。3.还可以预防一些SYN攻击,如果是一次握手的话,就可能有被大量SYN链接请求攻击的影响,因为建立一个链接就需要消耗一些资源。原创 2022-09-02 11:28:50 · 1110 阅读 · 18 评论 -
常用端口与udp协议
udp是全双工的,即可以在sendto的同时调用recvfrom,应用层我们调用的recv,read,write,sendto等函数,与其说是收发函数不如说是拷贝函数,其实都是在缓冲区中完成拷贝。udp具有接收缓冲区,但是这个接收缓冲区不能保证收到的udp报的顺序和发送udp报的顺序一致,如果缓冲区满了,再到达的udp数据就会被丢弃;0-1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他们的端口号都是固定的。面向数据报:不能够灵活的控制读写数据的次数和数量。......原创 2022-08-30 09:39:03 · 2051 阅读 · 6 评论 -
https的加密原理
当用户端发起通信请求的时候,服务端将公钥S发送给客户端的过程中被拦截,中间人将公钥S替换为非对称公钥M,然后发给客户端,客户端将使用收到的M公钥来对对称公钥X进行加密,并发送给服务端,此时中间人再进行拦截,使用M’进行解密拿到公钥X,再使用S对X进行加密,并发送给服务端,服务端使用S’进行解密,此时客户端和服务端都不知道X已经被泄漏了,它们之后的通信中间人都可以使用X进行解密并获取。注意,使用这种方式进行通信,一对公钥私钥只能保证单向数据的可靠性,如果保证双向通信,需要有两对公钥和私钥。...原创 2022-08-27 09:41:01 · 758 阅读 · 18 评论 -
http(请求方法,状态码,Cookie与Session)
此时就可以保证浏览器中的Cookie的信息是服务端文件的session_id,所有的http请求都会有浏览器自动携带cookie中的session_id,后序server依旧可以认识client,,也是一种会话保持的功能,但是我们还有cookie文件被泄漏的风险。注意:由于应用层是人要参与的,人的水平参差不齐,http的状态码很多人不清楚该如何使用,又因为浏览器的种类太多了,导致可能对状态码的支持没有那么好,类似于404的状态码对浏览器没有指导意义,浏览器只会正常显示网页。基本所有的网站都有其对应的首页。原创 2022-08-25 08:00:00 · 839 阅读 · 2 评论 -
http协议(序列化与反序列化)
我们可以将上面的代码分为三部分,分别是基本通信代码(会话层),序列化反序列化代码(表示层),约定以及业务逻辑代码(应用层)。这些在TCP/IP四层协议中统称为应用层。http协议是应用层协议,因此需要完成以上三个工作。原创 2022-08-19 16:45:23 · 1243 阅读 · 2 评论 -
http协议(协议发送接收格式)
其中请求方法有很多,可以是Get等,http的版本有1.1等,状态码我们比较常见的就是404,对该状态码的解释是not fount。通过观察格式,我们发现IP是以域名的方式来呈现的,比如baidu.com,并不是我们所熟悉的点分字符串的形式。IP和找到网络中的主机,IP+端口号可以找到网络中的唯一进程,而URL就是用来确定全网中唯一资源的。它表示的是我们的搜索内容,可以看到这里的wd=C%2B%2B,%2B表示的就是一个+。http解包的方式:一行一行读取,直到读到空行,表示之前的都是报头,下面的是报文。.原创 2022-08-19 09:22:37 · 811 阅读 · 1 评论 -
TCP实现网络通信(多进程与多线程版本)
第一个参数代表用于监听的套接字文件的文件描述符,第二个参数为服务端的协议地址空间,第三个参数为该协议地址空间的大小。●获取新连接到应用层:accept(),返回值为一个新的套接字的文件描述符,参数为监听套接字的文件描述符。● 创建网络套接字:socket(),协议族为AF_INET,套接字类型为SOCK_STREAM。●创建网络套接字:socket(),协议族为AF_INET,套接字类型为SOCK_STREAM。● 监听网络连接:listen(),参数为套接字的文件描述符。●关闭套接字文件:close().原创 2022-08-17 15:45:39 · 728 阅读 · 1 评论 -
网络通信过程的解析
数据链路层:负责设备之间的数据帧的传送和识别,例如网卡设备的驱动,帧同步(就是说从网线上检测到什么信号作为新帧的开始)、冲突检测(如果检测到冲突就自动重发),数据差错校验工作等。它的作用是将主机链接起来。这个地址与网络无关,也即无论将带有这个地址的硬件(如集线器、网卡、路由器等)接入到网络的何处,它都有相同的MAC地址,是不可变的。网络层:负责地址管理和路由选择,例如在IP协议中,通过IP地址来是被一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由),路由器工作在网络层。...原创 2022-08-15 11:48:05 · 715 阅读 · 13 评论 -
网络套接字(Udp实现简单的网络通信)
对于服务器来说,如果绑定的是确定的IP,那么只有发向该IP的数据才会被交给网络进程,但是一般服务器可能由多张网卡,配置了多个IP,我们需要不是发给某个IP的数据,而是发给所有IP的数据,因此在绑定服务器IP的时候,通常使用INADDR_ANY。第一个参数表示套接字的文件描述符,第二个参数表示缓冲区的大小,第三个参数表示方式,第四个参数表示向谁发送数据,第五个参数表示发送数据的长度。当创建套接字失败,则返回-1,如果成功则返回的是套接字的文件描述符,套接字是一个抽象层,用户可以将其像文件一样打开,读写操作。.原创 2022-08-11 09:38:51 · 1086 阅读 · 19 评论