
计算机网络
文章平均质量分 72
计算机网络
Eccentric哈哈
这个作者很懒,什么都没留下…
展开
-
105-Linux_Libevent库的安装与使用
Libevent 是开源社区的一款高性能的 I/O 框架库,使用 Libevent 的著名案例有:高性能的分布式内存对象缓存软件 memcached,Google 浏览器 Chromium 的 Linux 版本。原创 2023-05-02 18:54:23 · 1010 阅读 · 0 评论 -
104-Linux_select,poll,epoll的区别
由于每次 select 和 poll 调用都返回整个用户注册的事件集合(其中包括就绪的和未就绪的),所以应用序索引就绪文件描述符的时间复杂度为 0(n)epoll 则采用与 select 和 pol1 完全不同的方式来管理用户注册的事件。从实现原理上来说,select 和 poll 采用的都是轮询的方式,即每次调用都要扫描整个注册文件描述符集合,并将其中就绪的文件描述符返回给用户程序,因此它们检测就绪事件的算法的时间复杂度是 0(n)。epoll_wait 则不同,它采用的是回调的方式。原创 2023-05-02 15:51:51 · 73 阅读 · 0 评论 -
103-Linux_I/O复用方法之epoll
epoll 是 Linux 特有的 I/O 复用函数。它在实现和使用上与 select、poll 有很大差异。首先,epoll 使用一组函数来完成任务,而不是单个函数。其次,epoll 把用户关心的文件描述符上的事件放在内核里的一个事件表中。从而无需像 select 和 poll 那样每次调用都要重复传入文件描述符或事件集。但 epoll 需要使用一个额外的文件描述符,来唯一标识内核中的这个事件表。原创 2023-05-01 16:58:33 · 891 阅读 · 0 评论 -
102-Linux_I/O复用方法之poll
timeout 参数指定 poll 的超时值,单位是毫秒,timeout 为-1 时,poll 调用将永久阻塞,直到某个事件发生,timeout 为 0 时,poll 调用将立即返回。fds 参数是一个 struct pollfd 结构类型的数组,它指定所有用户感兴趣的文件描述符上发生的可读、可写和异常等事件。它是一系列事件的按位或,revents 成员则有内核修改,通知应用程序 fd 上实际发生了哪些事件。其中,fd 成员指定文件描述符,events 成员告诉 poll 监听 fd 上的哪些事件类型。原创 2023-04-30 19:08:15 · 827 阅读 · 0 评论 -
101-Linux_I/O复用方法之select
select 成功时返回就绪(可读、可写和异常)文件描述符的总数。select 失败是返回-1.如果在 select 等待期间,程序接收到信号,则 select 立即返回-1,并设置 errno 为 EINTR。readfds、writefds 和 exceptfds 参数分别指向可读、可写和异常等事件对应的文件描述符集合。maxfd 参数指定的被监听的文件描述符的总数。它通常被设置为 select 监听的所有文件描述符中的最大值+1。在一段指定时间内,监听用户感兴趣的文件描述符的可读、可写和异常等事件。原创 2023-04-30 17:27:50 · 671 阅读 · 0 评论 -
100-Linux_I/O复用
I/O 复用使得程序能同时监听多个文件描述符,这对于提高程序的性能至关重要。原创 2023-04-30 16:29:33 · 106 阅读 · 0 评论 -
99-Linux_C语言实现web服务器
【代码】99-Linux_C语言实现web服务器。原创 2023-04-29 18:37:55 · 937 阅读 · 1 评论 -
98-Linux_HTTP协议与web服务器
浏览器服务器建立连接后,如果两次以上的请求复用同一个 TCP 连接,则称之为长连接。如果浏览器发送一次请求报文,服务器回复一次应答就断开连接,下次交互再重新进行三次握手建立连接,那么就被称作短连接。使用长连接显然是更好一些,可以减少网络中的同步报文,也使得服务器的响应速度变快。原创 2023-04-28 10:27:10 · 710 阅读 · 0 评论 -
97-TCP为什么要有一个“TIME_WAIT“的状态
1) 可靠的终止 TCP 连接。2) 保证让迟来的 TCP 报文有足够的时间被识别并被丢弃 ;原创 2023-04-27 18:57:45 · 565 阅读 · 0 评论 -
96-Linux_UDP实现客户端和服务器端
recvfrom()接收数据,每次都需要传给该方法一个地址结构来存放发送端的地址。recvfrom()可以接收所有客户端发送给当前应用程序的数据,并不是只能接收某一个客户端的数据。sendto()用来发送数据,由于 UDP 是无连接的,每次发送数据都需要指定对端的地址(IP 和端口)。socket()用来创建套接字,使用 udp 协议时,选择数据报服务 SOCK_DGRAM。buff 和 len 参数分别指定写缓冲区的位置和数据长度。buff 和 len 参数分别指定读缓冲区的位置和大小。原创 2023-04-17 15:49:09 · 390 阅读 · 0 评论 -
95-拥塞控制
在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做拥塞。所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,涉及到所有主机,所有路由器,以及与降低网络传输性能有关的所有因素。原创 2023-04-17 15:27:01 · 480 阅读 · 0 评论 -
94-TCP是如何使用滑动窗口进行流量控制
在 TCP 的报头中有一个字段叫做接收通告窗口,这个字段由接收端填充,是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。所以发送端就会有一个发送窗口,这个发送窗口的大小是由接收端填充的接收通告窗口的大小决定的,并且窗口的位置会随着发送端数据的发送和接收到接收端对数据的确认而不断的向右滑动,将之称为滑动窗口。原创 2023-04-17 15:02:14 · 166 阅读 · 0 评论 -
93-TCP连接是如何保证可靠性的
TCP 发送的报文段是交给 IP 层传送的。但 IP 层只能提供尽最大努力的服务,也就是说,TCP 下面的网络所提供的是不可靠的传输。因此,TCP 必须采用适当的措施才能使两个运输层之间的通信变得可靠。原创 2023-04-16 22:35:47 · 109 阅读 · 0 评论 -
92-TCP三次握手及TCP四次挥手
TCP 协议提供的是:面向连接、可靠的、字节流服务。首先我们要明白服务器端为什么将ACK和FIN分开发送,原因就是只有服务器端close以后才会给客户端发送FIN,所以只要服务器端发送ACK的同时服务器端close就可以将ACK和FIN一起发送.第二次握手服务器端收到请求以后也会给客户端发送一个自己的SYN并且序号值seq=j,同时会发送一个ACK(是否确认号是否有效)且ACK的值会在客户端发送过去的seq的之上加一;第一次握手客户端给服务器端发送一个SYN(建立连接的请求)并且它的序号值seq=i;原创 2023-04-15 17:42:16 · 863 阅读 · 1 评论 -
91-Linux_多进程/多线程处理服务器并发
多进程/多线程处理服务器并发是为了解决recv阻塞问题;没有多线程多进程处理服务器并发时,只能有一个客户端与其进行通信,当有第二个连接服务器时,就会阻塞在recv阶段,所以引入多进程/多线程处理服务器并发就是为了解决recv的阻塞;原创 2023-04-15 15:51:20 · 476 阅读 · 0 评论 -
79-Linux_Socket实现客户端与服务器端间通讯
沾包(粘包)有影响就解决,没有影响就不用解决(比如文件传输就没有影响);套接字是一个全双工的。原创 2023-04-13 17:46:37 · 416 阅读 · 0 评论 -
78-Linux_tcp服务器客户端编程流程
(c/s)模型即(客户端/服务器端)模型所有的客户都通过服务器端访问所需资源.原创 2023-04-12 18:58:49 · 384 阅读 · 0 评论 -
76-TCP协议,UDP协议以及区别
TCP(Transmission Control Protocol)协议即为传输控制协议,是一种面向连接的,可靠的,基于字节流的传输层通信协议UDP协议就是用户数据报协议,,它为应用层提供不可靠、无连接、基于数据报地服务。“不可靠”意味着 UDP 协议无法保证数据从发送端正确地传送到目的端.原创 2023-04-12 15:52:04 · 681 阅读 · 0 评论 -
75-网络二(网络分层模型)
网络协议就是一组网络规则的集合,是我们共同遵守的约定或标准。原创 2023-04-12 11:43:51 · 650 阅读 · 0 评论 -
74-网络一(基础知识)
网络是由若干结点和连接这些结点的链路组成,网络中的结点可以是计算机,交换机、路由器等设备。**网络设备有:交换机、路由器、集线器****传输介质有:双绞线、同轴电缆、光纤**原创 2023-04-12 11:09:16 · 617 阅读 · 0 评论