text:
Gobala Krishnan
Amid all the noise and hype on the Internet today, not many people realize that all the ideas and techniques you can find are petty much useless if you don't first understand your business model. In other words, even the most amazing Internet marketing technique will not work if you don't understand how to apply it to YOUR business.
The 3 most popular business models are:
1) Affiliate Marketing
This is perhaps the most popular one out there, since there are absolutely no barriers to entry. Almost anyone can sign-up for an affiliate program for free and start promoting the product or service on the Internet with hopes that someone will buy, giving them instant commissions. Affiliate marketers don't carry any risk, since they do not pay for the creation of the product, they do not handle customer service and they do not need any up-front investments.
When you consider that those are the top three things people want to avoid, it's no surprise that almost everyone and their neighbor promotes an affiliate program or another. In fact, if there is a single reason why the Internet today is so proliferated with ads and banners, it's because of affiliate programs.
Even though there are so many affiliate marketers out there, only 5% ever make any money and only 1% makes big money. The "Super Affiliates" do it very differently from all the other millions; therefore they earn the big checks. You can get a good idea of how to be a good affiliate marketer here: http://affiliatemarketing.sitesell.com/globalmillionaire
2) E-book and Information Publishing
Sitting at the other end of the spectrum, e-book authors need to be more disciplined in their approach to Internet marketing. Of course, they also need to invest more than affiliates do. While affiliates can get away trying to "get something for nothing" the same is not true for the e-book type of business.
If you're thinking about publishing and selling your own e-book online, and you think it's going to be easy, think again. You'll need to learn a lot more than affiliates are required to. You'll need to spend some amount of money getting your business up and running. However, when you do it right, the payoff in this online business model is much more rewarding.
The reason why e-book marketers and "Infopreneurs" make more money is simple; they have very, very low production and maintenance costs. Anything digital doesn't cost a single cent to be produced in millions if necessary. Whatever initial start-up costs spent can be covered by selling just a few copies of high-margin e-books, and you can even recruit an army of affiliates who are more than willing to do all the selling for you.
Of course, it's not as easy as it sounds, but the point is, when done properly, the "E-book Publishing" model is a truly profitable business. You can learn more about e-book publishing at http://egoods.sitesell.com/globalmillionaire
3) Internet Based Network Marketing
I've heard many people say that the Internet and network marketing are a match made in heaven. In my opinion, though, almost 90% of people get it wrong when it comes to Internet based network marketing. People in this business usually think they're talking about network marketing, but in reality they are talking about affiliate marketing.
They try to make the Internet do all the work. They hide behind their computers and pretend everything's going great. They focus on selling more and more every month. They have systems that are so complicated only they can understand it. Well, that doesn't sound like network marketing to me!
Internet based network marketing is simple if you understand it, and are willing to put in the effort. The role of the Internet here is only to get you the names and contact details of people you can talk to, after which YOU, not a computer, has to build a relationship with these people and help them to start their own business.
For this simple purpose, it is not necessary for you to have a high-tech system and pretend that your auto responder is building relationships for you. It's not going to work. The key is to have simple systems that are duplicable, something you can teach to all those people you have built a relationship with. For this purpose I use NetMarkPro at http://www.netmarkpro.net/globalmillionaire and teach my own affiliates to use it too.
E-book authors, no matter what they say, have no obligation to teach you their "Secret Strategies to Become a Millionaire of any variations to that. The reason is simple; why tell you the absolute truth when you'll end up as their competitor? No one wants more competitors, right?
Internet based network marketing is very much the opposite of that. You HAVE to tell people EVERYTHING you know or your business will never take off. For this reason alone, I always recommend that if you're new to the online world, you need to first join an Internet based network marketing business at least to learn. Rest assured, no one will be selling you half-baked truths when their success ultimately depends on yours.
These are the Top 3 most popular online business models today. There are more, of course, and you can read about it at http://case-studies.sitesell.com/globalmillionaire
No matter which model you choose, make sure you understand the basics, and stop listening to and buying things that are not applicable to your business. Information overload can stop you before you even get started.
About the author:
Gobala Krishnan is a writer and home based busienss entrepreneur. Sign-up free for your own home based business opportunity at http://www.sfidreamteam.comtoday and build passive income now.


text:
The eleventh episode of Office Hours is here! This week, we continue our theme of education abroad opportunities and speak to Ernest Yanarella, Professor and Chair of the Department of Political Science, and Anthony Ogden, Director of Education Abroad. Join us as we talk with Yanarella about his upcoming education abroad opportunity in Shantou, China and with Ogden about the how-tos and benefits of education abroad and travel for students.
For more information about the education abroad course in Shantou, China, please click here.
Office Hours is produced by the College of Arts & Sciences and airs on WRFL FM 88.1 every Wednesday from 2-3 p.m. This podcast was produced by Casey Hibbard.
Office Hours with Ernest Yanarella and Anthony Ogden by UK College of Arts & Sciences is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

subset: commoncrawl


text:
Additional dates available below
Event Organized by:
Empire Medical Training
Learn More about Empire Medical TrainingWithin this training program, you'll develop a keen understanding of the distinctions among various dermal fillers, enabling you to make informed choices for integration into your private practice. We'll guide you through assessing dermal fillers based on their "G-Prime" and help you ascertain the ideal product selection and placement of HA dermal fillers to align with specific patient requirements and indications. The workshop's mornings are devoted to rigorous didactic sessions, while the afternoons provide ample opportunity to practice injections on volunteers until you feel confident in the technique. Throughout this phase, you'll receive close supervision and expert guidance.
Prerequisite Dermal Filler Training: Participants of the workshop can access all essential prerequisite and preparatory course materials via Empire's cutting-edge educational portal (mymembersportal.com). This practitioner portal also encompasses crucial practice-related information, such as treatment forms, consent forms, patient intake forms, before/after photos, and much more.
Completion of the prerequisite coursework, including video content, lecture presentations, and comprehensive didactic materials (full-color manual), is mandatory before joining the live patient practice hands-on training. Alternatively, you can opt for Empire-Virtual-Training™ and watch the requisite "live" presentations on your mobile device. Our instructors actively encourage participant engagement via our online "chat" option. Each "virtual" session incorporates dedicated time for questions and answers.
Event Organized by:
Empire Medical Training
Date: Nov 02 2024 - 8:30am - 6:00pm
Venue: Le Meridien Dallas by the Galleria
Address: 13402 Noel Road - Dallas, TX 75240
The well being and aesthetics industry is growing rapidly which means selecting right training is more important than ever. Botox Training courses must keep pace with the standards and regulations in the industry to ensure patient safety. In the anti-aging market the injectable serum, Botulinum Toxin more commonly known as Botox, has become one of the top procedures for the effective treatment of fine lines and wrinkles. Once the preserve of the rich and famous, this wonder-treatment now has a long track record of success and safety making it a highly desirable procedure for a more youthful and healthy appearance.
If you are considering becoming a Botox clinician you will want the best Botox training available today, training that gives you a full understanding of the product and how to administer it safely with outstanding results for your clients every time. Aesthetic Education, promotes Botox Courses that are at the leading edge of training in aesthetics procedures with the best qualification for doctors, nurses and dentists, courses that are superior in meeting the guidelines which all practitioners must adhere to. The depth of learning and hands-on practice will equip you and your teams with the knowledge and experience you need to be fully regulated and confident to deliver safe and outstanding services at your practice.
North America
Boston, MA -New York, NY -Los Angeles, CA -Atlanta, GA -Las Vegas, NV -Dallas, TX -Detroit, MI -Chicago, IL -Houston, TX -Orlando, FL -Philadelphia, PA -Naples, FL -Tampa, FL -Charleston, SC -Jacksonville, FL -CanadaCaribbean
Haiti -Puerto Rico -Islas Virgenes -Republica Dominicana -Jamaica -Cuba -Bahamas -Trinidad y Tobago -Barbados -CanadaEurope
Dubai -Paris -Spain-Australia-LondonBotox Training and Dermal Fillers for Argentina, Bolivia, Brasil, Chile, Colombia, Costa Rica, Cuba, Dominica, Republica Dominicana, Ecuador, El Salvador, Guatemala, Haiti, Honduras, Mexico, Nicaragua, Panama, Paraguay, Peru, Puerto Rico, Uruguay, Venezuela.
Cursos y Seminarios para aplicacion de Botox y Rellenos Dermicos.
Aesthetic.Education | The Next Step in Medical Learning
Copyright 2023 Aesthetic Education - All rights reserved. - Botox® is a registered trademark of Allergan, Inc.


text:
Date(s) - 02/05/2020
All Day
Homeschool Curriculum Library
The Kids Aid Backpack Program is available to homeschooling children ages 18 and under. The program provides non-perishable, kid-friendly food items twice each month. This program is an assistance program and does not require a qualification process. If you would like to participate, please sign up below to be added to the program (this makes sure we have enough bags available). Children must be present to collect their bags. More information can be found at kidsaidcolorado.org. You will be sent a confirmation email from the homeschool coordinator when your information has been received.
Bags are available for pick-up at the Homeschool Curriculum Library.
1st and 3rd Wednesdays
3:30 p.m. – 4:30 p.m.
Providence Reformed Church
2430 Orchard Avenue
Grand Junction, CO 81501


text:
How To Love Yourself, Even When No One Else Seems To
Whoever said "It's not about the destination. It's the journey" never flew on a long haul flight. Those flights can be painful, tiresome, jet-lagging, and not to mention absolutely boring despite whatever Disney movie is playing above you on the TV screen. As someone who has flown from Europe to the USA countless times, I've picked up some tips and tricks on flying long haul. Here are my tips.
Bring a scarf or jacket.
A scarf especially can act as a blanket or pillow during your long haul flight. Nowadays it's becoming less common to have a blanket included on your flight, and sometimes the cabin doesn't even have enough for everyone. The best advice is to bring something functional just in case because flights can get quite chilly. A relatively thick, large scarf will almost always do the job.
Pack a memory foam neck pillow.
Once again, you want to be comfortable on your flight and no matter if you're in the window, aisle, or middle seat, a memory foam neck pillow will make it all the more comfortable and relaxing for you.
Tip: Some people are hesitant to pack a neck pillow because of space. But most neck pillows have a snap closure, meaning you can easily snap it onto your carry on handle or strap it to your personal item. When it doubt, you can always wear it around your neck. No shame.
Bring an eye mask for sleeping.
If you're flying through the day, an eye mask will be extremely helpful in getting some relatively normal shut-eye. If you're flying on a red eye flight, it's less necessary, but honestly every little bit helps.
Put headphones and a portable charger in your personal item.
This one is crucial for keeping yourself entertained or productive. Headphones for jamming or listening to podcasts and a portable charger for keeping your mobile devices charged. Sometime flights have the USB port, but you can't always count on them to be functioning… Yes, I'm serious. Pack headphones, a portable charger, and your cord just in case.
Download podcasts.
Fun, educational entertainment! Podcasts have become one of my favorite pastimes for flying. I just download a few interesting ones before my flight and enjoy them while I'm on board.
Pro Traveler Tip: If you're traveling somewhere new, I love listening to podcasts about that country or location to start getting inspired and excited about my adventure. You could even download a couple of podcasts that teach you some essential words or phrases in your destination country, too!
Nike Air Max 97
The Nike Air Max 97 Men's Shoe keeps the sneaker favourite going strong with the same design details that made it famous: water-ripple lines, reflective piping and full-length Max Air cushioning.
- Many deemed this street style sneaker a great summer pick up as it doesn't keep the feet excessively warm.
- Some wearers loved the amount of sophistication its design offers.
- Several users have attested that it isn't heavy as it appears to be.
- A large percentage of purchasers stated that they felt comfortable while strapped in this sneaker.
- The Air Max 97 men's and women's shoes run a bit wider than the standard width, expressed by several users.
- Some buyers have shared that the Off-White x Nike Air Max 97 fits a bit narrow.
- One reviewer mentioned that this sneaker did give him blisters as it rubbed on his ankles.
- Very Expensive


text:
SNMP counter¶
This document explains the meaning of SNMP counters.
General IPv4 counters¶
All layer 4 packets and ICMP packets will change these counters, but these counters won't be changed by layer 2 packets (such as STP) or ARP packets.
Defined in RFC1213 ipInReceives
The number of packets received by the IP layer. It gets increasing at the beginning of ip_rcv function, always be updated together with IpExtInOctets. It will be increased even if the packet is dropped later (e.g. due to the IP header is invalid or the checksum is wrong and so on). It indicates the number of aggregated segments after GRO/LRO.
Defined in RFC1213 ipInDelivers
The number of packets delivers to the upper layer protocols. E.g. TCP, UDP, ICMP and so on. If no one listens on a raw socket, only kernel supported protocols will be delivered, if someone listens on the raw socket, all valid IP packets will be delivered.
Defined in RFC1213 ipOutRequests
The number of packets sent via IP layer, for both single cast and multicast packets, and would always be updated together with IpExtOutOctets.
IpExtInOctets and IpExtOutOctets
They are Linux kernel extensions, no RFC definitions. Please note, RFC1213 indeed defines ifInOctets and ifOutOctets, but they are different things. The ifInOctets and ifOutOctets include the MAC layer header size but IpExtInOctets and IpExtOutOctets don't, they only include the IP layer header and the IP layer data.
IpExtInNoECTPkts, IpExtInECT1Pkts, IpExtInECT0Pkts, IpExtInCEPkts
They indicate the number of four kinds of ECN IP packets, please refer Explicit Congestion Notification for more details.
These 4 counters calculate how many packets received per ECN status. They count the real frame number regardless the LRO/GRO. So for the same packet, you might find that IpInReceives count 1, but IpExtInNoECTPkts counts 2 or more.
Defined in RFC1213 ipInHdrErrors. It indicates the packet is dropped due to the IP header error. It might happen in both IP input and IP forward paths.
Defined in RFC1213 ipInAddrErrors. It will be increased in two scenarios: (1) The IP address is invalid. (2) The destination IP address is not a local address and IP forwarding is not enabled
This counter means the packet is dropped when the IP stack receives a packet and can't find a route for it from the route table. It might happen when IP forwarding is enabled and the destination IP address is not a local address and there is no route for the destination IP address.
Defined in RFC1213 ipInUnknownProtos. It will be increased if the layer 4 protocol is unsupported by kernel. If an application is using raw socket, kernel will always deliver the packet to the raw socket and this counter won't be increased.
For IPv4 packet, it means the actual data size is smaller than the "Total Length" field in the IPv4 header.
Defined in RFC1213 ipInDiscards. It indicates the packet is dropped in the IP receiving path and due to kernel internal reasons (e.g. no enough memory).
Defined in RFC1213 ipOutDiscards. It indicates the packet is dropped in the IP sending path and due to kernel internal reasons.
Defined in RFC1213 ipOutNoRoutes. It indicates the packet is dropped in the IP sending path and no route is found for it.
ICMP counters¶
IcmpInMsgs and IcmpOutMsgs
Defined by RFC1213 icmpInMsgs and RFC1213 icmpOutMsgs
As mentioned in the RFC1213, these two counters include errors, they would be increased even if the ICMP packet has an invalid type. The ICMP output path will check the header of a raw socket, so the IcmpOutMsgs would still be updated if the IP header is constructed by a userspace program.
ICMP named types
Every ICMP type has two counters: 'In' and 'Out'. E.g., for the ICMP Echo packet, they are IcmpInEchos and IcmpOutEchos. Their meanings are straightforward. The 'In' counter means kernel receives such a packet and the 'Out' counter means kernel sends such a packet.
ICMP numeric types
They are IcmpMsgInType[N] and IcmpMsgOutType[N], the [N] indicates the ICMP type number. These counters track all kinds of ICMP packets. The ICMP type number definition could be found in the ICMP parameters document.
For example, if the Linux kernel sends an ICMP Echo packet, the IcmpMsgOutType8 would increase 1. And if kernel gets an ICMP Echo Reply packet, IcmpMsgInType0 would increase 1.
This counter indicates the checksum of the ICMP packet is wrong. Kernel verifies the checksum after updating the IcmpInMsgs and before updating IcmpMsgInType[N]. If a packet has bad checksum, the IcmpInMsgs would be updated but none of IcmpMsgInType[N] would be updated.
IcmpInErrors and IcmpOutErrors
Defined by RFC1213 icmpInErrors and RFC1213 icmpOutErrors
When an error occurs in the ICMP packet handler path, these two counters would be updated. The receiving packet path use IcmpInErrors and the sending packet path use IcmpOutErrors. When IcmpInCsumErrors is increased, IcmpInErrors would always be increased too.
relationship of the ICMP counters¶
The sum of IcmpMsgOutType[N] is always equal to IcmpOutMsgs, as they are updated at the same time. The sum of IcmpMsgInType[N] plus IcmpInErrors should be equal or larger than IcmpInMsgs. When kernel receives an ICMP packet, kernel follows below logic:
increase IcmpInMsgs
if has any error, update IcmpInErrors and finish the process
update IcmpMsgOutType[N]
handle the packet depending on the type, if has any error, update IcmpInErrors and finish the process
So if all errors occur in step (2), IcmpInMsgs should be equal to the sum of IcmpMsgOutType[N] plus IcmpInErrors. If all errors occur in step (4), IcmpInMsgs should be equal to the sum of IcmpMsgOutType[N]. If the errors occur in both step (2) and step (4), IcmpInMsgs should be less than the sum of IcmpMsgOutType[N] plus IcmpInErrors.
General TCP counters¶
Defined in RFC1213 tcpInSegs
The number of packets received by the TCP layer. As mentioned in RFC1213, it includes the packets received in error, such as checksum error, invalid TCP header and so on. Only one error won't be included: if the layer 2 destination address is not the NIC's layer 2 address. It might happen if the packet is a multicast or broadcast packet, or the NIC is in promiscuous mode. In these situations, the packets would be delivered to the TCP layer, but the TCP layer will discard these packets before increasing TcpInSegs. The TcpInSegs counter isn't aware of GRO. So if two packets are merged by GRO, the TcpInSegs counter would only increase 1.
Defined in RFC1213 tcpOutSegs
The number of packets sent by the TCP layer. As mentioned in RFC1213, it excludes the retransmitted packets. But it includes the SYN, ACK and RST packets. Doesn't like TcpInSegs, the TcpOutSegs is aware of GSO, so if a packet would be split to 2 by GSO, TcpOutSegs will increase 2.
Defined in RFC1213 tcpActiveOpens
It means the TCP layer sends a SYN, and come into the SYN-SENT state. Every time TcpActiveOpens increases 1, TcpOutSegs should always increase 1.
Defined in RFC1213 tcpPassiveOpens
It means the TCP layer receives a SYN, replies a SYN+ACK, come into the SYN-RCVD state.
When packets are received by the TCP layer and are not be read by the application, the TCP layer will try to merge them. This counter indicate how many packets are merged in such situation. If GRO is enabled, lots of packets would be merged by GRO, these packets wouldn't be counted to TcpExtTCPRcvCoalesce.
When sending packets, the TCP layer will try to merge small packets to a bigger one. This counter increase 1 for every packet merged in such situation. Please refer to the LWN article for more details: https://lwn.net/Articles/576263/
This counter is explained by kernel commit f19c29e3e391, I pasted the explanation below:
TCPOrigDataSent: number of outgoing packets with original data (excluding
retransmission but including data-in-SYN). This counter is different from
TcpOutSegs because TcpOutSegs also tracks pure ACKs. TCPOrigDataSent is
more useful to track the TCP retransmission rate.
This counter is explained by kernel commit f19c29e3e391, I pasted the explanation below:
TCPSynRetrans: number of SYN and SYN/ACK retransmits to break down
retransmissions into SYN, fast-retransmits, timeout retransmits, etc.
This counter is explained by kernel commit f19c29e3e391, I pasted the explanation below:
TCPFastOpenActiveFail: Fast Open attempts (SYN/data) failed because
the remote does not accept it or the attempts timed out.
TcpExtListenOverflows and TcpExtListenDrops
When kernel receives a SYN from a client, and if the TCP accept queue is full, kernel will drop the SYN and add 1 to TcpExtListenOverflows. At the same time kernel will also add 1 to TcpExtListenDrops. When a TCP socket is in LISTEN state, and kernel need to drop a packet, kernel would always add 1 to TcpExtListenDrops. So increase TcpExtListenOverflows would let TcpExtListenDrops increasing at the same time, but TcpExtListenDrops would also increase without TcpExtListenOverflows increasing, e.g. a memory allocation fail would also let TcpExtListenDrops increase.
Note: The above explanation is based on kernel 4.10 or above version, on an old kernel, the TCP stack has different behavior when TCP accept queue is full. On the old kernel, TCP stack won't drop the SYN, it would complete the 3-way handshake. As the accept queue is full, TCP stack will keep the socket in the TCP half-open queue. As it is in the half open queue, TCP stack will send SYN+ACK on an exponential backoff timer, after client replies ACK, TCP stack checks whether the accept queue is still full, if it is not full, moves the socket to the accept queue, if it is full, keeps the socket in the half-open queue, at next time client replies ACK, this socket will get another chance to move to the accept queue.
TCP Fast Open¶
Defined in RFC1213 tcpEstabResets.
Defined in RFC1213 tcpAttemptFails.
Defined in RFC1213 tcpOutRsts. The RFC says this counter indicates the 'segments sent containing the RST flag', but in linux kernel, this counter indicates the segments kernel tried to send. The sending process might be failed due to some errors (e.g. memory alloc failed).
When the TCP stack wants to retransmit a packet, and finds that packet is not lost in the network, but the packet is not sent yet, the TCP stack would give up the retransmission and update this counter. It might happen if a packet stays too long time in a qdisc or driver queue.
The socket receives a RST packet in Establish or CloseWait state.
This counter indicates many keepalive packets were sent. The keepalive won't be enabled by default. A userspace program could enable it by setting the SO_KEEPALIVE socket option.
The spurious retransmission timeout detected by the F-RTO algorithm.
TCP Fast Path¶
When kernel receives a TCP packet, it has two paths to handler the packet, one is fast path, another is slow path. The comment in kernel code provides a good explanation of them, I pasted them below:
It is split into a fast path and a slow path. The fast path is
disabled when:
- A zero window was announced from us
- zero window probing
is only handled properly on the slow path.
- Out of order segments arrived.
- Urgent data is expected.
- There is no buffer space left
- Unexpected TCP flags/window values/header lengths are received
(detected by checking the TCP header against pred_flags)
- Data is sent in both directions. The fast path only supports pure senders
or pure receivers (this means either the sequence number or the ack
value must stay constant)
- Unexpected TCP option.
Kernel will try to use fast path unless any of the above conditions are satisfied. If the packets are out of order, kernel will handle them in slow path, which means the performance might be not very good. Kernel would also come into slow path if the "Delayed ack" is used, because when using "Delayed ack", the data is sent in both directions. When the TCP window scale option is not used, kernel will try to enable fast path immediately when the connection comes into the established state, but if the TCP window scale option is used, kernel will disable the fast path at first, and try to enable it after kernel receives packets.
TcpExtTCPPureAcks and TcpExtTCPHPAcks
If a packet set ACK flag and has no data, it is a pure ACK packet, if kernel handles it in the fast path, TcpExtTCPHPAcks will increase 1, if kernel handles it in the slow path, TcpExtTCPPureAcks will increase 1.
If a TCP packet has data (which means it is not a pure ACK packet), and this packet is handled in the fast path, TcpExtTCPHPHits will increase 1.
TCP abort¶
It means TCP layer has data in flight, but need to close the connection. So TCP layer sends a RST to the other side, indicate the connection is not closed very graceful. An easy way to increase this counter is using the SO_LINGER option. Please refer to the SO_LINGER section of the socket man page:
By default, when an application closes a connection, the close function will return immediately and kernel will try to send the in-flight data async. If you use the SO_LINGER option, set l_onoff to 1, and l_linger to a positive number, the close function won't return immediately, but wait for the in-flight data are acked by the other side, the max wait time is l_linger seconds. If set l_onoff to 1 and set l_linger to 0, when the application closes a connection, kernel will send a RST immediately and increase the TcpExtTCPAbortOnData counter.
This counter means the application has unread data in the TCP layer when the application wants to close the TCP connection. In such a situation, kernel will send a RST to the other side of the TCP connection.
When an application closes a TCP connection, kernel still need to track the connection, let it complete the TCP disconnect process. E.g. an app calls the close method of a socket, kernel sends fin to the other side of the connection, then the app has no relationship with the socket any more, but kernel need to keep the socket, this socket becomes an orphan socket, kernel waits for the reply of the other side, and would come to the TIME_WAIT state finally. When kernel has no enough memory to keep the orphan socket, kernel would send an RST to the other side, and delete the socket, in such situation, kernel will increase 1 to the TcpExtTCPAbortOnMemory. Two conditions would trigger TcpExtTCPAbortOnMemory:
1. the memory used by the TCP protocol is higher than the third value of the tcp_mem. Please refer the tcp_mem section in the TCP man page:
the orphan socket count is higher than net.ipv4.tcp_max_orphans
This counter will increase when any of the TCP timers expire. In such situation, kernel won't send RST, just give up the connection.
When a TCP connection comes into FIN_WAIT_2 state, instead of waiting for the fin packet from the other side, kernel could send a RST and delete the socket immediately. This is not the default behavior of Linux kernel TCP stack. By configuring the TCP_LINGER2 socket option, you could let kernel follow this behavior.
The kernel TCP layer will send RST if the RFC2525 2.17 section is satisfied. If an internal error occurs during this process, TcpExtTCPAbortFailed will be increased.
TCP Hybrid Slow Start¶
The Hybrid Slow Start algorithm is an enhancement of the traditional TCP congestion window Slow Start algorithm. It uses two pieces of information to detect whether the max bandwidth of the TCP path is approached. The two pieces of information are ACK train length and increase in packet delay. For detail information, please refer the Hybrid Slow Start paper. Either ACK train length or packet delay hits a specific threshold, the congestion control algorithm will come into the Congestion Avoidance state. Until v4.20, two congestion control algorithms are using Hybrid Slow Start, they are cubic (the default congestion control algorithm) and cdg. Four snmp counters relate with the Hybrid Slow Start algorithm.
How many times the ACK train length threshold is detected
The sum of CWND detected by ACK train length. Dividing this value by TcpExtTCPHystartTrainDetect is the average CWND which detected by the ACK train length.
How many times the packet delay threshold is detected.
The sum of CWND detected by packet delay. Dividing this value by TcpExtTCPHystartDelayDetect is the average CWND which detected by the packet delay.
TCP retransmission and congestion control¶
The TCP protocol has two retransmission mechanisms: SACK and fast recovery. They are exclusive with each other. When SACK is enabled, the kernel TCP stack would use SACK, or kernel would use fast recovery. The SACK is a TCP option, which is defined in RFC2018, the fast recovery is defined in RFC6582, which is also called 'Reno'.
The TCP congestion control is a big and complex topic. To understand the related snmp counter, we need to know the states of the congestion control state machine. There are 5 states: Open, Disorder, CWR, Recovery and Loss. For details about these states, please refer page 5 and page 6 of this document: https://pdfs.semanticscholar.org/0e9c/968d09ab2e53e24c4dca5b2d67c7f7140f8e.pdf
TcpExtTCPRenoRecovery and TcpExtTCPSackRecovery
When the congestion control comes into Recovery state, if sack is used, TcpExtTCPSackRecovery increases 1, if sack is not used, TcpExtTCPRenoRecovery increases 1. These two counters mean the TCP stack begins to retransmit the lost packets.
A packet was acknowledged by SACK, but the receiver has dropped this packet, so the sender needs to retransmit this packet. In this situation, the sender adds 1 to TcpExtTCPSACKReneging. A receiver could drop a packet which has been acknowledged by SACK, although it is unusual, it is allowed by the TCP protocol. The sender doesn't really know what happened on the receiver side. The sender just waits until the RTO expires for this packet, then the sender assumes this packet has been dropped by the receiver.
The reorder packet is detected by fast recovery. It would only be used if SACK is disabled. The fast recovery algorithm detects recorder by the duplicate ACK number. E.g., if retransmission is triggered, and the original retransmitted packet is not lost, it is just out of order, the receiver would acknowledge multiple times, one for the retransmitted packet, another for the arriving of the original out of order packet. Thus the sender would find more ACks than its expectation, and the sender knows out of order occurs.
The reorder packet is detected when a hole is filled. E.g., assume the sender sends packet 1,2,3,4,5, and the receiving order is 1,2,4,5,3. When the sender receives the ACK of packet 3 (which will fill the hole), two conditions will let TcpExtTCPTSReorder increase 1: (1) if the packet 3 is not re-retransmitted yet. (2) if the packet 3 is retransmitted but the timestamp of the packet 3's ACK is earlier than the retransmission timestamp.
The reorder packet detected by SACK. The SACK has two methods to detect reorder: (1) DSACK is received by the sender. It means the sender sends the same packet more than one times. And the only reason is the sender believes an out of order packet is lost so it sends the packet again. (2) Assume packet 1,2,3,4,5 are sent by the sender, and the sender has received SACKs for packet 2 and 5, now the sender receives SACK for packet 4 and the sender doesn't retransmit the packet yet, the sender would know packet 4 is out of order. The TCP stack of kernel will increase TcpExtTCPSACKReorder for both of the above scenarios.
The TCP stack wants to retransmit a packet and the congestion control state is 'Loss'.
The TCP stack wants to retransmit a packet and the congestion control state is not 'Loss'.
A SACK points out that a retransmission packet is lost again.
The TCP stack tries to deliver a retransmission packet to lower layers but the lower layers return an error.
The TCP stack retransmits a SYN packet.
The DSACK is defined in RFC2883. The receiver uses DSACK to report duplicate packets to the sender. There are two kinds of duplications: (1) a packet which has been acknowledged is duplicate. (2) an out of order packet is duplicate. The TCP stack counts these two kinds of duplications on both receiver side and sender side.
The TCP stack receives a duplicate packet which has been acked, so it sends a DSACK to the sender.
The TCP stack receives an out of order duplicate packet, so it sends a DSACK to the sender.
The TCP stack receives a DSACK, which indicates an acknowledged duplicate packet is received.
The TCP stack receives a DSACK, which indicate an out of order duplicate packet is received.
invalid SACK and DSACK¶
When a SACK (or DSACK) block is invalid, a corresponding counter would be updated. The validation method is base on the start/end sequence number of the SACK block. For more details, please refer the comment of the function tcp_is_sackblock_valid in the kernel source code. A SACK option could have up to 4 blocks, they are checked individually. E.g., if 3 blocks of a SACk is invalid, the corresponding counter would be updated 3 times. The comment of commit 18f02545a9a1 ("[TCP] MIB: Add counters for discarded SACK blocks") has additional explanation:
This counter indicates how many SACK blocks are invalid. If the invalid SACK block is caused by ACK recording, the TCP stack will only ignore it and won't update this counter.
TcpExtTCPDSACKIgnoredOld and TcpExtTCPDSACKIgnoredNoUndo
When a DSACK block is invalid, one of these two counters would be updated. Which counter will be updated depends on the undo_marker flag of the TCP socket. If the undo_marker is not set, the TCP stack isn't likely to re-transmit any packets, and we still receive an invalid DSACK block, the reason might be that the packet is duplicated in the middle of the network. In such scenario, TcpExtTCPDSACKIgnoredNoUndo will be updated. If the undo_marker is set, TcpExtTCPDSACKIgnoredOld will be updated. As implied in its name, it might be an old packet.
SACK shift¶
The linux networking stack stores data in sk_buff struct (skb for short). If a SACK block acrosses multiple skb, the TCP stack will try to re-arrange data in these skb. E.g. if a SACK block acknowledges seq 10 to 15, skb1 has seq 10 to 13, skb2 has seq 14 to 20. The seq 14 and 15 in skb2 would be moved to skb1. This operation is 'shift'. If a SACK block acknowledges seq 10 to 20, skb1 has seq 10 to 13, skb2 has seq 14 to 20. All data in skb2 will be moved to skb1, and skb2 will be discard, this operation is 'merge'.
A skb is shifted
A skb is merged
A skb should be shifted or merged, but the TCP stack doesn't do it for some reasons.
TCP out of order¶
The TCP layer receives an out of order packet and has enough memory to queue it.
The TCP layer receives an out of order packet but doesn't have enough memory, so drops it. Such packets won't be counted into TcpExtTCPOFOQueue.
The received out of order packet has an overlay with the previous packet. the overlay part will be dropped. All of TcpExtTCPOFOMerge packets will also be counted into TcpExtTCPOFOQueue.
PAWS (Protection Against Wrapped Sequence numbers) is an algorithm which is used to drop old packets. It depends on the TCP timestamps. For detail information, please refer the timestamp wiki and the RFC of PAWS.
Packets are dropped by PAWS in Syn-Sent status.
Packets are dropped by PAWS in any status other than Syn-Sent.
TCP ACK skip¶
In some scenarios, kernel would avoid sending duplicate ACKs too frequently. Please find more details in the tcp_invalid_ratelimit section of the sysctl document. When kernel decides to skip an ACK due to tcp_invalid_ratelimit, kernel would update one of below counters to indicate the ACK is skipped in which scenario. The ACK would only be skipped if the received packet is either a SYN packet or it has no data.
The ACK is skipped in Syn-Recv status. The Syn-Recv status means the TCP stack receives a SYN and replies SYN+ACK. Now the TCP stack is waiting for an ACK. Generally, the TCP stack doesn't need to send ACK in the Syn-Recv status. But in several scenarios, the TCP stack need to send an ACK. E.g., the TCP stack receives the same SYN packet repeately, the received packet does not pass the PAWS check, or the received packet sequence number is out of window. In these scenarios, the TCP stack needs to send ACK. If the ACk sending frequency is higher than tcp_invalid_ratelimit allows, the TCP stack will skip sending ACK and increase TcpExtTCPACKSkippedSynRecv.
The ACK is skipped due to PAWS (Protect Against Wrapped Sequence numbers) check fails. If the PAWS check fails in Syn-Recv, Fin-Wait-2 or Time-Wait statuses, the skipped ACK would be counted to TcpExtTCPACKSkippedSynRecv, TcpExtTCPACKSkippedFinWait2 or TcpExtTCPACKSkippedTimeWait. In all other statuses, the skipped ACK would be counted to TcpExtTCPACKSkippedPAWS.
The sequence number is out of window and the timestamp passes the PAWS check and the TCP status is not Syn-Recv, Fin-Wait-2, and Time-Wait.
The ACK is skipped in Fin-Wait-2 status, the reason would be either PAWS check fails or the received sequence number is out of window.
The ACK is skipped in Time-Wait status, the reason would be either PAWS check failed or the received sequence number is out of window.
The ACK is skipped if the ACK is a challenge ACK. The RFC 5961 defines 3 kind of challenge ACK, please refer RFC 5961 section 3.2, RFC 5961 section 4.2 and RFC 5961 section 5.2. Besides these three scenarios, In some TCP status, the linux TCP stack would also send challenge ACKs if the ACK number is before the first unacknowledged number (more strict than RFC 5961 section 5.2).
TCP receive window¶
Depending on current memory usage, the TCP stack tries to set receive window to zero. But the receive window might still be a no-zero value. For example, if the previous window size is 10, and the TCP stack receives 3 bytes, the current window size would be 7 even if the window size calculated by the memory usage is zero.
The TCP receive window is set to zero from a no-zero value.
The TCP receive window is set to no-zero value from zero.
Delayed ACK¶
The TCP Delayed ACK is a technique which is used for reducing the packet count in the network. For more details, please refer the Delayed ACK wiki
A delayed ACK timer expires. The TCP stack will send a pure ACK packet and exit the delayed ACK mode.
A delayed ACK timer expires, but the TCP stack can't send an ACK immediately due to the socket is locked by a userspace program. The TCP stack will send a pure ACK later (after the userspace program unlock the socket). When the TCP stack sends the pure ACK later, the TCP stack will also update TcpExtDelayedACKs and exit the delayed ACK mode.
It will be updated when the TCP stack receives a packet which has been ACKed. A Delayed ACK loss might cause this issue, but it would also be triggered by other reasons, such as a packet is duplicated in the network.
Tail Loss Probe (TLP)¶
TLP is an algorithm which is used to detect TCP packet loss. For more details, please refer the TLP paper.
A TLP probe packet is sent.
A packet loss is detected and recovered by TLP.
TCP Fast Open description¶
TCP Fast Open is a technology which allows data transfer before the 3-way handshake complete. Please refer the TCP Fast Open wiki for a general description.
When the TCP stack receives an ACK packet in the SYN-SENT status, and the ACK packet acknowledges the data in the SYN packet, the TCP stack understand the TFO cookie is accepted by the other side, then it updates this counter.
This counter indicates that the TCP stack initiated a TCP Fast Open, but it failed. This counter would be updated in three scenarios: (1) the other side doesn't acknowledge the data in the SYN packet. (2) The SYN packet which has the TFO cookie is timeout at least once. (3) after the 3-way handshake, the retransmission timeout happens net.ipv4.tcp_retries1 times, because some middle-boxes may black-hole fast open after the handshake.
This counter indicates how many times the TCP stack accepts the fast open request.
This counter indicates how many times the TCP stack rejects the fast open request. It is caused by either the TFO cookie is invalid or the TCP stack finds an error during the socket creating process.
When the pending fast open request number is larger than fastopenq->max_qlen, the TCP stack will reject the fast open request and update this counter. When this counter is updated, the TCP stack won't update TcpExtTCPFastOpenPassive or TcpExtTCPFastOpenPassiveFail. The fastopenq->max_qlen is set by the TCP_FASTOPEN socket operation and it could not be larger than net.core.somaxconn. For example:
setsockopt(sfd, SOL_TCP, TCP_FASTOPEN, &qlen, sizeof(qlen));
This counter indicates how many times a client wants to request a TFO cookie.
Challenge ACK¶
For details of challenge ACK, please refer the explanation of TcpExtTCPACKSkippedChallenge.
The number of challenge acks sent.
The number of challenge acks sent in response to SYN packets. After updates this counter, the TCP stack might send a challenge ACK and update the TcpExtTCPChallengeACK counter, or it might also skip to send the challenge and update the TcpExtTCPACKSkippedChallenge.
When a socket is under memory pressure, the TCP stack will try to reclaim memory from the receiving queue and out of order queue. One of the reclaiming method is 'collapse', which means allocate a big skb, copy the contiguous skbs to the single big skb, and free these contiguous skbs.
The TCP stack tries to reclaim memory for a socket. After updates this counter, the TCP stack will try to collapse the out of order queue and the receiving queue. If the memory is still not enough, the TCP stack will try to discard packets from the out of order queue (and update the TcpExtOfoPruned counter)
The TCP stack tries to discard packet on the out of order queue.
After 'collapse' and discard packets from the out of order queue, if the actually used memory is still larger than the max allowed memory, this counter will be updated. It means the 'prune' fails.
This counter indicates how many skbs are freed during 'collapse'.
ping test¶
Run the ping command against the public dns server 18.104.22.168:
nstatuser@nstat-a:~$ ping 220.127.116.11 -c 1
PING 220.127.116.11 (188.8.131.52) 56(84) bytes of data.
64 bytes from 22.214.171.124: icmp_seq=1 ttl=119 time=17.8 ms
--- 188.8.131.52 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 17.875/17.875/17.875/0.000 ms
The nstayt result:
nstatuser@nstat-a:~$ nstat
IpInReceives 1 0.0
IpInDelivers 1 0.0
IpOutRequests 1 0.0
IcmpInMsgs 1 0.0
IcmpInEchoReps 1 0.0
IcmpOutMsgs 1 0.0
IcmpOutEchos 1 0.0
IcmpMsgInType0 1 0.0
IcmpMsgOutType8 1 0.0
IpExtInOctets 84 0.0
IpExtOutOctets 84 0.0
IpExtInNoECTPkts 1 0.0
The Linux server sent an ICMP Echo packet, so IpOutRequests, IcmpOutMsgs, IcmpOutEchos and IcmpMsgOutType8 were increased 1. The server got ICMP Echo Reply from 22.214.171.124, so IpInReceives, IcmpInMsgs, IcmpInEchoReps and IcmpMsgInType0 were increased 1. The ICMP Echo Reply was passed to the ICMP layer via IP layer, so IpInDelivers was increased 1. The default ping data size is 48, so an ICMP Echo packet and its corresponding Echo Reply packet are constructed by:
14 bytes MAC header
20 bytes IP header
16 bytes ICMP header
48 bytes data (default value of the ping command)
So the IpExtInOctets and IpExtOutOctets are 20+16+48=84.
tcp 3-way handshake¶
On server side, we run:
nstatuser@nstat-b:~$ nc -lknv 0.0.0.0 9000
Listening on [0.0.0.0] (family 0, port 9000)
On client side, we run:
nstatuser@nstat-a:~$ nc -nv 192.168.122.251 9000
Connection to 192.168.122.251 9000 port [tcp/*] succeeded!
The server listened on tcp 9000 port, the client connected to it, they completed the 3-way handshake.
On server side, we can find below nstat output:
nstatuser@nstat-b:~$ nstat | grep -i tcp
TcpPassiveOpens 1 0.0
TcpInSegs 2 0.0
TcpOutSegs 1 0.0
TcpExtTCPPureAcks 1 0.0
On client side, we can find below nstat output:
nstatuser@nstat-a:~$ nstat | grep -i tcp
TcpActiveOpens 1 0.0
TcpInSegs 1 0.0
TcpOutSegs 2 0.0
When the server received the first SYN, it replied a SYN+ACK, and came into SYN-RCVD state, so TcpPassiveOpens increased 1. The server received SYN, sent SYN+ACK, received ACK, so server sent 1 packet, received 2 packets, TcpInSegs increased 2, TcpOutSegs increased 1. The last ACK of the 3-way handshake is a pure ACK without data, so TcpExtTCPPureAcks increased 1.
When the client sent SYN, the client came into the SYN-SENT state, so TcpActiveOpens increased 1, the client sent SYN, received SYN+ACK, sent ACK, so client sent 2 packets, received 1 packet, TcpInSegs increased 1, TcpOutSegs increased 2.
TCP normal traffic¶
Run nc on server:
nstatuser@nstat-b:~$ nc -lkv 0.0.0.0 9000
Listening on [0.0.0.0] (family 0, port 9000)
Run nc on client:
nstatuser@nstat-a:~$ nc -v nstat-b 9000
Connection to nstat-b 9000 port [tcp/*] succeeded!
Input a string in the nc client ('hello' in our example):
nstatuser@nstat-a:~$ nc -v nstat-b 9000
Connection to nstat-b 9000 port [tcp/*] succeeded!
The client side nstat output:
nstatuser@nstat-a:~$ nstat
IpInReceives 1 0.0
IpInDelivers 1 0.0
IpOutRequests 1 0.0
TcpInSegs 1 0.0
TcpOutSegs 1 0.0
TcpExtTCPPureAcks 1 0.0
TcpExtTCPOrigDataSent 1 0.0
IpExtInOctets 52 0.0
IpExtOutOctets 58 0.0
IpExtInNoECTPkts 1 0.0
The server side nstat output:
nstatuser@nstat-b:~$ nstat
IpInReceives 1 0.0
IpInDelivers 1 0.0
IpOutRequests 1 0.0
TcpInSegs 1 0.0
TcpOutSegs 1 0.0
IpExtInOctets 58 0.0
IpExtOutOctets 52 0.0
IpExtInNoECTPkts 1 0.0
Input a string in nc client side again ('world' in our example):
nstatuser@nstat-a:~$ nc -v nstat-b 9000
Connection to nstat-b 9000 port [tcp/*] succeeded!
Client side nstat output:
nstatuser@nstat-a:~$ nstat
IpInReceives 1 0.0
IpInDelivers 1 0.0
IpOutRequests 1 0.0
TcpInSegs 1 0.0
TcpOutSegs 1 0.0
TcpExtTCPHPAcks 1 0.0
TcpExtTCPOrigDataSent 1 0.0
IpExtInOctets 52 0.0
IpExtOutOctets 58 0.0
IpExtInNoECTPkts 1 0.0
Server side nstat output:
nstatuser@nstat-b:~$ nstat
IpInReceives 1 0.0
IpInDelivers 1 0.0
IpOutRequests 1 0.0
TcpInSegs 1 0.0
TcpOutSegs 1 0.0
TcpExtTCPHPHits 1 0.0
IpExtInOctets 58 0.0
IpExtOutOctets 52 0.0
IpExtInNoECTPkts 1 0.0
Compare the first client-side nstat and the second client-side nstat, we could find one difference: the first one had a 'TcpExtTCPPureAcks', but the second one had a 'TcpExtTCPHPAcks'. The first server-side nstat and the second server-side nstat had a difference too: the second server-side nstat had a TcpExtTCPHPHits, but the first server-side nstat didn't have it. The network traffic patterns were exactly the same: the client sent a packet to the server, the server replied an ACK. But kernel handled them in different ways. When the TCP window scale option is not used, kernel will try to enable fast path immediately when the connection comes into the established state, but if the TCP window scale option is used, kernel will disable the fast path at first, and try to enable it after kernel receives packets. We could use the 'ss' command to verify whether the window scale option is used. e.g. run below command on either server or client:
nstatuser@nstat-a:~$ ss -o state established -i '( dport = :9000 or sport = :9000 )
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 0 192.168.122.250:40654 192.168.122.251:9000
ts sack cubic wscale:7,7 rto:204 rtt:0.98/0.49 mss:1448 pmtu:1500 rcvmss:536 advmss:1448 cwnd:10 bytes_acked:1 segs_out:2 segs_in:1 send 118.2Mbps lastsnd:46572 lastrcv:46572 lastack:46572 pacing_rate 236.4Mbps rcv_space:29200 rcv_ssthresh:29200 minrtt:0.98
The 'wscale:7,7' means both server and client set the window scale option to 7. Now we could explain the nstat output in our test:
In the first nstat output of client side, the client sent a packet, server reply an ACK, when kernel handled this ACK, the fast path was not enabled, so the ACK was counted into 'TcpExtTCPPureAcks'.
In the second nstat output of client side, the client sent a packet again, and received another ACK from the server, in this time, the fast path is enabled, and the ACK was qualified for fast path, so it was handled by the fast path, so this ACK was counted into TcpExtTCPHPAcks.
In the first nstat output of server side, fast path was not enabled, so there was no 'TcpExtTCPHPHits'.
In the second nstat output of server side, the fast path was enabled, and the packet received from client qualified for fast path, so it was counted into 'TcpExtTCPHPHits'.
On the server side, we run below python script:
import socket
import time
port = 9000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', port))
sock, addr = s.accept()
while True:
This python script listen on 9000 port, but doesn't read anything from the connection.
On the client side, we send the string "hello" by nc:
nstatuser@nstat-a:~$ echo "hello" | nc nstat-b 9000
Then, we come back to the server side, the server has received the "hello" packet, and the TCP layer has acked this packet, but the application didn't read it yet. We type Ctrl-C to terminate the server script. Then we could find TcpExtTCPAbortOnClose increased 1 on the server side:
nstatuser@nstat-b:~$ nstat | grep -i abort
TcpExtTCPAbortOnClose 1 0.0
If we run tcpdump on the server side, we could find the server sent a RST after we type Ctrl-C.
TcpExtTCPAbortOnMemory and TcpExtTCPAbortOnTimeout¶
Below is an example which let the orphan socket count be higher than net.ipv4.tcp_max_orphans. Change tcp_max_orphans to a smaller value on client:
sudo bash -c "echo 10 > /proc/sys/net/ipv4/tcp_max_orphans"
Client code (create 64 connection to server):
nstatuser@nstat-a:~$ cat client_orphan.py
import socket
import time
server = 'nstat-b' # server address
port = 9000
count = 64
connection_list = []
for i in range(64):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((server, port))
print("connection_count: %d" % len(connection_list))
while True:
Server code (accept 64 connection from client):
nstatuser@nstat-b:~$ cat server_orphan.py
import socket
import time
port = 9000
count = 64
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', port))
connection_list = []
while True:
sock, addr = s.accept()
connection_list.append((sock, addr))
print("connection_count: %d" % len(connection_list))
Run the python scripts on server and client.
On server:
python3 server_orphan.py
On client:
python3 client_orphan.py
Run iptables on server:
sudo iptables -A INPUT -i ens3 -p tcp --destination-port 9000 -j DROP
Type Ctrl-C on client, stop client_orphan.py.
Check TcpExtTCPAbortOnMemory on client:
nstatuser@nstat-a:~$ nstat | grep -i abort
TcpExtTCPAbortOnMemory 54 0.0
Check orphaned socket count on client:
nstatuser@nstat-a:~$ ss -s
Total: 131 (kernel 0)
TCP: 14 (estab 1, closed 0, orphaned 10, synrecv 0, timewait 0/0), ports 0
Transport Total IP IPv6
* 0 - -
The explanation of the test: after run server_orphan.py and client_orphan.py, we set up 64 connections between server and client. Run the iptables command, the server will drop all packets from the client, type Ctrl-C on client_orphan.py, the system of the client would try to close these connections, and before they are closed gracefully, these connections became orphan sockets. As the iptables of the server blocked packets from the client, the server won't receive fin from the client, so all connection on clients would be stuck on FIN_WAIT_1 stage, so they will keep as orphan sockets until timeout. We have echo 10 to /proc/sys/net/ipv4/tcp_max_orphans, so the client system would only keep 10 orphan sockets, for all other orphan sockets, the client system sent RST for them and delete them. We have 64 connections, so the 'ss -s' command shows the system has 10 orphan sockets, and the value of TcpExtTCPAbortOnMemory was 54.
An additional explanation about orphan socket count: You could find the exactly orphan socket count by the 'ss -s' command, but when kernel decide whither increases TcpExtTCPAbortOnMemory and sends RST, kernel doesn't always check the exactly orphan socket count. For increasing performance, kernel checks an approximate count firstly, if the approximate count is more than tcp_max_orphans, kernel checks the exact count again. So if the approximate count is less than tcp_max_orphans, but exactly count is more than tcp_max_orphans, you would find TcpExtTCPAbortOnMemory is not increased at all. If tcp_max_orphans is large enough, it won't occur, but if you decrease tcp_max_orphans to a small value like our test, you might find this issue. So in our test, the client set up 64 connections although the tcp_max_orphans is 10. If the client only set up 11 connections, we can't find the change of TcpExtTCPAbortOnMemory.
Continue the previous test, we wait for several minutes. Because of the iptables on the server blocked the traffic, the server wouldn't receive fin, and all the client's orphan sockets would timeout on the FIN_WAIT_1 state finally. So we wait for a few minutes, we could find 10 timeout on the client:
nstatuser@nstat-a:~$ nstat | grep -i abort
TcpExtTCPAbortOnTimeout 10 0.0
The server side code:
nstatuser@nstat-b:~$ cat server_linger.py
import socket
import time
port = 9000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', port))
sock, addr = s.accept()
while True:
The client side code:
nstatuser@nstat-a:~$ cat client_linger.py
import socket
import struct
server = 'nstat-b' # server address
port = 9000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', 1, 10))
s.setsockopt(socket.SOL_TCP, socket.TCP_LINGER2, struct.pack('i', -1))
s.connect((server, port))
Run server_linger.py on server:
nstatuser@nstat-b:~$ python3 server_linger.py
Run client_linger.py on client:
nstatuser@nstat-a:~$ python3 client_linger.py
After run client_linger.py, check the output of nstat:
nstatuser@nstat-a:~$ nstat | grep -i abort
TcpExtTCPAbortOnLinger 1 0.0
On the server, we run a program which listen on TCP port 9000, but doesn't read any data:
import socket
import time
port = 9000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', port))
sock, addr = s.accept()
while True:
Save the above code as server_coalesce.py, and run:
python3 server_coalesce.py
On the client, save below code as client_coalesce.py:
import socket
server = 'nstat-b'
port = 9000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((server, port))
nstatuser@nstat-a:~$ python3 -i client_coalesce.py
We use '-i' to come into the interactive mode, then a packet:
>>> s.send(b'foo')
Send a packet again:
>>> s.send(b'bar')
On the server, run nstat:
ubuntu@nstat-b:~$ nstat
IpInReceives 2 0.0
IpInDelivers 2 0.0
IpOutRequests 2 0.0
TcpInSegs 2 0.0
TcpOutSegs 2 0.0
TcpExtTCPRcvCoalesce 1 0.0
IpExtInOctets 110 0.0
IpExtOutOctets 104 0.0
IpExtInNoECTPkts 2 0.0
The client sent two packets, server didn't read any data. When the second packet arrived at server, the first packet was still in the receiving queue. So the TCP layer merged the two packets, and we could find the TcpExtTCPRcvCoalesce increased 1.
TcpExtListenOverflows and TcpExtListenDrops¶
On server, run the nc command, listen on port 9000:
nstatuser@nstat-b:~$ nc -lkv 0.0.0.0 9000
Listening on [0.0.0.0] (family 0, port 9000)
On client, run 3 nc commands in different terminals:
nstatuser@nstat-a:~$ nc -v nstat-b 9000
Connection to nstat-b 9000 port [tcp/*] succeeded!
The nc command only accepts 1 connection, and the accept queue length is 1. On current linux implementation, set queue length to n means the actual queue length is n+1. Now we create 3 connections, 1 is accepted by nc, 2 in accepted queue, so the accept queue is full.
Before running the 4th nc, we clean the nstat history on the server:
nstatuser@nstat-b:~$ nstat -n
Run the 4th nc on the client:
nstatuser@nstat-a:~$ nc -v nstat-b 9000
If the nc server is running on kernel 4.10 or higher version, you won't see the "Connection to ... succeeded!" string, because kernel will drop the SYN if the accept queue is full. If the nc client is running on an old kernel, you would see that the connection is succeeded, because kernel would complete the 3 way handshake and keep the socket on half open queue. I did the test on kernel 4.15. Below is the nstat on the server:
nstatuser@nstat-b:~$ nstat
IpInReceives 4 0.0
IpInDelivers 4 0.0
TcpInSegs 4 0.0
TcpExtListenOverflows 4 0.0
TcpExtListenDrops 4 0.0
IpExtInOctets 240 0.0
IpExtInNoECTPkts 4 0.0
Both TcpExtListenOverflows and TcpExtListenDrops were 4. If the time between the 4th nc and the nstat was longer, the value of TcpExtListenOverflows and TcpExtListenDrops would be larger, because the SYN of the 4th nc was dropped, the client was retrying.
IpInAddrErrors, IpExtInNoRoutes and IpOutNoRoutes¶
server A IP address: 192.168.122.250 server B IP address: 192.168.122.251 Prepare on server A, add a route to server B:
$ sudo ip route add 184.108.40.206/32 via 192.168.122.251
Prepare on server B, disable send_redirects for all interfaces:
$ sudo sysctl -w net.ipv4.conf.all.send_redirects=0
$ sudo sysctl -w net.ipv4.conf.ens3.send_redirects=0
$ sudo sysctl -w net.ipv4.conf.lo.send_redirects=0
$ sudo sysctl -w net.ipv4.conf.default.send_redirects=0
We want to let sever A send a packet to 126.96.36.199, and route the packet to server B. When server B receives such packet, it might send a ICMP Redirect message to server A, set send_redirects to 0 will disable this behavior.
First, generate InAddrErrors. On server B, we disable IP forwarding:
$ sudo sysctl -w net.ipv4.conf.all.forwarding=0
On server A, we send packets to 22.214.171.124:
$ nc -v 22.214.171.124 53
On server B, we check the output of nstat:
$ nstat
IpInReceives 3 0.0
IpInAddrErrors 3 0.0
IpExtInOctets 180 0.0
IpExtInNoECTPkts 3 0.0
As we have let server A route 184.108.40.206 to server B, and we disabled IP forwarding on server B, Server A sent packets to server B, then server B dropped packets and increased IpInAddrErrors. As the nc command would re-send the SYN packet if it didn't receive a SYN+ACK, we could find multiple IpInAddrErrors.
Second, generate IpExtInNoRoutes. On server B, we enable IP forwarding:
$ sudo sysctl -w net.ipv4.conf.all.forwarding=1
Check the route table of server B and remove the default route:
$ ip route show
default via 192.168.122.1 dev ens3 proto static
192.168.122.0/24 dev ens3 proto kernel scope link src 192.168.122.251
$ sudo ip route delete default via 192.168.122.1 dev ens3 proto static
On server A, we contact 18.104.22.168 again:
$ nc -v 184.108.40.206 53
nc: connect to 188.8.131.52 port 53 (tcp) failed: Network is unreachable
On server B, run nstat:
$ nstat
IpInReceives 1 0.0
IpOutRequests 1 0.0
IcmpOutMsgs 1 0.0
IcmpOutDestUnreachs 1 0.0
IcmpMsgOutType3 1 0.0
IpExtInNoRoutes 1 0.0
IpExtInOctets 60 0.0
IpExtOutOctets 88 0.0
IpExtInNoECTPkts 1 0.0
We enabled IP forwarding on server B, when server B received a packet which destination IP address is 18.104.22.168, server B will try to forward this packet. We have deleted the default route, there was no route for 126.96.36.199, so server B increase IpExtInNoRoutes and sent the "ICMP Destination Unreachable" message to server A.
Third, generate IpOutNoRoutes. Run ping command on server B:
$ ping -c 1 220.127.116.11
connect: Network is unreachable
Run nstat on server B:
$ nstat
IpOutNoRoutes 1 0.0
We have deleted the default route on server B. Server B couldn't find a route for the 22.214.171.124 IP address, so server B increased IpOutNoRoutes.
In this test, we send 3 same SYN packets from client to server. The first SYN will let server create a socket, set it to Syn-Recv status, and reply a SYN/ACK. The second SYN will let server reply the SYN/ACK again, and record the reply time (the duplicate ACK reply time). The third SYN will let server check the previous duplicate ACK reply time, and decide to skip the duplicate ACK, then increase the TcpExtTCPACKSkippedSynRecv counter.
Run tcpdump to capture a SYN packet:
nstatuser@nstat-a:~$ sudo tcpdump -c 1 -w /tmp/syn.pcap port 9000
tcpdump: listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
Open another terminal, run nc command:
nstatuser@nstat-a:~$ nc nstat-b 9000
As the nstat-b didn't listen on port 9000, it should reply a RST, and the nc command exited immediately. It was enough for the tcpdump command to capture a SYN packet. A linux server might use hardware offload for the TCP checksum, so the checksum in the /tmp/syn.pcap might be not correct. We call tcprewrite to fix it:
nstatuser@nstat-a:~$ tcprewrite --infile=/tmp/syn.pcap --outfile=/tmp/syn_fixcsum.pcap --fixcsum
On nstat-b, we run nc to listen on port 9000:
nstatuser@nstat-b:~$ nc -lkv 9000
Listening on [0.0.0.0] (family 0, port 9000)
On nstat-a, we blocked the packet from port 9000, or nstat-a would send RST to nstat-b:
nstatuser@nstat-a:~$ sudo iptables -A INPUT -p tcp --sport 9000 -j DROP
Send 3 SYN repeatedly to nstat-b:
nstatuser@nstat-a:~$ for i in {1..3}; do sudo tcpreplay -i ens3 /tmp/syn_fixcsum.pcap; done
Check snmp counter on nstat-b:
nstatuser@nstat-b:~$ nstat | grep -i skip
TcpExtTCPACKSkippedSynRecv 1 0.0
As we expected, TcpExtTCPACKSkippedSynRecv is 1.
To trigger PAWS, we could send an old SYN.
On nstat-b, let nc listen on port 9000:
nstatuser@nstat-b:~$ nc -lkv 9000
Listening on [0.0.0.0] (family 0, port 9000)
On nstat-a, run tcpdump to capture a SYN:
nstatuser@nstat-a:~$ sudo tcpdump -w /tmp/paws_pre.pcap -c 1 port 9000
tcpdump: listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
On nstat-a, run nc as a client to connect nstat-b:
nstatuser@nstat-a:~$ nc -v nstat-b 9000
Connection to nstat-b 9000 port [tcp/*] succeeded!
Now the tcpdump has captured the SYN and exit. We should fix the checksum:
nstatuser@nstat-a:~$ tcprewrite --infile /tmp/paws_pre.pcap --outfile /tmp/paws.pcap --fixcsum
Send the SYN packet twice:
nstatuser@nstat-a:~$ for i in {1..2}; do sudo tcpreplay -i ens3 /tmp/paws.pcap; done
On nstat-b, check the snmp counter:
nstatuser@nstat-b:~$ nstat | grep -i skip
TcpExtTCPACKSkippedPAWS 1 0.0
We sent two SYN via tcpreplay, both of them would let PAWS check failed, the nstat-b replied an ACK for the first SYN, skipped the ACK for the second SYN, and updated TcpExtTCPACKSkippedPAWS.
To trigger TcpExtTCPACKSkippedSeq, we send packets which have valid timestamp (to pass PAWS check) but the sequence number is out of window. The linux TCP stack would avoid to skip if the packet has data, so we need a pure ACK packet. To generate such a packet, we could create two sockets: one on port 9000, another on port 9001. Then we capture an ACK on port 9001, change the source/destination port numbers to match the port 9000 socket. Then we could trigger TcpExtTCPACKSkippedSeq via this packet.
On nstat-b, open two terminals, run two nc commands to listen on both port 9000 and port 9001:
nstatuser@nstat-b:~$ nc -lkv 9000
Listening on [0.0.0.0] (family 0, port 9000)
nstatuser@nstat-b:~$ nc -lkv 9001
Listening on [0.0.0.0] (family 0, port 9001)
On nstat-a, run two nc clients:
nstatuser@nstat-a:~$ nc -v nstat-b 9000
Connection to nstat-b 9000 port [tcp/*] succeeded!
nstatuser@nstat-a:~$ nc -v nstat-b 9001
Connection to nstat-b 9001 port [tcp/*] succeeded!
On nstat-a, run tcpdump to capture an ACK:
nstatuser@nstat-a:~$ sudo tcpdump -w /tmp/seq_pre.pcap -c 1 dst port 9001
tcpdump: listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
On nstat-b, send a packet via the port 9001 socket. E.g. we sent a string 'foo' in our example:
nstatuser@nstat-b:~$ nc -lkv 9001
Listening on [0.0.0.0] (family 0, port 9001)
Connection from nstat-a 42132 received!
On nstat-a, the tcpdump should have captured the ACK. We should check the source port numbers of the two nc clients:
nstatuser@nstat-a:~$ ss -ta '( dport = :9000 || dport = :9001 )' | tee
State Recv-Q Send-Q Local Address:Port Peer Address:Port
Run tcprewrite, change port 9001 to port 9000, change port 42132 to port 50208:
nstatuser@nstat-a:~$ tcprewrite --infile /tmp/seq_pre.pcap --outfile /tmp/seq.pcap -r 9001:9000 -r 42132:50208 --fixcsum
Now the /tmp/seq.pcap is the packet we need. Send it to nstat-b:
nstatuser@nstat-a:~$ for i in {1..2}; do sudo tcpreplay -i ens3 /tmp/seq.pcap; done
Check TcpExtTCPACKSkippedSeq on nstat-b:
nstatuser@nstat-b:~$ nstat | grep -i skip
TcpExtTCPACKSkippedSeq 1 0.0


text:
Final 'Adam Eterno'. LION 16/10/1976 |
Sadly, nothing lasts forever and, after six years, this will be my final blog posting for the foreseeable future. It's possible I may post again at some stage but for now I'm giving up blogging to focus more on paid work.
This is something I've been considering for a few weeks now, and with today being the end of the year it seemed an appropriate time to bring down the curtain. 2012 has not been a good year. I began the year as I usually do with some optimism but, as the months went on, work became scarcer. Being a freelancer holds no guarantee of security of course and one cannot expect it to. I'm just telling it like it is.
Final 'Indestructible Man', JAG 29/3/1969 |
In previous times there would be new comics springing up to replace work that was lost, but that happens with less regularity now to say the least. Retailers aren't as hospitable towards new titles as they used to be, sales are far lower than they were in the golden age of comics, so publishers naturally have to work within limited budgets. Subsequently, the comics industry has become a more competitive place because there's less work to go 'round. By nature I'm not a competitive person, and certainly not the sort to perceive other cartoonists as rivals to be knocked down to get what I want. There used to be room for all with no need for dirty tricks, but I'm noticing that changing and it's an unpleasant shift. On the whole, the comics industry is a very friendly and relaxed place and most comics folk will look out for each other as best they can. But there's always going to be one or two who'll undercut you and/or fabricate tales to give their own career a leg up. The comics biz is too small for such slyness. People like that always get rumbled eventually.
Final 'Two Faces of Janus', POW! 7/9/1968 |
Final 'Rubberman', SMASH! 7/9/1968 |
When I started Blimey! back in December 2006 I gave no thought to how long I'd be writing it. I've never considered myself a comics 'expert' but I am enthusiastic about the history of comics. I wanted to share some thoughts about old British comics which were mainly neglected by other websites and I was very pleased with the response. (My only regret was spending some time a while back arguing with a couple of trolls and wasters here instead of ignoring them from the outset.)
Final 'Steel Claw', VALIANT 27/10/1973 |
Mention should also be made of John Freeman's Down The Tubes website, which has been running longer than Blimey! and is an excellent place to keep up with developments in the British comics industry, as is the Forbidden Planet International blog. There's also Bear Alley by Steve Holland, a true expert of British adventure comics and pulp books. Bookmark 'em all today!
If you want to keep up with any developments of my career my website will continue to operate at http://www.lewstringer.com/ and I'll try to update my Deviantart page more often over at http://lewstringer.deviantart.com/ .
I'll also be selling off more of my old artwork on eBay next year, so please keep an eye on the following link to see what I put up for auction soon. (Ironically, earlier this year I joked that I was selling off my artwork to pay my mortgage. Guess I shouldn't have tempted fate.)
Trying to end on a positive note, I'm pleased that Rasher will be continuing in The Beano for at least the next few weeks, and the next few days will be busy as I have three Smasher pages to draw for The Dandy Annual 2014 (out next summer). I also have a couple of bits and bobs coming up in BeanoMax soon, and hopefully I'll be drawing a few more pages for Viz next year too.
I should also mention that I'm on the guest list for the Bristol Comic Expo (11th-12th May 2013) so all being well I'll see you there!
Final 'Thor', SMASH! 8/3/1969 |
Anyway, there's just over 1,000 posts on this blog (with this one being No.1,003) so some of you who have discovered Blimey! in recent years may not have seen all of it. If you enter a keyword (such as Ken Reid or Eagle for example) into the search window at the top of the right hand side of this post you'll hopefully find something you're interested in that you haven't read before.
The New Year dawns tomorrow so I hope it's a prosperous one for all of us. Thanks for following this blog over the years and may 2013 bring all of us good fortune, good health, and happiness.
Final 'The Umbrella Men', DANDY 13/8/1966 |


text: Originally from Oceanside NY, Lenny Marcus has been a mainstay of the New York City comedy scene for over for twenty years. He is currently a regular performer in every major comedy club in New York City. Most recently, Lenny appeared on TruTV on the show TruInside in the episode about the world famous Comedy Cellar in NYC where you can see him perform regularly. Recently, you may have seen Lenny on Louie, on the FX network, The Nightly Show with Larry Wilmore on Comedy Central, or in the short film The Unimportance of Being Ernest. Lenny has performed stand-up comedy on television multiple time. he performed on The Late Show with David Letterman three times to amazing reviews. He has also appeared on Comedy Central's Live at Gotham, AXS Tv's Gotham Comedy Live, NBC's Comedy Showcase with Louie Anderson and MTV's The Jim Brewer Show. Lenny has made multiple appearances on Tru-tv making fun of the worlds stupidest criminals, shoppers and drivers. You may also have seen him in commercials for the MTV Video Movie Awards, Wendy's and Marriott or on the radio in commercials for Southwestern Bell Telephone or Priceline.com. He has performed at both the prestigious Just for Laughs Comedy Festival in Montreal, Canada three times, HBO's US Comedy Arts festival, in Aspen Colorado and the Great American Comedy festival in Norfolk, Nebraska.


text:
Ultimate 3000 in 1 Happ Kit - Blue/Yellow
DX 3000 in 1 Arcade Kit
The Pandora DX 3000 in 1 features a wonderful selection of Arcade Games collections. This board will output to CRT, VGA, and HDMI on modern TVs and also has some neat features such as high score save, scan line generator setting, game time mode, and difficulty/number of lives settings. The board can also be set to coin-operated and game time mode can be activated through the settings. Can also be set to free play if required.
- Requires a Vertical Orientated Monitor
- 3000 Classic Games on 1 PCB
- Outputs to both CGA & VGA
- Difficulty and lives settings
- Hides games from within the menu
- Saves High Score
- Supports Trackball and Spinner
Arcade Kit Includes:
- DX 3000 in 1 JAMMA Game Board
- 2 x Happ Joysticks
- 18 x Standard Arcade Buttons
- 2 x Extra Black Standard Arcade Buttons
- 2 x Player 1 Standard Button (White)
- 2 x Player 2 Standard Button (White)
- 1 x Arcade Power Supply
- 1 x Amplifier
- 1 x JAMMA Harness
- 1 x Coin Mechanism
- 1 x Cooling Fan
- 2 x Speakers
- 2 x Speaker Grills
- 24 x Arcade Button Microswitches
- 4 x PCB Mounting Feet
- 1 x Cam Lock
(Monitor/Screen, Cabinets are not included in the kit.)
Product Requirements:
Requires a Standard JAMMA Arcade game setup using a rotating CGA display or a Standard PC VGA Monitor/LCD.
Shipping Info
Orders will be sent within 2 business days of the payment clearing. We ship to USA mainly. For international & bulk orders, please contact our support.
We use DHL Express to get your orders to you fast. Please note that we may ship from non USA warehouses if we are out of stock and it means goods are delivered quicker. This will not affect the shipping cost.
Shipping within USA is a flat rate of $9.95 for all orders below $250. All orders above $250 come with FREE shipping.


text:
About Denial
View All WorkBiography
Daniel Joseph Bombardier (Born September 27 1976) is a Canadian pop/mural artist whose aerosol and stencil artworks critique contemporary politics, capitalism, consumerism and the human condition under the artist's pseudonym and alter ego DENIAL. His artistic career began in 1999 during his involvement in the graffiti and street art movement.
DENIAL' studio is based in the border city of Windsor, Ontario, Canada next to Detroit, Michigan and spends much of the year travelling, painting murals, and exhibiting throughout North America and internationally. DENIAL is very active in painting large scale murals and street art which often depict bold, bright, subversive pop inspired imagery intended to stun the viewer into contemplating the deeper meaning of its content and meaning.
In 1999, Daniel adopted the moniker 'DENIAL' as a means of poking fun at advertising, politics and media messages that contemporary society is often 'in denial' about. Intended as a conceptual means of marketing absurdism, DENIAL also challenges traditional notions of graffiti and public art through his dynamic and often satirical visual subversions. A self-described subversive punk-pop artist, DENIAL' works challenge the comfortably numb consumer masses by holding up a mirror up to the viewer using comedic artistic expression, wit and provoking imagery in a unique, unforgettable aesthetic.


text:
Previous Lesson
Complete and Continue
Metrics Certified | Masters
Module 1: Introduction [20 mins]
Pre-course survey
PMA's top course tips
Your course pack
What to expect from this course (1:21)
How to get the most out of this course (1:21)
What are PMM Metrics and why do they matter? - KPIs and OKRs (3:38)
Solving the problem of attribution (3:14)
Quantity or quality? (2:10)
Key takeaways (1:28)
Module 2: Product launch metrics [110 mins]
Product launch metrics intro (2:05)
Product-market fit (4:33)
Win-rates (4:54)
Market share (3:51)
Sign-up surveys (3:22)
Conversion rate in target segment (2:01)
ARR and MRR (3:23)
ARPU and ARPA (2:02)
Churn rate (2:08)
Sign-up to subscriber (1:41)
The Importance of KPIs (1:42)
Coursework (1:41)
Key takeaways (2:57)
Fireside chat
Product launch metrics | Adobe
Bonus video
Craft your metrics for a competitive program | D-Wave Systems Inc.
Module 3: Product adoption and usage metrics [67 mins]
Product adoption and usage metrics intro (1:32)
Active users (2:52)
Feature adoption (3:33)
Customer satisfaction (4:07)
Retention, upsell and cross-sell (3:27)
Time taken to complete actions (4:57)
Coursework (1:59)
Key takeaways (3:27)
Fireside chat
Product adoption and usage | Redox
Module 4: Sales enablement metrics [190 mins]
Sales enablement metrics intro (2:48)
Asset utilization (3:04)
Sales confidence (1:40)
Pre-training sales surveys (2:02)
Time to close (2:24)
Case studies (3:55)
Coursework (1:33)
Key takeaways (2:15)
Fireside chat
Sales enablement | Secure Code Warrior
Bonus video
Metrics and Measurement for sales enablement | HP
Module 5: Lead and demand-gen metrics [42 mins]
Lead and demand-gen intro (1:09)
Click-through and open rate (2:15)
Marketing and sales qualified leads (4:19)
Brand awareness (4:57)
Customer lifetime value (3:08)
Customer acquisition cost (1:24)
Coursework (1:29)
Key takeaways (2:12)
Module 6: The ultimate framework for choosing and using metrics [113 mins]
Ultimate framework intro (1:06)
How to choose your metrics (3:04)
The framework (2:58)
Coursework (1:36)
Key takeaways (2:04)
Bonus video
Product marketing metrics that matter | Adobe
Module 7: How to gather, analyze and present data [208 mins]
Data gathering intro (1:23)
Gathering data (3:29)
Ownership of data analysis (1:42)
Data analysis mistakes (5:33)
The killer dashboard - how to report on your OKRs (6:16)
How to use metrics to increase your influence (4:43)
Coursework (2:17)
Key takeaways (2:21)
Fireside chat
Your metrics and your stakeholders | GrowthMentor
Bonus videos
The data your CEO actually cares about | monday.com
Data-driven decision making | Panel discussion
Cross organizational alignment using OKRs | LastPass case study
Wrap up
Course satisfaction survey
Resource library
Fancy leaving a review?
Your feedback
Let's get social
Learn. Level up. Lead.
Continue your professional development
Get your certificate
Ultimate framework intro
Lesson content locked
If you're already enrolled,
you'll need to login
Enroll in Course to Unlock


text:
Brady TEMPbadge T5907A Expiring Clip-on BACKpart PANTONE PURPLE TIMEbadge (Half/One Day)
The Brady TEMPbadge T5907A TIMEbadge expiring badges are a great way to introduce a high level of security for your visitors software. They expire slowly throughout a half/one day period. As time progresses a multiple of red stripes slowly start to appear on the front part of the badge.
- Size 3 x 3" (76 x 76 mm)
- Expiring "Highly Visible Red"
- Pkg of 1,000 Badges
- Self-Expiring(1/2-Day / 1-Day)
To begin the expiration process, attach the TIMEbadge back part to the TIMEbadge front part. For the half day in 4-6 hours the red stripes will be fully displayed on the front of the badge and after 12 hours the process should be completed. For the one day in 8-12 hours the red stripes will be fully displayed on the front of the badge and after 24 hours the process should be completed.
NOTE: This product contains Pkg of 1,000 BACKpart Badges.
Brady Expiring TIMEbadges
Brady TEMPbadge expiring products are made to be used in a controlled environment(indoors). The technology is chemically-based and therefore affected by changes in heat and high humidity. The warmer and/or more humid the environment, the faster the expiration process. The cooler and/or less humid the environment, the slower the expiration process.
CAUTION: Adhesive badges are NOT recommended for application on delicate garment materials such as cashmere, silk, suede, leather, vinyl, and/or corduroy.
Badge Size
BACKpart: 3 x 3" (76 x 76 mm)
Badge Design
Thermal Printable TIMEbadge
Badge Quantity
Pkg of 1,000 Badges
Self-Expiring Half/One Day (Approximately 4-6 Hours for the Half Day and 8-12 Hours for the One Day)
NOTE: Designed for use with a Direct Thermal Printer.


text:
Location selection allows Jérôme Dreyfuss to deliver to you the best services with respect to your localisation.
The goatskins have been tanned in a unique colour. A metallic film with a lizard pattern was applied on the velvet side for better adhesion. The skins were then washed.
Origin of the leather: Nigeria, tanning made in Italy
Protect from heat sources.
Avoid rubbing your accessory against rough surfaces. This material scratches easily.
Avoid snagging your accessory, as the material could tear.
Avoid contact with greasy or fatty substances.
Exposure to sunlight or artificial light can alter the colour of the leather.
Avoid contact with water. Beware that humidity may increase colour transfer and bleeding onto clothing.
Leather is a living and natural material. Using your accessory with delicacy will allow you to keep it longer.
Keychain, with a snap hook.
Free delivery for orders to all EU countries, except for the UK, Switzerland and Norway.
More information


text:
Design Notes
March 20, 2015
Brimstone Steppes
The Bandits of the Heath
Life is hard on the Steppes. General Kyron knows this better than anyone. That's why he did it, right? Robbing caravans, holding up travelers, demanding tolls that didn't exist. One-time Bandit Chieftain Kyron did what he had to do in order to ensure the survival of his troupe. But that is all over and done with.
There's a problem, though... recently, reports of bandit activity have made Kyron nervous. With the war and the plague, he cannot afford any distractions. It is up to you to help Kyron take down his former comrades, and escape the shackles of his troubled past!
Centaur Tier Package Details
Hold your horses heroes, because one does not simply rock the Centaur morph. Here's the lowdown on how you can giddy up as Lore's first-ever four-legged legend! (Click the picture for the full rundown!)
Rumors of Dragon Sightings!
Rumors about of dragons being sighted on the steppes, and over the Fire Islands themselves. Visit Vasalkar's Lair to take your chance at finding the 0 AC Akriloth's Bane polearm (available for a limited time), and also a hint about what comes next!
Happy Birthday Galanoth!
Gear up to DragOn! It's Galanoth the DragonSlayer's birthday today, so we released a special addition to the Lair map in his honor!
To celebrate, he'll need YOUR help to throw a party for every DragonSlayer on Lore. If there's one thing DragonSlayers do well (besides slaying dragons...) it's PARTY! He'll need you to go on quest to provide all the tastiest birthday treats: Dragon-Spice Cake, Wyrmfire Punch, Dragondoodle Cookies, and more!
Suggestion Shop Update:
Tonight is the first of several new Player Suggestion shop updates we'll be adding in over the coming weeks! We're starting the series of updates with Boxer502's "Rowan's Sword of Will." One of your fellow heroes, Boxer502 is best known for the many tophat suggestions that have found their way into our holiday event releases!
March 26, 2013
DarkBlood StormKing Class
Summon Storms to Destroy Your Enemies!
Command the skies as you hurl lightning and roar thunder! The StormKing Class releases THIS Friday in Falguard! You can purchase it once you have Rank 10 ThunderForge Reputation or for 2,000 Adventure Coins from the Class shop in your game menu! Watch the Design Notes later this week for Cysero's skill breakdown!
Summon the Storm as a StormKing!
Spring Seasonal Shop: ThunderBolt Striker Set!
Spring has sprung, so it's time for the Winter Seasonal Shop to head North for the year! This Friday, talk to Twilly to purchase a Storm Token and unlock the Spring Seasonal Shop! The Storm Token costs 1,000 Adventure Coins to unlock a shop full of 0 Adventure Coin items!
Fight the battle electric!
Inside the Spring Seasonal Shop, you'll find:
- ThunderBolt Striker Armor (animated)
- ThunderHorn Helm
- Lightning Slasher Dagger
- Dual Lightning Slashers
- Electric Storm Cape! (animated)
Warp Necromancer Viral Backpack Item!
We are always trying new things in AQWorlds, and next week (hopefully!), we want to release the Warp Necromancer Viral Backpack item! The Warp Necromancer shop will be in-game for a few weeks so people can purchase the Warp Necromancer Cape. When the cape is equipped, YOU will get a bonus to battles, and anyone who clicks on the cape will open a shop containing the rest of the set!
The Warp Necromancer Shop will contain:
- Warp Necromancer Cape (AC price to be determined)
- Warp Necromancer Armor (0 ACs)
- Warp Necromancer Helm (0 ACs)
- Warp Necromancer weapons (0 ACs)
As long as YOU have the cape, you'll be able to access the shop at any time. But once the Warp Necromancer LTS leaves the game, the only way to get ahold of this gear will be to find someone with the cape equipped, then purchase your own cape, armor, helm, and weapon! It will be really interesting to see how far this item spreads throughout the game!
News to Know!
- An Evil Undead Limited Time Shop launches next Monday! ("Evil Dead" is one of Artix's favorite movies!)
- The King Fisher character page badge had to be removed because it was breaking on the character page. New accounts had the badge as soon as they made their accounts, and with how the badge is set up, there was no pretty way to fix it. It will return in the Book of Lore soon!
- Lucky Day event AND Dage's Birthday Shop leave on Monday, April 1st!
- Galanoth's Birthday shop in /lair WILL get an updated version of the classic Dragon Blade AND a Legion version, but it may not be tomorrow. Dage worked himself half-undead to finish the StormKing Class before leaving for vacation today. Wish him a good time!
March 20, 2013
Happy Birthday Galanoth!
Celebrate the DragonSlayer's Birthday!
Gear up to DragOn! It's Galanoth the DragonSlayer's birthday today, so we released a special addition to the Lair map in his honor!
Galanoth levels up in real life!
To celebrate, he'll need YOUR help to throw a party for every DragonSlayer on Lore. If there's one thing DragonSlayers do well (besides slaying dragons...) it's PARTY! He'll need you to go on quest to provide all the tastiest birthday treats: Dragon-Spice Cake, Wyrmfire Punch, Dragondoodle Cookies, and more!
Evolved DragonSlayer remains in-game forever!
He's gathered together a dragon-sized treasure trove of gifts to thank any Heroes who help him celebrate:
- Evolved DragonSlayer Armor (permanent merge shop)
- Battle-scarred Evolved DragonSlayer Armor (Member-only)
- Seasonal color-custom DragonSlayer Armor (returns every year on his birthday)
- Golden DragonBlade (member-only)
- Platinum DragonBlade (AdventureCoins)
- Emerald DragonBlade
- Silver DragonSword (color-custom and non-CC)
- A Member-only quest gives double merge item rewards (get EvoDragonSlayer faster!)
- and more!
Battlescarred DragonSlayer and Silver DragonSword
Don't forget to /cheer your favorite DragonSlayer on all day!
January 27, 2012
Etherstorm's Water Realm...
Where Galanoth's Future is Decided!
Under a blood-red sky, a dragon is about to die! All dragons do, when facing Galanoth, right? He is not in any Etherstorm Realm you've seen yet, and there is no way for YOU to get to him. You will be too busy working to save the dragons and elements of Lore. No time to...
...find out just where Galanoth went! Or what he plans to do now that he's there! But the way he's holding that sword indicates that he's NOT on a mission of peace! Which dragon is about to feel the wrath of Galanoth the DragonSlayer? (We all know he is not very fond of fire dragons...)
MEANWHILE, IN THE WATER REALM: you have learned the location of the new Prime Dragons! Now your task is to unravel the complexly woven protection spell that is guarding them! (Wait... the Priests knew where they were all along? What?!)
Quest through a marsh that flows into the open ocean! Battle Marsh Lurkers, fishy foes, and wipe out water monsters as you race to an undersea finish! And don't forget:
The Deep Dweller waits!
Oh, and keep an eye out for anything fishy on the beach. Something that prooooobably shouldn't be there. Once you find it, run away. Fast.
Suggestion Shop Update!
Dage, Solrac and Jemini have whipped up some wildly awesome Suggestion Shop items based on the work of Impactor, Ayuzu, and disturbed indestructible!
Fantasy Warrior and Disturbed Blade!
- Fantasy Armor - Impactor
- Valkyrie Blade - Ayuzu
- Disturbed Blade - distrubed indestructible
- Seaweed Hat/Hairstyle - Ganloth
Fantasy Warrior and Valkyrie Blade!
Mid week release reminder!
Hey MEMBERS! Make sure you /join tower to check out the newest mid-week member-only release! Learn about the shadowy Silent Sentinels, an organization within the Guardian Order itself!
Coming next week!
Get ready for:
- Etherstorm Earth Realm!
- Member-only Mid-week release in Cornelis!
- Quibble arrives in Battleon with an Etherstorm-themed shop!
- New weapons in Chinese New Year shop!
Have a GREAT weekend, guys! Enjoy the release, stay dry, and make sure you keep an eye on the calendar, because the arrival of the next Chaos Lord draws ever closer...
January 23, 2012
Etherstorm's Water Realm
Galanoth has disappeared!
Water, Air, Earth - all of the Proto-Prime Dragons have been located! The Fire Proto-Prime Dragon has been free the whole time, and you've already met. (He's not too fond of you since his defeat!) The only problem NOW is getting them free of the sanctuary they've been confined in for their own protection! (... wait, so the Priests knew where they were all along? What?!)
Of COURSE they're guarded by a DeepDweller!
If you're going to loose the new Prime Dragons upon Lore, subdue Desoloth, calm the elements, and free the world... you're going to have to break an almost-unbreakable spell! That will be YOUR task this week, Hero! As for what our favorite DragonSlayer has been up to...
Etherstorm's Water Realm is comprised of marshy areas spilling into the ocean!
Let me wet your appetite* for news of Galanoth's whereabouts with the following -
There are two possible outcomes this week:
Disarmed or Unharmed.
When the unthinkable happens, lives will be changed, but you'll have to wait for this Friday to find out whether it's for the better... or worse!
Re-enactment of Monday morning's meeting:
Alina: Hey, Artix? We're REALLY going to do this. Just like we said we would. Fair warning.
Galanoth: They'll NEVER see it coming! Just make sure the DRAGON is there!
Alina: Don't worry, we'll make sure you get to battle the dragon. But... If you're SURE...
Artix + Cysero: Let's DO this! /thumbs up
* We know it's "whet your appetite." It's a pun. We make those a lot.
In the Guardian Tower, who watches the watchers?
You don't know much about the internal workings of the Guardians in BattleOn's Guardian Tower, but this Wednesday, members are about to get a MUCH closer look at what goes on behind locked doors and inside fortified towers!
Seems like they're up for watching YOU, if not a secretive Guardian organization!
Get ready to go on the inside of one of the most powerful - and secretive - groups that control the Guardian organization from behind the scenes. Are YOU up to the challenge of helping them? You'll have to be a member to find out!
Updates from Beleen!
Beleen is SUPER-excited and wants to make sure you know that you can get a PINK version of the Chinese New Year dragon armor in her secret shop (where, oh where, could Beleen be? Gee, I don't know! But I bet somewhere in this Design Notes there's a hint!) AND in the Chinese New Year merge shop!
Gong Xi Fa Cai! (PINK-style!)
She also asked me to remind you of the following bug fixes:
- The Chinese New Year non-member helm no longer requires a member helm.
(Celebrate!) - The inability to /join castle on the Alina server is being looked into.
(For now, please /join castle on a different server.) - The Living Air monster's disappearing/re-appearing head issue has been fixed.
(Guess his head was just in the clouds!)
Have a great Monday night and an awesome rest of the week! We'll see you Friday for the most INTENSE battle cutscene we've ever produced! Seriously.