网络
文章平均质量分 82
久菜
这个作者很懒,什么都没留下…
展开
-
对于网络IO的理解
首先服务端将本机地址和端口bind在listensock上,再用listensock去将这个套接字设置为listen状态,然后调用accept,进入阻塞状态。如果此时有客户端请求连接,就是第一次握手的开始。客户端会先调用connect来申请连接:connect调用时是发送SYN,然后服务端返回SYN+ACK,然后客户端的connect返回,发送最后一个ACK,服务端接收到以后accept返回,开始进行read。这里的过程,服务端会被阻塞两次,一次是accept,一次是后续的read。原创 2024-03-05 10:33:54 · 485 阅读 · 0 评论 -
IO多路转接poll和epoll
假设你是一家电商平台的客服人员,每天需要处理数千个用户的咨询和请求。你需要实时地回答用户的问题、处理订单、解决客户投诉等。这个过程中,你能同时处理的客户请求有限,因为人的处理速度是有限的。这时,你可以将每一个用户的请求看作是一个连接,在处理用户请求时,可以采用以下两种不同的方式:你会不断地询问每一个用户是否有新的问题或请求,等待他们的回应。这样做会造成你需要不停地轮询每一个用户,即使他们没有新的请求。这种方式效率低下,容易出现资源浪费。原创 2023-09-06 17:34:26 · 89 阅读 · 0 评论 -
IO多路转接select
当有新的连接请求到达时,select 函数会返回监听套接字的就绪状态,然后可以使用 accept 函数接受连接请求并创建新的套接字来处理该连接。fd_set是一个位图结构,可以理解为一个由比特位作下标(第几个比特位就代表第几个fd)组成的数组,如果取fd_set的长度为1字节,那么这个结构可以表示8个比特位,也就是8个fd。与read, write, recv, send本身的等待功能不同的是,这些函数的等待只能传入一个fd,而select可以传入多个fd,也就是能够同时等待多个fd。原创 2023-09-06 12:28:48 · 67 阅读 · 0 评论 -
非阻塞IO
其中errno=11,代表的是底层数据未就绪,而不是读取出错。这个11被重定义成了宏,叫做EWOULDBLOCK或者EAGAIN,从名字上看代表着再试一次。对于一个文件描述符,默认情况下都是阻塞的,fcntl是一个将fd设置为非阻塞的函数。诸如此类函数出错返回时,都会将errno变量设置,用于表明出错原因。对于cmd,目前需要的参数有cmd=F_GETFL或F_SETFL。那么如何甄别是真的出错 or 没有数据?一直阻塞住直到你输入数据。原创 2023-09-05 16:39:23 · 38 阅读 · 0 评论 -
网络基础(1)
TCP/IP分层,局域网传输原理原创 2023-03-06 12:18:46 · 447 阅读 · 0 评论 -
网络基础(2)
套接字、网络通信原创 2023-03-07 15:15:41 · 513 阅读 · 0 评论 -
ICMP协议和NAT技术
一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通;但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因。利用NAT技术可以将私有IP与全局IP形成键值一一对应,当私有IP想出去公网时,就进行查找转换;同理公网IP想进入私网,也是进行查找转换。例如私有IP的世界中,某个私有IP具有唯一性,同样全局IP在全局世界中具有唯一性。IPv4协议中,存在IP地址数量不充足的问题,NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能;原创 2023-05-08 14:31:54 · 819 阅读 · 0 评论 -
ARP协议结构
以ARP协议为例,它的功能最终是获取到MAC信息,服务于链路层,从这点考虑,ARP是链路层协议;但是从层次来看,ARP基于Ethernet协议,IP协议基于Ethernet协议,它们在Ethernet协议里面有独立的Type类型,前者是0x0806,后者是0x0800,既然ARP和IP协议"平起平坐",那么IP是网络层,ARP难道就不是网络层?,此时的路由器并不知道主机B对应的MAC地址是什么,并且此时的报头也没有封装主机B的MAC地址。那么是如何通过目的IP得到主机B的MAC地址的?这里就要用到ARP。原创 2023-05-07 22:43:42 · 483 阅读 · 0 评论 -
数据链路层
以太网” 不是一种具体的网络, 而是一种技术标准;既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等。源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制。帧协议类型字段有三种值,分别对应IP、ARP、RARP。由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包.MSS和MTU的关系。原创 2023-05-06 20:16:05 · 608 阅读 · 0 评论 -
IP协议基础
当产生数据未正常接收等问题的时候,TCP有超时重传、快重传等各种策略,这相当于给网络层的IP再次分发了任务,这就是一种决策,就是一种可靠性。IP数据包传输的时候每一跳是在数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。数据包传输主要是要找到入口路由器,意味着即将目的IP对应的局域网,其次才可以找到目的IP的主机。而如何把数据包从A交到B,是数据链路层解决的,也就是MAC帧,目前网络层决定的是A到B。而每一跳之间的连接叫做一个节点,这里指的是路由器。原创 2023-05-05 20:02:33 · 444 阅读 · 0 评论 -
IP报文结构
的问题。原创 2023-05-05 16:27:26 · 964 阅读 · 0 评论 -
全链接和半链接队列
就像海底捞吃饭一样,里面的在吃,外面的在等,当有人吃饱离开了,我们就可以立即把外部等待的客人接进来。但是队列也有满的时候,为什么不摆长一点呢?队列太长就失去了排队的意义了,因为在资源浪费和等待时间太长的衡量之下,选择适中的队列大小。这个队列就相当于全链接队列,新建立的链接来到以后可能不会马上被处理,所以会进入到队列中。全连接队列满了的时候, 就无法继续让当前连接的状态进入 established 状态了.全连接队列的长度会受到 listen 第二个参数的影响.为什么要维护全链接队列?原创 2023-05-04 20:00:40 · 95 阅读 · 0 评论 -
为什么是三次握手和四次挥手
什么是TIME_WAIT状态原创 2023-05-04 17:50:51 · 1346 阅读 · 1 评论 -
TCP协议策略
校验和序列号(按序到达)确认应答超时重发连接管理流量控制拥塞控制滑动窗口快速重传延迟应答捎带应答。原创 2023-05-04 17:28:23 · 794 阅读 · 0 评论 -
TCP协议结构
在发送信息时使用TCP协议会将信息拆分成多个数据报发送给接收方,发送数据时会对每个字节的数据进行编号,等数据到达接收端是会对数据进行重新排序,避免网络数据报乱序。也即是说,32位序号里保存的是对历史报文数据+1,或者说是32位序号里的数据+1。例如接收到的报文是确认序号+ACK,这个标志位通常置1。通俗的说,在你发送序号的时候,也可能在确认别人发来的序号,那么此时就需要将序号和确认序号分开两个字段。这样的设计可以提高应用层响应效率,其次是当前的网络状况是只有TCP协议可以知道的,应用层完成不知道。原创 2023-05-04 14:10:16 · 585 阅读 · 0 评论 -
UDP协议
在应用层有一批系统调用接口:read,write,recv,send等函数,与其说是收发函数,不如说是拷贝函数;在拷贝完成以后,什么时候发、怎么发、发多少都是由OS决定的。如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节;UDP没有真正意义上的 发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。UDP在传输层,之所以叫做传输层,是因为这里提供了传输数据的策略(TCP、UDP)。原创 2023-05-03 23:09:44 · 597 阅读 · 0 评论 -
HTTP加密
首先篡改整个证书是可行的,因为改CA机构的A公钥大家都有,但是这样的话就无法重新形成数字签名了,因为这个数字签名是CA机构自己用-A私钥生成的。在通信前,server端将自己的公钥S给到client端,然后client端用这个公钥S给自己的私钥-C进行加密,传输给server端,这是非对称方式的通信。这也是有证书和无证书的很大差别,如果没有证书的话,client端并不会知道自己获得的公钥是否是自己想要的,但是有了证书以后就能通过域名知道是否合法。生成会话密钥:客户端生成一个随机的对称密钥,称为会话密钥。原创 2023-05-03 20:34:38 · 2308 阅读 · 0 评论