
Linux网络编程
文章平均质量分 89
Linux网络编程
~风起~
这个作者很懒,什么都没留下…
展开
-
如何编写高性能服务端程序
一个TCP连接的建立,要在客户端和服务端之间,完成三次握手,然后。任何影响accept取连接的因素,都会影响并发度。nginx只是具有反向代理和负载均衡的功能,3、应用服务器的处理水平又该怎么提高?等策略,提高数据库处理能力,减少压力!2、那么多的连接数怎么进行业务处理?一、提高并发能力必须解决的问题。1、如何提高并发连接数?等策略,来提升代码性能。二、高性能服务端编程框架。(1)代码中的业务逻辑。原创 2024-12-25 21:01:34 · 336 阅读 · 0 评论 -
网络协议入门
它们读取这个包的“标头”,找到接收方的 MAC 地址,然后与自身的 MAC 地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。TCP 数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常 TCP 数据包的长度不会超过 IP 数据包的长度,以确保单个 TCP 数据包不必再分割。(“路由”就相当于现象生活中的路标,规定这些数据包的走向,就是指如何向不同的子网络分发数据包,这是一个很大的主题,本文不涉及。上面提到,以太网数据包的“标头”,包含了发送者和接受者的信息。原创 2024-12-24 20:19:16 · 1332 阅读 · 0 评论 -
Linux网络编程——进程、线程同步方式
要注意这里的同步并不是指同时进行的意思,而是按照先后顺序依次进行。原创 2024-12-04 21:57:03 · 1023 阅读 · 0 评论 -
Linux网络编程——5种io模型
tcp服务器分为了5种io复用模型,分别是:阻塞io模型 ,非阻塞io模型,io复用,信号驱动io,异步io本文会讲前面3种io模型的tcp服务器实现(本文只做tcp服务器实现,客户端逻辑处理,接收数据等缓冲区不做深入说明)原创 2024-12-04 21:43:49 · 631 阅读 · 0 评论 -
Linux网络编程——内网和外网之间的通信
所以,A 家庭的局域网 IP 和 B 家庭的局域网 IP 相同很正常,但是,最终 A 和 B 能上网(数据走出去)还是通过运营商的公有 IP,毕竟,公有 IP 的资源有限,这一片区域的用户使用的很有可能(实际上就是这样的)是同一个公有 IP,这样的话,又回到前面的问题,假如 A 和 B 的局域网 IP 相同(192.168.31.11),当他们同时访问百度服务器的时候,百度服务器如何区分哪个是 A,哪个是 B 呢?,通常指的是出口,转发来自内部 LAN 接口的 IP 数据包,这个口的 IP 是唯一的。原创 2024-11-27 21:08:32 · 950 阅读 · 0 评论 -
Linux网络编程——epoll原理详解及epoll反应堆模型
设想一个场景:有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收TCP包),也就是说在每一时刻进程只需要处理这100万连接中的一小部分连接。那么,如何才能高效的处理这种场景呢?进程是否在每次询问操作系统收集有事件发生的TCP连接时,把这100万个连接告诉操作系统,然后由操作系统找出其中有事件发生的几百个连接呢?实际上,在Linux2.4版本以前,那时的select或者poll事件驱动方式是这样做的。原创 2024-11-25 10:00:00 · 2442 阅读 · 0 评论 -
Linux网络编程——IO 多路复用之poll(高效并发服务器)
poll的实现和 select非常相似,只是描述 fd 集合的方式不同,poll使用 pollfd 结构而不是 select的 fd_set 结构,其他的都差不多。poll在应付大数目的文件描述符的时候相比于select速度更快;它没有最大连接数的限制,可以突破1024监听上限。大量的fd的数组被整体复制于用户态和内核地址空间之间,而不管这样的复制是不是有意义;与select一样,poll返回后,需要轮询pollfd来获取就绪的描述符。原创 2024-11-25 08:00:00 · 507 阅读 · 0 评论 -
Linux网络编程——IO 多路复用之select(高效并发服务器)
【优点】:select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点。每次调用 select(),都需要把 fd 集合从用户态拷贝到内核态,这个开销在 fd 很多时会很大,同时每次调用 select() 都需要在内核遍历传递进来的所有 fd,这个开销在 fd 很多时也很大;单个进程能够监视的文件描述符的数量存在最大限制,在 Linux 上一般为 1024,可以通过修改宏定义甚至重新编译内核的方式提升这一限制,但是这样也会造成效率的降低。原创 2024-11-24 19:18:35 · 899 阅读 · 0 评论 -
Linux系统编程——多进程和多线程并发服务器编程模型
在网络程序里面,一般来说都是许多客户对应一个服务器(多对一),为了处理客户的请求,对服务端的程序就提出了特殊的要求。原创 2024-11-23 16:36:58 · 936 阅读 · 0 评论 -
Linux系统编程——TCP协议详解(TCP报文、三次握手、四次挥手、TIME_WAIT状态、滑动窗口、拥塞控制、粘包问题、状态转换图)
我们知道服务端收到ACK,关闭连接。但是客户端无法知道ACK是否已经到达服务端,于是开始等待?等待什么呢?假如ACK没有到达服务端,服务端会为FIN这个消息超时重传 timeout retransmit ,那如果客户端等待时间足够,又收到FIN消息,说明ACK没有到达服务端,于是再发送ACK,直到在足够的时间内没有收到FIN,说明ACK成功到达。这个等待时间至少是:服务端的timeout + FIN的传输时间,为了保证可靠,采用更加保守的等待时间2MSL。原创 2024-11-23 16:30:59 · 1053 阅读 · 0 评论 -
Linux网络编程——TCP协议简介
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。原创 2024-11-17 18:37:11 · 1064 阅读 · 0 评论 -
Linux网络编程——UDP广播与多播
使用UDP协议进行信息的传输之前不需要建议连接。换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信息封装到一个待发送的报文中并且发送出去。至于服务器端是否存在,或者能否收到该报文,客户端根本不用管。网络上的广播指由一台主机向该主机所在子网内(同一个局域网)的所有主机发送数据的方式。原创 2024-11-17 18:26:14 · 1119 阅读 · 0 评论 -
Linux网络编程——UDP协议详解
UDP 是 User Datagram Protocol 的简称, 中文名是用户数据报协议,是一个简单的面向数据报的传输层协议,在网络中用于处理数据包,是一种无连接的协议。UDP不提供可靠性的传输,它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地。由于 UDP 在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。原创 2024-11-13 23:02:11 · 1623 阅读 · 0 评论 -
Linux网络编程——socket套接字及缓冲区详解
每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到网络,这些都是TCP协议负责的事情。函数也是如此,也从输入缓冲区中读取数据,而不是直接从网络中读取。I/O缓冲区在每个TCP套接字中单独存在;I/O缓冲区在创建套接字时自动生成;即使关闭套接字也会继续传送输出缓冲区中遗留的数据;原创 2024-11-13 22:53:27 · 994 阅读 · 0 评论 -
Linux网络编程——网络字节序和IP地址详解
字节序是指多字节数据的存储顺序,在设计计算机系统的时候,有两种处理内存中数据的方法:大端格式、小端格式。小端格式(Little-Endian):将低位字节数据存储在低地址;大端格式(Big-Endian):将高位字节数据存储在低地址。原创 2024-11-11 14:59:42 · 1221 阅读 · 0 评论 -
Linux网络编程——无连接和面向连接协议的区别(UDP,TCP)
从协议的角度来看,每个数据报都是一个独立的实体,与在两个相同的对等实体之间传送的任何其他数据报都没有关系,这就意味着协议很可能是不可靠的。回到与电话/寄信的类比中来,我们可以把 TCP 连接中的网络地址当作一个办公室总机的电话号码,把端口号当作办公室中某台正被呼叫的特定电话的分机号。面向连接的协议则维护了分组之间的状态,使用这种协议的应用程序通常都会进行长期的对话。对无连接协议来说,每个分组的处理都独立于所有其他分组,而对面向连接的协议来说,协议实现则维护了与后继分组有关的状态信息。它们的本质区别在于,原创 2024-11-10 20:31:58 · 1065 阅读 · 0 评论 -
Linux网络编程——网络协议入门
它们读取这个包的“标头”,找到接收方的 MAC 地址,然后与自身的 MAC 地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。TCP 数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常 TCP 数据包的长度不会超过 IP 数据包的长度,以确保单个 TCP 数据包不必再分割。(“路由”就相当于现象生活中的路标,规定这些数据包的走向,就是指如何向不同的子网络分发数据包,这是一个很大的主题,本文不涉及。上面提到,以太网数据包的“标头”,包含了发送者和接受者的信息。原创 2024-11-10 20:29:03 · 962 阅读 · 0 评论