
网络编程
奇思妙物
专业共享软件系统服务商
展开
-
nginx的惊群问题
问题:nginx是一个高性能网络并发服务器,它的进程模型是,多进程模型,有一个master进程,会启动多个worker进程,(一般是根据cpu内核个数决定)然后每个进程又利用IO多路复用技术,监听多个socket,达到高并发的能力。它存在一个问题就在于,每个worker子进程都会去accept()监听套接字,当监听套接字有一个时间到来,那么所有子进程都会被唤醒去获取事件,但是最终只会有一个进程真正...原创 2018-05-03 10:56:21 · 151 阅读 · 0 评论 -
loopback地址
loopback地址一般被完整的集成在计算机系统的内部网络框架中。原创 2018-06-14 17:04:04 · 872 阅读 · 0 评论 -
pcap文件
pcap包文件格式:基本格式:文件头:数据包头,数据报:数据包头,数据报tcpdump和wireshark捕获网络数据落地的文件都是pcap文件格式。pcap文件头结构体:文件头结构体,libpcap源码中定义如下 struct pcap_file_header { bpf_u_int32 magic; u_short version_major; u_s...原创 2018-06-05 15:52:08 · 1053 阅读 · 0 评论 -
网络编程:流量控制工具tc
tc:traffic controltc工具是基于Linux 内核内置的 Traffic Control框架。tc与TC框架的关系类似于iptable和netfilter的关系。TC框架与netfilter的区别:netfilter,被设计用来在网络协议栈的内核路径上过滤数据包,在一条路上的关卡一样,在5个关键点设置了关卡,结果就是若干动作:接受,丢弃,排队,导入其他路径等。TC则不同,它旨在对数...原创 2018-05-28 17:31:46 · 1647 阅读 · 0 评论 -
网络编程:iptable和netfilter
结构图:iptable是用户层的网络工具netfilter工作在IP层,在IP层中设置了5个钩子函数,实现对数据包过滤目前Linux2.6内核的netfilter支持IPv4和IPv6以及DECnet等协议栈。netfilter可以在每个关键点上预先注册钩子函数。在数据包流经整个内核协议栈的整个过程中,在一些已预定义的关键点上 PRE_ROUTING,LOCAL_IN,FORWARD,LOCAL_...原创 2018-05-25 17:35:24 · 1131 阅读 · 0 评论 -
tcp中的listen的backlog参数
实际上,在server端,调用listen的时候都会指定一个backlog参数。针对监听套接字,内核都会为它维护两个队列。一个是未完成队列,就是接受到客户的syc请求以后,会放入的队列。二是已完成队列,就是接收到客户的ack分节以后,连接完成建立。accept就会从这个队列的队头逐个的去获取连接。未完成队列的长度是内核参数决定的。在linux系统下,/proc/sys/net/ipv4/tcp_m...原创 2018-04-30 00:46:42 · 435 阅读 · 0 评论 -
tcp连接的状态转换图
1、三次握手建立连接client端:closed状态listen状态发送syn包后:syn-sent状态接收到ack包后:established状态server端:closed状态listen状态接收syn包后:syn-rcvd状态接收到ack包后:established状态2、四次挥手断开连接client端(主动关闭方):established状态发出FIN包:FIN-WAIT1状态接收到ACK...原创 2018-04-30 00:09:26 · 291 阅读 · 0 评论 -
网络字节序函数
字节序一般分为两种:小端字节序:将低序字节存储在起始位置大端字节序:将高序字节存储在起始位置网络字节序一般为大端字节序主机字节序就根据各个机器实际情况决定。所以通信过程中就存在了字节序转换的一些操作,网络编程中专门提供了一些函数实现字节序转换的操作。htons()htonl()ntohs()ntohl()...原创 2018-04-29 01:27:20 · 331 阅读 · 0 评论 -
tcp输出过程
1、write操作每一个tcp套接字都有一个发送缓冲区,当我们应用程序调用write操作时,内核会从应用程序的缓冲区复制所有的数据到内核中的套接字发送缓冲区中,这个时候write就会陷入阻塞,直到内核拷贝完所有数据到发送缓冲区才会返回。因此,调用write操作成功并返回,只是表明数据从用户态拷贝到了内核中的套接字缓冲区中。然后就是会将内核中套接字缓冲区的数据通过网卡按照对应的tcp规则发送到对端的...原创 2018-04-29 01:04:03 · 549 阅读 · 0 评论 -
TCP中的time_wait状态
TCP连接的建立三次握手,连接的断开需要四次挥手。TCP连接在四次挥手的过程中,主动关闭的一端往往会进入一个叫time_wait的状态。这个状态是被动关闭端发出FIN分节以后,被动端就会进入Last_ack状态,主动关闭端接受到这个FIN分节以后就会发出最后一个ack分节,并进入time_wait状态,一般是持续2MSL时间,MSL时间是说最长分节生命存活期,每个IP数据包在因特网中存活的时间都是...原创 2018-04-29 00:16:36 · 601 阅读 · 0 评论 -
网络编程——socket创建
网络编程中,首先第一步都是创建对应的socketint socket(int family,int type,int protocol);参数:family指明协议族,IPV4或IPV6type指明套接字类型,字节流套接字,数据报套接字,原始套接字protocol指明协议类型常值,TCP协议,UDP协议连接套接字的配置会继承监听套接字的配置。创建的每个tcp套接字和sctp套接字都在内核有一个接收...原创 2018-05-19 12:06:00 · 368 阅读 · 0 评论 -
tcp最大连接数限制
1、单个进程可打开的文件限制数socket的创建实际上也是开的fd所以socket的数目会受到fd大小的限制单个进程能打开的最大文件限制可通过 ulimit -n 查看。一般系统默认是打开1024个。2、本地机器端口数一般client需要一个本地端口去连server,端口是标识进程的。一般默认是 1024 到 65535server端一般只需要监听一个端口,所以的client的syn包都会去这个...原创 2018-04-28 10:43:49 · 5545 阅读 · 1 评论 -
tcp连接的几种标志位
1、SYN(synchronous建立联机) 建立连接的时候,会首先发送一个syn包,syn会携带一个序列号,确认此次连接的初始序列号,syn包不能携带数据。但要消耗一个序号。2、ACK(acknowledgement 确认) ACK报文是确认报文,tcp有反馈机制,对每个包都要有ack确认,对ack包不进行ack确认。ACK包可以携带数据,如果不携带数据不消耗序号。3、PSH(push传送) 4...原创 2018-05-03 11:31:18 · 2892 阅读 · 0 评论 -
tcp连接关闭方式:close,shutdown和RST包
socket关闭函数:1、close()close只有在引用计数为0时,才会真正调用close(),否则只是引用计数减1 。调用close(),系统会尝试发送完内核缓冲区内所有数据,然后才会发送FIN。2、shutdown()shutdown不理会引用计数和内核缓冲区内的剩余待发数据包,直接发送FIN。shuwdown可以只关闭套接字某个方向的连接,例如关闭发送,关闭接收,或两者都关闭。3、让套接...原创 2018-05-03 11:11:15 · 3779 阅读 · 0 评论 -
Linux命令:ifconfig
主要用于查看网卡物理接口信息通过ifconfig得到的网卡信息如下:eth0 Link encap:Ethernet HWaddr 00:16:3E:00:1E:51 inet addr:10.160.7.81 Bcast:10.160.15.255 Mask:255.255.240.0 UP BROADCAST RUNNING MULT...原创 2018-06-14 19:36:17 · 262 阅读 · 0 评论