linux网络编程
文章平均质量分 71
为了维护世界和平_
好好学习,天天向上
展开
-
linux性能分析之网络篇
在每个CPU上启动一个内核线程,并可以通过/proc/net/pktgen下面的同名文件,跟这些线程交互;而pgctrl则主要用来控制这次测试的开启和停止。pktgen支持丰富的自定义选项,方便你根据实际需要构造所需网络包,从而更准确地测试出目标服务器的性能。吞吐量6702.69[Kbytes/sec]received响应时间0.225[ms]每秒请求数11972.18,吞吐量17.65MB,平均延迟83.15。参数说明-c并发数,-n请求总数。..................原创 2022-07-26 10:00:56 · 2306 阅读 · 0 评论 -
linux内核网络TIME_WAIT
目录四次挥手过程出现的现象如何查看信息TIME_WAIT状态等待的时间 TIME_WAIT 的作用TIME_WAIT副作用解决方法1、将系统值(net.ipv4.tcp_max_tw_buckets)调小2、调低TCP_TIMEWAIT_LEN3、SO_LINGER4、net.ipv4.tcp_tw_reuse5、SO_REUSEADDR TCP 连接终止时,主机 1 先发送 FIN 报文,主机 2 进入 CLOSE_WAIT 状态,并发送一个 ACK 应答,同时,主机 2 通过 read 调原创 2022-06-06 19:53:57 · 3419 阅读 · 2 评论 -
TCP的“非”可靠性
TCP的非可靠性,是因为机器或者程序异常终止,导致终止连接没有完成,从而导致数据包丢失原创 2022-06-12 11:03:36 · 2133 阅读 · 2 评论 -
网络中的拥塞控制与数据传输
网络调用send并不意味着将数据立刻发送,这些数据只是从应用程序中被拷贝到了系统内核的套接字发送缓冲区中。至于什么时候发生出去,有TCP内核协议栈决定。 拥塞控制常用的算法 “慢启动”算法,慢慢地将网络发送数据的速率增加到一个阈值。超过这个阈值之后,慢启动就结束了。 “拥塞避免”算法,TCP 会不断地探测网络状况,并随之不断调整拥塞窗口的大小。 TCP 发送缓冲区的数据是否能真正发送出去,至少取决于两个因素,一个是当前的发送窗口大小,另一个是拥塞窗口大原创 2022-06-09 09:11:55 · 527 阅读 · 0 评论 -
TCP 连接中的keep-alive
目录keep-alive保活机制好处应用层保活 在一个长连接内,在一段期间,如果没有任何相关的活动,TCP保活机制开始作用。每隔一段时间,发送一个报文,如果连续几个报文都没有得到响应,则认为当前TCP连接已经失效。内核中的变量Document/networking/ip-sysctl.txt默认设置是 2 小时、75 秒和 9 次探测。说明 可以在两侧开启,也可以在一侧开启。 服务器端要探活client来保证自己不会维护无效连接,客户端来探活保持自己是不是可以原创 2022-06-08 18:44:18 · 1893 阅读 · 0 评论 -
linux 网络中close 与 shutdown
目录closeshutdown两者区别使用场景 TCP是双向的,数据流的写入-读出的方向,在绝大多数情况下,TCP连接都是先关闭一个方向,另外一个方向还可以进行数据传输。“半关闭”状态。函数作用:函数会对套接字引用 减一,引用计数到0,就会对套接字释放,关闭TCP两个方向的数据流。在输入方向,系统内核会将套接字设置为不可读;在输出方向,系统内核尝试将发送缓冲区的数据发送给对端,并最后向对端发送FIN报文,接下来再对该套接字进行写操作会返回异常。如果对端没有检测到套接字关闭,还会继续发送报原创 2022-06-07 19:48:08 · 876 阅读 · 0 评论 -
linux网络编程之epoll的ET和LT触发
epoll对文件描述符有两种操作方式概念:1)LT(Level Triger,电平触发)模式,默认2)ET(Edge Triger,边沿触发)模式区别:当epoll_wait检测到其上有事件发生,将次事件通知应用程序后,1)LT: 应用程序可以不立即处理此事件,epoll_wait还会再次通告次事件2)ET:应用程序必须立即处理,因为后续的epoll_wait不再向应用程序通知这一事件。LT函数在读取时,使用recv读取一次void lt( epoll_event* events, i原创 2022-02-12 16:25:59 · 705 阅读 · 0 评论 -
linux网络编程之高级I/O函数
目录splicesendfilereadv、writevdupteefcntlsplice在两个文件描述符之间传递数据 ssize_t splice(int fd_in, loff_t *off_in, int fd_out, loff_t *off_out, size_t len, unsigned int flags);ret = pipe(pipefd);ret = splice(connfd,NULL,pipefd[1],NULL,32768,原创 2022-02-11 21:29:57 · 737 阅读 · 0 评论 -
使用tcpdump 观察DNS IP TCP通信过程
使用tcp查看DNS通信过程(base) root@ubuntu:~# sudo tcpdump -i -X ens33 -nt -s 5000 port domaintcpdump: -X: No such device exists(SIOCGIFHWADDR: No such device)(base) root@ubuntu:~# sudo tcpdump -i ens33 -nt -s 5000 port domainIP 192.168.0.107.46401 > 192.1原创 2022-02-10 21:39:35 · 2173 阅读 · 0 评论 -
linux网络编程之epoll reactor模式
epoll reactor模式程序流程:epoll_create创建监听-》epoll_ctl 添加fd-》while(1) epoll_wait 监听-》对应监听fd的事件-》返回监听满足的数据-》判断返回数组元素-》lfd满足–accept 设置cfd读事件-》cfd满足 -》recv 读 cfd从监听队列删除,epoll_ctrl设置回调EPOLLOUT写-》添加到队列EPOLL_CTL_ADD,反复读写#include<stdlib.h>#include<stdio.h&原创 2022-02-09 19:24:46 · 1097 阅读 · 0 评论 -
linux网络编程之select、poll、epoll
select多路IOint select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout); nfds:监听的所有文件描述符中,最大文件描述符+1 readfds: 读文件描述符监听集合。 writefds:写文件描述符监听集合。 exceptfds:异常文件描述符监听集合 timeout: > 0: 设置监听超时时长。 NULL: 阻塞监听原创 2022-02-07 20:51:23 · 437 阅读 · 0 评论 -
linux网络编程之多进程、多线程
这里写目录标题多进程模型demo多线程模型demo先read 函数的返回值 非常重要> 0 实际读到的字节数= 0 已经读到结尾(对端已经关闭)-1 应进一步判断errno的值:重要!!! -1一定要进行判断,否则接收端一直在接收 errno = EAGAIN or EWOULDBLOCK 设置了非阻塞方式读,没有数据到达。 errno = EINTR 慢速系统调用被 中断。 errno = “其他情况” 异常。多进程模型socket()bind()listen(原创 2022-02-07 14:13:53 · 751 阅读 · 0 评论 -
linux网络编程之基础模型
创建套接字int socket(int domain,int type,int protocol);domain:协议族AF_UINX(本地套接字),AF_INET(网络套接字)type:套接字通信类型SOCK_STREAM:有序,可靠,面向连接的双向字节流SOCK_STRDGRAM数据报服务,UDPprotocol:使用的协议命名套接字bind系统调用把参数address中的地址分配给与文件描述符socket关联的未命名套接字int bind(int socket,const st原创 2022-02-06 19:46:28 · 684 阅读 · 0 评论 -
linux网络编程一
大小端小端字节序:高位字节存储在内存的高地址处,也称为 主机字节序 PC机大多采用此模式大端字节序:高位字节存储在内存的低地址处,也称为 网络字节序;网络端传输大小端的不一致需要转换原创 2022-02-02 22:38:06 · 1340 阅读 · 0 评论