Hardware component that connects a computer to a network
"Network card" redirects here. For the British Rail discount card, see
Network Railcard
.
A
network interface controller
(
NIC
, also known as a
network interface card
,
[3]
network adapter
,
LAN adapter
and
physical network interface
[4]
) is a
computer hardware
component that connects a
computer
to a
computer network
.
[5]
Early network interface controllers were commonly implemented on
expansion cards
that plugged into a
computer bus
. The low cost and ubiquity of the
Ethernet
standard means that most newer computers have a network interface built into the
motherboard
, or is contained into a
USB
-connected
dongle
.
Modern network interface controllers offer advanced features such as
interrupt
and
DMA
interfaces to the host processors, support for multiple receive and transmit queues, partitioning into multiple logical interfaces, and on-controller network traffic processing such as the
TCP offload engine
.
Purpose
[
edit
]
The network controller implements the electronic circuitry required to communicate using a specific
physical layer
and
data link layer
standard such as
Ethernet
or
Wi-Fi
.
[a]
This provides a base for a full network
protocol stack
, allowing communication among computers on the same
local area network
(LAN) and large-scale network communications through routable protocols, such as
Internet Protocol
(IP).
The NIC allows computers to communicate over a computer network, either by using cables or wirelessly. The NIC is both a physical layer and data link layer device, as it provides physical access to a networking medium and, for
IEEE 802
and similar networks, provides a low-level addressing system through the use of
MAC addresses
that are uniquely assigned to network interfaces.
Implementation
[
edit
]
Network controllers were originally implemented as expansion cards that plugged into a computer bus. The low cost and ubiquity of the Ethernet standard means that most new computers have a network interface controller built into the motherboard. Newer
server
motherboards may have multiple network interfaces built-in. The Ethernet capabilities are either
integrated
into the motherboard
chipset
or implemented via a low-cost dedicated Ethernet chip. A separate network card is typically no longer required unless additional independent network connections are needed or some non-Ethernet type of network is used. A general trend in computer hardware is towards
integrating the various components of systems on a chip
, and this is also applied to network interface cards.
An Ethernet network controller typically has an
8P8C
socket where the network cable is connected. Older NICs also supplied
BNC
, or
AUI
connections. Ethernet network controllers typically support 10
Mbit/s
Ethernet,
100 Mbit/s Ethernet
, and
1000 Mbit/s Ethernet
varieties. Such controllers are designated as
10/100/1000
, meaning that they can support data rates of 10, 100 or 1000 Mbit/s.
10 Gigabit Ethernet
NICs are also available, and, as of November 2014
[update]
, are beginning to be available on
computer motherboards
.
[6]
[7]
Modular designs like
SFP and SFP+
are highly popular, especially for
fiber-optic communication
. These define a standard receptacle for media-dependent transceivers, so users can easily adapt the network interface to their needs.
LEDs
adjacent to or integrated into the network connector inform the user of whether the network is connected, and when data activity occurs.
The NIC may include
ROM
to store its factory-assigned
MAC address
.
[8]
The NIC may use one or more of the following techniques to indicate the availability of packets to transfer:
- Polling
is where the
CPU
examines the status of the
peripheral
under program control.
- Interrupt
-driven I/O is where the peripheral alerts the CPU that it is ready to transfer data.
NICs may use one or more of the following techniques to transfer packet data:
- Programmed input/output
, where the CPU moves the data to or from the NIC to memory.
- Direct memory access
(DMA), where a device other than the CPU assumes control of the
system bus
to move data to or from the NIC to memory. This removes load from the CPU but requires more logic on the card. In addition, a packet buffer on the NIC may not be required and
latency
can be reduced.
Performance and advanced functionality
[
edit
]
Multiqueue NICs
provide multiple transmit and receive
queues
, allowing packets received by the NIC to be assigned to one of its receive queues. The NIC may distribute incoming traffic between the receive queues using a
hash function
. Each receive queue is assigned to a separate
interrupt
; by routing each of those interrupts to different
CPUs
or
CPU cores
, processing of the interrupt requests triggered by the network traffic received by a single NIC can be distributed improving performance.
[10]
[11]
The hardware-based distribution of the interrupts, described above, is referred to as
receive-side scaling
(RSS).
[12]
: 82
Purely software implementations also exist, such as the
receive packet steering
(RPS),
receive flow steering
(RFS),
[10]
and
Intel
Flow Director
.
[12]
: 98, 99
[13]
[14]
[15]
Further performance improvements can be achieved by routing the interrupt requests to the CPUs or cores executing the applications that are the ultimate destinations for
network packets
that generated the interrupts. This technique improves
locality of reference
and results in higher overall performance, reduced latency and better hardware utilization because of the higher utilization of
CPU caches
and fewer required
context switches
.
With multi-queue NICs, additional performance improvements can be achieved by distributing outgoing traffic among different transmit queues. By assigning different transmit queues to different CPUs or CPU cores, internal operating system contentions can be avoided. This approach is usually referred to as
transmit packet steering
(XPS).
[10]
Some products feature
NIC partitioning
(
NPAR
, also known as
port partitioning
) that uses
SR-IOV
virtualization to divide a single 10 Gigabit Ethernet NIC into multiple discrete virtual NICs with dedicated bandwidth, which are presented to the firmware and operating system as separate
PCI device functions
.
[3]
[16]
Some NICs provide a
TCP offload engine
to offload processing of the entire
TCP/IP
stack to the network controller. It is primarily used with high-speed network interfaces, such as Gigabit Ethernet and 10 Gigabit Ethernet, for which the processing overhead of the network stack becomes significant.
[17]
Some NICs offer integrated
field-programmable gate arrays
(FPGAs) for user-programmable processing of network traffic before it reaches the host computer, allowing for significantly reduced
latencies
in time-sensitive workloads.
[18]
Moreover, some NICs offer complete low-latency
TCP/IP stacks
running on integrated FPGAs in combination with
userspace
libraries that intercept networking operations usually performed by the
operating system kernel
; Solarflare's open-source
OpenOnload
network stack that runs on
Linux
is an example. This kind of functionality is usually referred to as
user-level networking
.
[19]
[20]
[21]
See also
[
edit
]
Notes
[
edit
]
- ^
Although other network technologies exist, Ethernet (
IEEE 802.3
) and Wi-Fi (
IEEE 802.11
) have achieved near-ubiquity as LAN technologies since the mid-1990s.
References
[
edit
]
- ^
"Port speed and duplex mode configuration"
.
docs.ruckuswireless.com
. Retrieved
2020-09-25
.
- ^
Admin, Arista (2020-04-23).
"Section 11.2: Ethernet Standards - Arista"
.
Arista Networks
. Retrieved
2020-09-28
.
- ^
a
b
"Enhancing Scalability Through Network Interface Card Partitioning"
(PDF)
.
Dell
. April 2011
. Retrieved
May 12,
2014
.
- ^
"Physical Network Interface"
.
Microsoft
. January 7, 2009.
- ^
Posey, Brien M. (2006).
"Networking Basics: Part 1 - Networking Hardware"
.
Windowsnetworking.com
. TechGenix Ltd
. Retrieved
2012-06-09
.
- ^
Jim O'Reilly (2014-01-22).
"Will 2014 Be The Year Of 10 Gigabit Ethernet?"
. Network Computing
. Retrieved
2015-04-29
.
- ^
"Breaking Speed Limits with ASRock X99 WS-E/10G and Intel 10G BASE-T LANs"
.
asrock.com
. 24 November 2014
. Retrieved
19 May
2015
.
- ^
John Savill (Nov 12, 2000).
"How can I change a network adapter card's MAC address?"
. Retrieved
2023-11-06
.
- ^
"Intel 82574 Gigabit Ethernet Controller Family Datasheet"
(PDF)
.
Intel
. June 2014. p. 1
. Retrieved
November 16,
2014
.
- ^
a
b
c
Tom Herbert; Willem de Bruijn (May 9, 2014).
"Linux kernel documentation: Documentation/networking/scaling.txt"
.
kernel.org
. Retrieved
November 16,
2014
.
- ^
"Intel Ethernet Controller i210 Family Product Brief"
(PDF)
.
Intel
. 2012
. Retrieved
November 16,
2014
.
- ^
a
b
"Intel Look Inside: Intel Ethernet"
(PDF)
.
Xeon E5 v3 (Grantley) Launch
.
Intel
. November 27, 2014. Archived from
the original
(PDF)
on March 26, 2015
. Retrieved
March 26,
2015
.
- ^
"Linux kernel documentation: Documentation/networking/ixgbe.txt"
.
kernel.org
. December 15, 2014
. Retrieved
March 26,
2015
.
- ^
"Intel Ethernet Flow Director"
.
Intel
. February 16, 2015
. Retrieved
March 26,
2015
.
- ^
"Introduction to Intel Ethernet Flow Director and Memcached Performance"
(PDF)
.
Intel
. October 14, 2014
. Retrieved
October 11,
2015
.
- ^
Patrick Kutch; Brian Johnson; Greg Rose (September 2011).
"An Introduction to Intel Flexible Port Partitioning Using SR-IOV Technology"
(PDF)
.
Intel
. Retrieved
September 24,
2015
.
- ^
Jonathan Corbet (August 1, 2007).
"Large receive offload"
.
LWN.net
. Retrieved
May 2,
2015
.
- ^
"High Performance Solutions for Cyber Security"
.
New Wave Design & Verification
. New Wave DV.
- ^
Timothy Prickett Morgan (2012-02-08).
"Solarflare turns network adapters into servers: When a CPU just isn't fast enough"
.
The Register
. Retrieved
2014-05-08
.
- ^
"OpenOnload"
.
openonload.org
. 2013-12-03
. Retrieved
2014-05-08
.
- ^
Steve Pope; David Riddoch (2008-03-21).
"OpenOnload: A user-level network stack"
(PDF)
.
openonload.org
. Retrieved
2014-05-08
.
External links
[
edit
]