Эта статья расширяет ваш кругозор в вопросах устройства компьютеров и их софта. Текст про важную вещь в сетевой архитектуре, и он будет полезен тем, кто собирается проектировать софт, как-то связанный с интернетом.
Чтобы разобраться в том, что такое сокеты и чем они так полезны, нужно кое-что вспомнить из статей про IP-адреса и про порты в программировании. Вот короткая выжимка из этих статей:
- У каждого компьютера в сети есть IP-адрес, даже если это просто локальная сеть.
- IP-адрес — это четыре числа от 0 до 255, разделённые точками, например 77.88.55.88 (это адрес сервера Яндекса).
- С помощью этих адресов компьютеры знают, куда направить свои запросы и ответы.
- Когда один компьютер соединяется с другим, они это делают через сетевой порт. Можно сказать, что порт — это номер соединения.
- Сетевые порты в компьютере нумеруются от 1 до 65535, а компьютер сам следит за тем, как распределяются эти номера.
- С помощью портов компьютер понимает, какие данные предназначены какой программе.
- Некоторые программы и соединения всегда используют один и тот же порт, а другие получают его случайным образом.
Главное: что такое сокет
Сокет — это виртуальная конструкция из IP-адреса и номера порта. Её придумали для того, чтобы разработчикам было проще писать код, а программы могли передавать данные друг другу даже в пределах одного компьютера.
⭐ Можно представить, что сокет — это виртуальная труба, которую строят между двумя приложениями, чтобы гонять между ними данные. Приложения видят только концы трубы, а как проходит трубопровод — они не знают и им неважно.
Смысл в том, чтобы программист работал не с IP-адресами и портами, разбираясь в тонкостях работы протоколов, а использовал что-то попроще. В итоге получается так:
- программист пишет в программе, что он хочет сделать новый сокет;
- указывает для него IP-адрес, если это необходимо;
- программа собирает это в виртуальную конструкцию, и получается сокет;
- после этого программист может отправлять данные просто в сокет и принимать их оттуда, а компьютер берёт на себя все вопросы по передаче данных.
Для чего нужны сокеты
Сокеты используют для двух вещей:
- для передачи данных по сети;
- и для связи между приложениями.
Как работает передача по сети, расскажем ниже, а сейчас поговорим про связь между приложениями. Идея в том, что если на компьютере запустить два приложения и в каждом из них настроить сокеты, то можно передавать данные из одного в другое даже без API. Например, на внутренних сокетах работают многие служебные программы — так они передают данные в операционную систему.
На сокетах работает половина интернета. Например, чтобы получить данные из мобильного приложения, сервер запускает у себя сокет для связи с приложением. Каждое приложение тоже открывает свой сокет, связывается через него с сервером, и так они обмениваются данными.
Но сокет на сервере один, а желающих подключиться к нему — много. Чтобы решить эту проблему, сервер копирует сокеты.
Копирование сокетов и множественные подключения
Когда на сервер поступает запрос на соединение с сокетом, он не устанавливает связь напрямую, а копирует этот сокет и настраивает связь через него. После копирования сервер запоминает, какая копия отвечает за какое соединение, и дальше просто обрабатывает все запросы по очереди. При этом исходный сокет остаётся нетронутым — он не используется для связи напрямую, а служит шаблоном для создания копий.
Если бы сервер так не делал, то с ним могло бы соединиться только одно приложение — первое, которое успело подключиться.
Что дальше
А дальше сделаем проект — напишем серверную и клиентскую часть и будем передавать данные между ними через сокеты, чтобы увидеть, как это работает в жизни. Подпишитесь, чтобы не пропустить проект.
Вёрстка:
Кирилл Климентьев
From Wikipedia, the free encyclopedia
In computer hardware, a CPU socket or CPU slot contains one or more mechanical components providing mechanical and electrical connections between a microprocessor and a printed circuit board (PCB). This allows for placing and replacing the central processing unit (CPU) without soldering.
Common sockets have retention clips that apply a constant force, which must be overcome when a device is inserted. For chips with many pins, zero insertion force (ZIF) sockets are preferred. Common sockets include Pin Grid Array (PGA) or Land Grid Array (LGA). These designs apply a compression force once either a handle (PGA type) or a surface plate (LGA type) is put into place. This provides superior mechanical retention while avoiding the risk of bending pins when inserting the chip into the socket. Certain devices use Ball Grid Array (BGA) sockets, although these require soldering and are generally not considered user replaceable.
CPU sockets are used on the motherboard in desktop and server computers. Because they allow easy swapping of components, they are also used for prototyping new circuits. Laptops typically use surface-mount CPUs, which take up less space on the motherboard than a socketed part.
As the pin density increases in modern sockets, increasing demands are placed on the printed circuit board fabrication technique, which permits the large number of signals to be successfully routed to nearby components. Likewise, within the chip carrier, the wire bonding technology also becomes more demanding with increasing pin counts and pin densities. Each socket technology will have specific reflow soldering requirements. As CPU and memory frequencies increase, above 30 MHz or thereabouts, electrical signalling increasingly shifts to differential signaling over parallel buses, bringing a new set of signal integrity challenges. The evolution of the CPU socket amounts to a coevolution of all these technologies in tandem.
Modern CPU sockets are almost always designed in conjunction with a heat sink mounting system, or in lower power devices, other thermal considerations.
Function[edit]
A CPU socket is made of plastic, and often comes with a lever or latch, and with metal contacts for each of the pins or lands on the CPU. Many packages are keyed to ensure the proper insertion of the CPU. CPUs with a PGA (pin grid array) package are inserted into the socket and, if included, the latch is closed. CPUs with an LGA (land grid array) package are inserted into the socket, the latch plate is flipped into position atop the CPU, and the lever is lowered and locked into place, pressing the CPU’s contacts firmly against the socket’s lands and ensuring a good connection, as well as increased mechanical stability.
List of CPU sockets and slots[edit]
80×86[edit]
Table legend:
Intel only
AMD only
Socket name |
Year of introduction | CPU families supported | Computer type | Package | Pin count | Pin pitch (mm) |
Bus clock & transfers |
Notes |
---|---|---|---|---|---|---|---|---|
DIP | 1970s | Intel 8086 Intel 8088 |
DIP | 40 | 2.54 | 5/10 MHz | ||
PLCC | ? | Intel 80186 Intel 80286 Intel 80386 |
PLCC | 68 to 132 | 1.27 | 6–40 MHz | ||
PGA 168 | ? | Intel 80486 AMD 486 Cyrix 486 |
PGA | 168 | 2.54 | 16–50 MHz | Sometimes referred to as Socket 0 or Socket 486 | |
Socket 1 | 1989 | Intel 80486 AMD 486 AMD 5×86 Cyrix 486 Cyrix 5×86 |
PGA | 169 | 2.54 | 16–50 MHz | ||
Socket 2 | ? | Intel 80486 Intel Pentium Overdrive (P24T) Intel DX4 AMD 486 AMD 5×86 Cyrix 486 Cyrix 5×86 |
PGA | 238 | 2.54 | 16–50 MHz | ||
Socket 3 | 1991 | Intel 80486 Intel Pentium Overrdrive (P24T) Intel DX4 AMD 486 AMD 5×86 Cyrix 486 Cyrix 5×86 IBM Blue Lightning |
PGA | 237 | 2.54 | 16–50 MHz[a] | ||
Socket 4 | 1993 | Intel Pentium | PGA | 273 | ? | 60–100 MHz | ||
Socket 5 | 1994 | Intel Pentium AMD K5 Cyrix 6×86 IDT WinChip C6 IDT WinChip 2 |
PGA | 320 | ? | 50–100 MHz | ||
Socket 6 | ? | Intel 80486 | PGA | 235 | ? | ? | Designed but not used | |
Socket 463/ Socket NexGen |
1994 | NexGen Nx586 | PGA | 463 | ? | 37.5–66 MHz | ||
Socket 7 | 1994 | Intel Pentium Intel Pentium MMX AMD K6 |
PGA | 321 | ? | 50–66 MHz | It is possible to use Socket 7 processors in a Socket 5. An adapter is required, or if one is careful, a socket 7 can be pulled off its pins and put onto a socket 5 board, allowing the use of socket 7 processors. | |
Socket 8 | 1995 | Intel Pentium Pro | PGA | 387 | ? | 60–66 MHz | ||
Slot 1 | 1997 | Intel Pentium II Intel Pentium III |
Desktop | Slot | 242 | ? | 66–133 MHz | Celeron (Covington, Mendocino) Pentium II (Klamath, Deschutes) Pentium III (Katmai)- all versions Pentium III (coppermine) |
Super Socket 7 | 1998 | AMD K6-2 AMD K6-III Rise mP6 Cyrix MII |
PGA | 321 | ? | 66–100 MHz | Backward compatible with Socket 5 and Socket 7 processors. | |
Slot 2 | 1998 | Intel Pentium II Xeon Intel Pentium III Xeon |
Server | Slot | 330 | ? | 100–133 MHz | |
Socket 615 | 1999 | Intel Mobile Pentium II Intel Mobile Celeron |
Notebook | PGA | 615 | ? | 66 MHz | |
Slot A | 1999 | AMD Athlon | Desktop | Slot | 242 | ? | 100 MHz | |
Socket 370 | 1999 | Intel Pentium III Intel Celeron VIA Cyrix III VIA C3 |
Desktop | PGA | 370 | 1.27[1] | 66–133 MHz | |
Socket A/ Socket 462 |
2000 | AMD Athlon AMD Duron AMD Athlon XP AMD Athlon XP-M AMD Athlon MP AMD Sempron |
Desktop | PGA | 462 | ? | 100–200 MHz 400 MT/s[b] |
|
Socket 423 | 2000 | Intel Pentium 4 | Desktop | PGA | 423 | 1[2] | 100 MHz 400 MT/s |
Willamette core only. Can accept some of Socket 478 CPU with an adapter |
Socket 495 | 2000 | Intel Celeron Intel Pentium III |
Notebook | PGA | 495 | 1.27[3] | 66–133 MHz | |
Socket 603 | 2001 | Intel Xeon | Server | PGA | 603 | 1.27[4] | 100–133 MHz 400–533 MT/s |
|
Socket 478/ Socket N |
2001 | Intel Pentium 4 Intel Celeron Intel Pentium 4 EE Intel Pentium 4 M |
Desktop | PGA | 478 | 1.27[5] | 100–200 MHz 400–800 MT/s |
|
Socket 563 | 2002 | AMD Athlon XP-M | Notebook | PGA | 563 | ? | 333 MHz | |
Socket 604 | 2002 | Intel Xeon | Server | PGA | 604 | 1.27[4] | 100–266 MHz 400–1066 MT/s |
|
Socket 754 | 2003 | AMD Athlon 64 AMD Sempron AMD Turion 64 |
Desktop | PGA | 754 | 1.27[6] | 200–800 MHz | |
Socket 940 | 2003 | AMD Opteron AMD Athlon 64 FX |
Desktop Server |
PGA | 940 | 1.27[7] | 200–1000 MHz | |
Socket 479 | 2003 | Intel Pentium M Intel Celeron M |
Notebook | PGA | 479[8] | ? | 100–133 MHz 400–533 MT/s |
|
Socket 939 | 2004 | AMD Athlon 64 AMD Athlon 64 FX AMD Athlon 64 X2 AMD Opteron |
Desktop | PGA | 939 | 1.27[9] | 200–1000 MHz | Support of Athlon 64 FX to 1 GHz Support of Opteron limited to 100-series only |
LGA 775/ Socket T |
2004 | Intel Pentium 4 Intel Pentium D Intel Celeron Intel Celeron D Intel Pentium XE Intel Core 2 Duo Intel Core 2 Quad Intel Xeon |
Desktop | LGA | 775 | 1.09 x 1.17[10] | 1600 MHz | Can accept LGA 771 CPU with slight modification and use of an adapter |
Socket M | 2006 | Intel Core Solo Intel Core Duo Intel Dual-Core Xeon Intel Core 2 Duo |
Notebook | PGA | 478 | ? | 133–166 MHz 533–667 MT/s |
Replaces Socket 479 |
LGA 771/ Socket J |
2006 | Intel Xeon | Server | LGA | 771 | 1.09 x 1.17[11] | 1600 MHz | See LGA 775/Socket T above |
Socket S1 | 2006 | AMD Turion 64 X2 | Notebook | PGA | 638 | 1.27[12] | 200–800 MHz | |
Socket AM2 | 2006 | AMD Athlon 64 AMD Athlon 64 X2 |
Desktop | PGA | 940 | 1.27[9] | 200–1000 MHz | Replaces Socket 754 and Socket 939 |
Socket F/ Socket L (Socket 1207FX) |
2006 | AMD Athlon 64 FX AMD Opteron (Socket L only support Athlon 64 FX) |
Desktop Server |
LGA | 1207 | 1.1[13] | Socket L: 1000 MHz in Single CPU mode, 2000 MHz in Dual CPU mode |
Replaces Socket 940 Socket L was intended for enthusiasts who wanted server power in a desktop PC. It is just a re-branded Socket F that doesn’t need special RAM, and may have only been used in the Asus L1N64-SLI WS Motherboard. |
Socket AM2+ | 2007 | AMD Athlon 64 AMD Athlon X2 AMD Phenom AMD Phenom II |
Desktop | PGA | 940 | 1.27[9] | 200–2600 MHz | Separated power planes Replaces Socket AM2 AM2+ Pkg. CPUs can work in Socket AM2 AM2 Pkg. CPUs can work in Socket AM2+ |
Socket P | 2007 | Intel Core 2 | Notebook | PGA | 478 | ? | 133–266 MHz 533–1066 MT/s |
Replaces Socket M |
LGA 1366/ Socket B |
2008 | Intel Core i7 (900 series) Intel Xeon (35xx, 36xx, 55xx, 56xx series) |
Desktop Server |
LGA | 1366 | ? | 4.8–6.4 GT/s | Replaces Socket J (LGA 771) in the entry level. |
Socket AM3 | 2009 | AMD Phenom II AMD Athlon II AMD Sempron AMD Opteron (1300 series) |
Desktop | PGA | 941[14] or 940[15] | 1.27[9] | 200–3200 MHz | Separated power planes Replaces Socket AM2+ AM3 Pkg. CPUs can work in Socket AM2/AM2+ Sempron 140 only |
rPGA 988A/ Socket G1 |
2009 | Intel Clarksfield Intel Arrandale |
Notebook | rPGA | 988 | 1 | 2.5 GT/s | Replaces Socket P |
LGA 1156/ Socket H |
2009 | Intel Nehalem (1st gen) Intel Westmere |
Desktop | LGA | 1156 | ? | 2.5 GT/s | DMI bus is a (perhaps modified) PCIe x4 v1.1 interface |
Socket G34 | 2010 | AMD Opteron (6000 series) | Server | LGA | 1974 | ? | 200–3200 MHz | Replaces Socket F |
Socket C32 | 2010 | AMD Opteron (4000 series) | Server | LGA | 1207 | ? | 200–3200 MHz | Replaces Socket F, Socket AM3 |
LGA 1567/ Socket LS |
2010 | Intel Xeon 6500/7500-series | Server | LGA | 1567 | ? | 4.8–6.4 GT/s | |
LGA 1155/ Socket H2 |
2011/Q1 2011.01.09 |
Intel Sandy Bridge (2nd gen) Intel Ivy Bridge (3rd gen) |
Desktop | LGA | 1155 | ? | 5.7 GT/s | used for Intel 2nd generation, 3rd generation processors.
Sandy Bridge supports 20 PCIe 2.0 lanes. |
LGA 2011/ Socket R |
2011/Q3 2011.11.14 |
Intel Core i7 3xxx Sandy Bridge-E Intel Core i7 4xxx Ivy Bridge-E Intel Xeon E5 2xxx/4xxx (Sandy Bridge EP) (2/4S) Intel Xeon E5-2xxx/4xxx v2 (Ivy Bridge EP) (2/4S) |
Desktop Server |
LGA | 2011 | ? | 4.8–6.4 GT/s | Sandy Bridge-E/EP and Ivy Bridge-E/EP both support 40 PCIe 3.0 lanes. Using the Xeon focused 2011 socket gives also 4 memory Channels. |
rPGA 988B/ Socket G2 |
2011 | Intel Core i7 (2000, 3000 series) Intel Core i5 (2000, 3000 series) Intel Core i3 (2000, 3000 series) |
Notebook | rPGA | 988 | 1 | 2.5 GT/s, 4.8 GT/s | |
Socket FM1 | 2011 | AMD Llano Processors | Desktop | PGA | 905 | 1.27 | 5.2 GT/s | used for 1st generation APUs |
Socket FS1 | 2011 | AMD Llano Processors | Notebook | PGA | 722 | 1.27 | 3.2 GT/s | used for 1st generation Mobile APUs |
Socket AM3+ | 2011 | AMD FX Vishera AMD FX Zambezi AMD Phenom II AMD Athlon II AMD Sempron |
Desktop | PGA | 942 (CPU 71pin) | 1.27 | 3.2 GT/s | |
LGA 1356/ Socket B2 |
2012 | Intel Xeon (E5 1400 & 2400 series) | Server | LGA | 1356 | ? | 3.2–4.0 GT/s | |
Socket FM2 | 2012 | AMD Trinity Processors | Desktop | PGA | 904 | 1.27 | ? | used for 2nd generation APUs |
LGA 1150/ Socket H3 |
2013 | Intel Haswell (4th gen) Intel Haswell Refresh Intel Broadwell (5th gen) |
Desktop | LGA | 1150 | ? | ? | used for Intel’s 4th generation (Haswell/Haswell Refresh), the handful of intel 5th generation processors |
rPGA 946B/947/ Socket G3 |
2013 | Intel Haswell | Notebook | rPGA | 946 | 1 | 5.0 GT/s | |
Socket FM2+ | 2014 | AMD Kaveri AMD Godavari |
Desktop | PGA | 906 | 1.27 | ? | Compatible with AMD APUs such as «Richland» and «Trinity» |
Socket AM1 | 2014 | AMD Athlon AMD Sempron |
Desktop | PGA | 721 | 1.27 | ? | Compatible with AMD APUs such as «Kabini» |
LGA 2011-v3 | 2014 (August and September) |
Haswell-E Haswell-EP |
Desktop | LGA | 2011 | ? | Up to 68 GB/sec. Depends on DDR4 speed and channel count. |
Up to 40 PCIe 3.0 lanes. Up to 4 memory Channels. |
LGA 1151/ Socket H4 |
2015 | Intel Skylake (6th gen) Intel Kaby Lake (7th gen) Intel Coffee Lake (8th gen) Intel Coffee Lake Refresh (9th gen) |
Desktop | LGA | 1151 | ? | 5 GT/s — 8 GT/s | used for Intel’s 6th generation (Skylake), 7th generation (Kaby Lake), 8th generation (Coffee Lake) processors, and 9th generation (Coffee Lake Refresh) processors |
LGA 3647 | 2016 | Intel Xeon Phi Intel Skylake-SP |
Server | LGA | 3647 | ? | ? | used for Intel’s Xeon Phi x200 and Xeon Scalable processors |
Socket AM4 | 2017 | AMD Ryzen 9 AMD Ryzen 7 AMD Ryzen 5 AMD Ryzen 3 Athlon 200 |
Desktop | PGA | 1331 | 1 | Depends on DDR4 speed | compatible with AMD Ryzen 9, Ryzen 7, Ryzen 5 & Ryzen 3 Zen based processors |
Socket SP3 | 2017 | AMD Epyc | Server | LGA | 4094 | ? | Depends on DDR4 speed | compatible with AMD Epyc processors |
Socket TR4/ Socket SP3r2 |
2017 | AMD Ryzen Threadripper | Desktop | LGA | 4094 | ? | Depends on DDR4 speed | compatible with AMD Ryzen Threadripper processors |
LGA 2066/ Socket R4 |
2017 | Intel Skylake-X Intel Kaby Lake-X Intel Cascade Lake-X |
Desktop Server |
LGA | 2066 | ? | ? | Used for Intel’s 7th generation (Skylake-X & Kaby Lake-X & Cascade Lake-X) series of Core-X processors |
Socket sTRX4/ Socket SP3r3 |
2019 | AMD Ryzen Threadripper (3000 series) | Desktop | LGA | 4094 | ? | Depends on DDR4 speed | compatible with 3rd generation AMD Ryzen Threadripper processors |
LGA 4189 | 2020 | Intel Cooper Lake Intel Ice Lake-SP |
Desktop Server |
LGA | 4189[16] | 0.99[16] | ||
LGA 1200 | 2020 | Intel Comet Lake (10th gen) Intel Rocket Lake (11th gen) |
Desktop | LGA | 1200 | |||
LGA 1700 | 2021 | Intel Alder Lake (12th gen) | Desktop | LGA | 1700 | |||
LGA 1700 | 2022 | Intel Raptor Lake (13th gen) | Desktop | LGA | 1700 | |||
Socket AM5 | 2022 | AMD Ryzen 7000 series | Desktop | LGA | 1718 | Zen 4 Ryzen CPUs | ||
Socket SP5 | 2022 | AMD Epyc Genoa | Server | LGA | 6096 | Used for Epyc Genoa and Milan | ||
LGA 4677 | 2022 | Intel Sapphire Rapids | Server | LGA | 4677 | |||
LGA 7529 | 2024 | Intel Sierra Forest | Server | LGA | 7529 | |||
Socket name |
Year of introduction | CPU families supported | Computer type | Package | Pin count | Pin pitch (mm) |
Bus clock & transfers |
Notes |
- ^ Some late model Socket 3 motherboards unofficially supported FSB speeds up to 66MHz
- ^ This is a double data rate bus. FSB in the later models.
Other ISAs[edit]
Socket name |
Year of introduction | CPU families supported | Computer type | Package | Pin count | Pin pitch (mm) |
Bus clock & transfers |
Notes |
---|---|---|---|---|---|---|---|---|
Daughter Card | 1995 | PowerPC 601+ | Desktop | Slot | 146 | ? | 40-60 Hz | |
Socket 288 | ? | PowerPC 603+ | Desktop | PGA | 288 | ? | 40-60 Hz | |
Socket 431 | 1995 | Alpha 21064/21064A | Desktop | PGA | 431 | ? | 12.5–66.67 MHz | |
Socket 499 | 1997 | Alpha 21164/21164A | Desktop | PGA | 499 | ? | 15–100 MHz | |
Socket 587 | 1998 | Alpha 21264 | Desktop | PGA | 587 | ? | 12.5–133 MHz | |
Slot B | 1999 | Alpha 21264/21264A | Desktop | Slot | 587 | ? | 100 MHz[17] | |
PAC418 | 2001 | Intel Itanium | Server | PGA | 418 | ? | 133 MHz | |
PAC611 | 2002 | Intel Itanium 2 HP PA-8800, PA-8900 |
Server | PGA | 611 | ? | 200 MHz | |
LGA 1248 | 2010 | Intel Itanium 9300-series and up | Server | LGA | 1248 | ? | 4.8-6.4 GT/s | |
Socket name |
Year of introduction | CPU families supported | Computer type | Package | Pin count | Pin pitch (mm) |
Bus clock & transfers |
Notes |
Slotkets[edit]
Slotkets are special adapters for using socket processors in bus-compatible slot motherboards.
See also[edit]
- List of AMD processors
- List of Intel processors
References[edit]
- ^ «Intel 815 Chipset Family» (PDF). Intel. Retrieved May 4, 2009.
- ^ «423 Pin Socket (PGA423) Design Guidelines» (PDF). Intel. Archived (PDF) from the original on December 29, 2009. Retrieved May 3, 2009.
- ^ «495-Pin and 615-pin micro-PGA ZIF Socket Design Specification Application Note» (PDF). Intel. Retrieved May 3, 2009.
- ^ a b «mPGA 604 Socket Mechanical Design Guide» (PDF). Intel. Retrieved May 3, 2009.
- ^ «Intel Pentium 4 Processor 478-Pin Socket (mPGA478) Design Guidelines» (PDF). Intel. Retrieved May 3, 2009.
- ^ «AMD Sempron Processor Product Data Sheet» (PDF). AMD. Retrieved May 3, 2009.
- ^ «AMD Opteron Processor Product Data Sheet» (PDF). AMD. Retrieved May 3, 2009.
- ^ CPU only has 478 pins, but the socket has 479.
- ^ a b c d «AMD Opteron Processor Product Data Sheet» (PDF). AMD. Retrieved May 3, 2009.
- ^ «LGA 775 Socket Mechanical Design Guide» (PDF). Intel. Retrieved May 4, 2009.
- ^ «LGA771 Socket Mechanical Design Guide» (PDF). Intel. Retrieved May 3, 2009.
- ^ «Low-Profile Socket S1 Design Specification» (PDF). AMD. Retrieved May 3, 2009.
- ^ «Thermal Design Guide for Socket F (1207) Processors» (PDF). AMD. Retrieved May 6, 2009.
- ^ CPU only has 938 pins, but the socket has 941.
- ^ AMD Documentation «Socket AM3 design Specification» (PDF). AMD. Retrieved January 5, 2012.
- ^ a b «LGA 4189 Socket and Hardware» (PDF).
- ^ Hachman, Mark (February 2, 1999). «Alpha camp moves to «Slot B» connector to push further into workstations». EE Times. Retrieved November 10, 2022.
External links[edit]
- Socket ID Guide
- CPU Sockets Chart — A fairly detailed table listing x86 Sockets and associated attributes.
- techPowerUp! CPU Database
- Processor sockets
From Wikipedia, the free encyclopedia
In computer hardware, a CPU socket or CPU slot contains one or more mechanical components providing mechanical and electrical connections between a microprocessor and a printed circuit board (PCB). This allows for placing and replacing the central processing unit (CPU) without soldering.
Common sockets have retention clips that apply a constant force, which must be overcome when a device is inserted. For chips with many pins, zero insertion force (ZIF) sockets are preferred. Common sockets include Pin Grid Array (PGA) or Land Grid Array (LGA). These designs apply a compression force once either a handle (PGA type) or a surface plate (LGA type) is put into place. This provides superior mechanical retention while avoiding the risk of bending pins when inserting the chip into the socket. Certain devices use Ball Grid Array (BGA) sockets, although these require soldering and are generally not considered user replaceable.
CPU sockets are used on the motherboard in desktop and server computers. Because they allow easy swapping of components, they are also used for prototyping new circuits. Laptops typically use surface-mount CPUs, which take up less space on the motherboard than a socketed part.
As the pin density increases in modern sockets, increasing demands are placed on the printed circuit board fabrication technique, which permits the large number of signals to be successfully routed to nearby components. Likewise, within the chip carrier, the wire bonding technology also becomes more demanding with increasing pin counts and pin densities. Each socket technology will have specific reflow soldering requirements. As CPU and memory frequencies increase, above 30 MHz or thereabouts, electrical signalling increasingly shifts to differential signaling over parallel buses, bringing a new set of signal integrity challenges. The evolution of the CPU socket amounts to a coevolution of all these technologies in tandem.
Modern CPU sockets are almost always designed in conjunction with a heat sink mounting system, or in lower power devices, other thermal considerations.
Function[edit]
A CPU socket is made of plastic, and often comes with a lever or latch, and with metal contacts for each of the pins or lands on the CPU. Many packages are keyed to ensure the proper insertion of the CPU. CPUs with a PGA (pin grid array) package are inserted into the socket and, if included, the latch is closed. CPUs with an LGA (land grid array) package are inserted into the socket, the latch plate is flipped into position atop the CPU, and the lever is lowered and locked into place, pressing the CPU’s contacts firmly against the socket’s lands and ensuring a good connection, as well as increased mechanical stability.
List of CPU sockets and slots[edit]
80×86[edit]
Table legend:
Intel only
AMD only
Socket name |
Year of introduction | CPU families supported | Computer type | Package | Pin count | Pin pitch (mm) |
Bus clock & transfers |
Notes |
---|---|---|---|---|---|---|---|---|
DIP | 1970s | Intel 8086 Intel 8088 |
DIP | 40 | 2.54 | 5/10 MHz | ||
PLCC | ? | Intel 80186 Intel 80286 Intel 80386 |
PLCC | 68 to 132 | 1.27 | 6–40 MHz | ||
PGA 168 | ? | Intel 80486 AMD 486 Cyrix 486 |
PGA | 168 | 2.54 | 16–50 MHz | Sometimes referred to as Socket 0 or Socket 486 | |
Socket 1 | 1989 | Intel 80486 AMD 486 AMD 5×86 Cyrix 486 Cyrix 5×86 |
PGA | 169 | 2.54 | 16–50 MHz | ||
Socket 2 | ? | Intel 80486 Intel Pentium Overdrive (P24T) Intel DX4 AMD 486 AMD 5×86 Cyrix 486 Cyrix 5×86 |
PGA | 238 | 2.54 | 16–50 MHz | ||
Socket 3 | 1991 | Intel 80486 Intel Pentium Overrdrive (P24T) Intel DX4 AMD 486 AMD 5×86 Cyrix 486 Cyrix 5×86 IBM Blue Lightning |
PGA | 237 | 2.54 | 16–50 MHz[a] | ||
Socket 4 | 1993 | Intel Pentium | PGA | 273 | ? | 60–100 MHz | ||
Socket 5 | 1994 | Intel Pentium AMD K5 Cyrix 6×86 IDT WinChip C6 IDT WinChip 2 |
PGA | 320 | ? | 50–100 MHz | ||
Socket 6 | ? | Intel 80486 | PGA | 235 | ? | ? | Designed but not used | |
Socket 463/ Socket NexGen |
1994 | NexGen Nx586 | PGA | 463 | ? | 37.5–66 MHz | ||
Socket 7 | 1994 | Intel Pentium Intel Pentium MMX AMD K6 |
PGA | 321 | ? | 50–66 MHz | It is possible to use Socket 7 processors in a Socket 5. An adapter is required, or if one is careful, a socket 7 can be pulled off its pins and put onto a socket 5 board, allowing the use of socket 7 processors. | |
Socket 8 | 1995 | Intel Pentium Pro | PGA | 387 | ? | 60–66 MHz | ||
Slot 1 | 1997 | Intel Pentium II Intel Pentium III |
Desktop | Slot | 242 | ? | 66–133 MHz | Celeron (Covington, Mendocino) Pentium II (Klamath, Deschutes) Pentium III (Katmai)- all versions Pentium III (coppermine) |
Super Socket 7 | 1998 | AMD K6-2 AMD K6-III Rise mP6 Cyrix MII |
PGA | 321 | ? | 66–100 MHz | Backward compatible with Socket 5 and Socket 7 processors. | |
Slot 2 | 1998 | Intel Pentium II Xeon Intel Pentium III Xeon |
Server | Slot | 330 | ? | 100–133 MHz | |
Socket 615 | 1999 | Intel Mobile Pentium II Intel Mobile Celeron |
Notebook | PGA | 615 | ? | 66 MHz | |
Slot A | 1999 | AMD Athlon | Desktop | Slot | 242 | ? | 100 MHz | |
Socket 370 | 1999 | Intel Pentium III Intel Celeron VIA Cyrix III VIA C3 |
Desktop | PGA | 370 | 1.27[1] | 66–133 MHz | |
Socket A/ Socket 462 |
2000 | AMD Athlon AMD Duron AMD Athlon XP AMD Athlon XP-M AMD Athlon MP AMD Sempron |
Desktop | PGA | 462 | ? | 100–200 MHz 400 MT/s[b] |
|
Socket 423 | 2000 | Intel Pentium 4 | Desktop | PGA | 423 | 1[2] | 100 MHz 400 MT/s |
Willamette core only. Can accept some of Socket 478 CPU with an adapter |
Socket 495 | 2000 | Intel Celeron Intel Pentium III |
Notebook | PGA | 495 | 1.27[3] | 66–133 MHz | |
Socket 603 | 2001 | Intel Xeon | Server | PGA | 603 | 1.27[4] | 100–133 MHz 400–533 MT/s |
|
Socket 478/ Socket N |
2001 | Intel Pentium 4 Intel Celeron Intel Pentium 4 EE Intel Pentium 4 M |
Desktop | PGA | 478 | 1.27[5] | 100–200 MHz 400–800 MT/s |
|
Socket 563 | 2002 | AMD Athlon XP-M | Notebook | PGA | 563 | ? | 333 MHz | |
Socket 604 | 2002 | Intel Xeon | Server | PGA | 604 | 1.27[4] | 100–266 MHz 400–1066 MT/s |
|
Socket 754 | 2003 | AMD Athlon 64 AMD Sempron AMD Turion 64 |
Desktop | PGA | 754 | 1.27[6] | 200–800 MHz | |
Socket 940 | 2003 | AMD Opteron AMD Athlon 64 FX |
Desktop Server |
PGA | 940 | 1.27[7] | 200–1000 MHz | |
Socket 479 | 2003 | Intel Pentium M Intel Celeron M |
Notebook | PGA | 479[8] | ? | 100–133 MHz 400–533 MT/s |
|
Socket 939 | 2004 | AMD Athlon 64 AMD Athlon 64 FX AMD Athlon 64 X2 AMD Opteron |
Desktop | PGA | 939 | 1.27[9] | 200–1000 MHz | Support of Athlon 64 FX to 1 GHz Support of Opteron limited to 100-series only |
LGA 775/ Socket T |
2004 | Intel Pentium 4 Intel Pentium D Intel Celeron Intel Celeron D Intel Pentium XE Intel Core 2 Duo Intel Core 2 Quad Intel Xeon |
Desktop | LGA | 775 | 1.09 x 1.17[10] | 1600 MHz | Can accept LGA 771 CPU with slight modification and use of an adapter |
Socket M | 2006 | Intel Core Solo Intel Core Duo Intel Dual-Core Xeon Intel Core 2 Duo |
Notebook | PGA | 478 | ? | 133–166 MHz 533–667 MT/s |
Replaces Socket 479 |
LGA 771/ Socket J |
2006 | Intel Xeon | Server | LGA | 771 | 1.09 x 1.17[11] | 1600 MHz | See LGA 775/Socket T above |
Socket S1 | 2006 | AMD Turion 64 X2 | Notebook | PGA | 638 | 1.27[12] | 200–800 MHz | |
Socket AM2 | 2006 | AMD Athlon 64 AMD Athlon 64 X2 |
Desktop | PGA | 940 | 1.27[9] | 200–1000 MHz | Replaces Socket 754 and Socket 939 |
Socket F/ Socket L (Socket 1207FX) |
2006 | AMD Athlon 64 FX AMD Opteron (Socket L only support Athlon 64 FX) |
Desktop Server |
LGA | 1207 | 1.1[13] | Socket L: 1000 MHz in Single CPU mode, 2000 MHz in Dual CPU mode |
Replaces Socket 940 Socket L was intended for enthusiasts who wanted server power in a desktop PC. It is just a re-branded Socket F that doesn’t need special RAM, and may have only been used in the Asus L1N64-SLI WS Motherboard. |
Socket AM2+ | 2007 | AMD Athlon 64 AMD Athlon X2 AMD Phenom AMD Phenom II |
Desktop | PGA | 940 | 1.27[9] | 200–2600 MHz | Separated power planes Replaces Socket AM2 AM2+ Pkg. CPUs can work in Socket AM2 AM2 Pkg. CPUs can work in Socket AM2+ |
Socket P | 2007 | Intel Core 2 | Notebook | PGA | 478 | ? | 133–266 MHz 533–1066 MT/s |
Replaces Socket M |
LGA 1366/ Socket B |
2008 | Intel Core i7 (900 series) Intel Xeon (35xx, 36xx, 55xx, 56xx series) |
Desktop Server |
LGA | 1366 | ? | 4.8–6.4 GT/s | Replaces Socket J (LGA 771) in the entry level. |
Socket AM3 | 2009 | AMD Phenom II AMD Athlon II AMD Sempron AMD Opteron (1300 series) |
Desktop | PGA | 941[14] or 940[15] | 1.27[9] | 200–3200 MHz | Separated power planes Replaces Socket AM2+ AM3 Pkg. CPUs can work in Socket AM2/AM2+ Sempron 140 only |
rPGA 988A/ Socket G1 |
2009 | Intel Clarksfield Intel Arrandale |
Notebook | rPGA | 988 | 1 | 2.5 GT/s | Replaces Socket P |
LGA 1156/ Socket H |
2009 | Intel Nehalem (1st gen) Intel Westmere |
Desktop | LGA | 1156 | ? | 2.5 GT/s | DMI bus is a (perhaps modified) PCIe x4 v1.1 interface |
Socket G34 | 2010 | AMD Opteron (6000 series) | Server | LGA | 1974 | ? | 200–3200 MHz | Replaces Socket F |
Socket C32 | 2010 | AMD Opteron (4000 series) | Server | LGA | 1207 | ? | 200–3200 MHz | Replaces Socket F, Socket AM3 |
LGA 1567/ Socket LS |
2010 | Intel Xeon 6500/7500-series | Server | LGA | 1567 | ? | 4.8–6.4 GT/s | |
LGA 1155/ Socket H2 |
2011/Q1 2011.01.09 |
Intel Sandy Bridge (2nd gen) Intel Ivy Bridge (3rd gen) |
Desktop | LGA | 1155 | ? | 5.7 GT/s | used for Intel 2nd generation, 3rd generation processors.
Sandy Bridge supports 20 PCIe 2.0 lanes. |
LGA 2011/ Socket R |
2011/Q3 2011.11.14 |
Intel Core i7 3xxx Sandy Bridge-E Intel Core i7 4xxx Ivy Bridge-E Intel Xeon E5 2xxx/4xxx (Sandy Bridge EP) (2/4S) Intel Xeon E5-2xxx/4xxx v2 (Ivy Bridge EP) (2/4S) |
Desktop Server |
LGA | 2011 | ? | 4.8–6.4 GT/s | Sandy Bridge-E/EP and Ivy Bridge-E/EP both support 40 PCIe 3.0 lanes. Using the Xeon focused 2011 socket gives also 4 memory Channels. |
rPGA 988B/ Socket G2 |
2011 | Intel Core i7 (2000, 3000 series) Intel Core i5 (2000, 3000 series) Intel Core i3 (2000, 3000 series) |
Notebook | rPGA | 988 | 1 | 2.5 GT/s, 4.8 GT/s | |
Socket FM1 | 2011 | AMD Llano Processors | Desktop | PGA | 905 | 1.27 | 5.2 GT/s | used for 1st generation APUs |
Socket FS1 | 2011 | AMD Llano Processors | Notebook | PGA | 722 | 1.27 | 3.2 GT/s | used for 1st generation Mobile APUs |
Socket AM3+ | 2011 | AMD FX Vishera AMD FX Zambezi AMD Phenom II AMD Athlon II AMD Sempron |
Desktop | PGA | 942 (CPU 71pin) | 1.27 | 3.2 GT/s | |
LGA 1356/ Socket B2 |
2012 | Intel Xeon (E5 1400 & 2400 series) | Server | LGA | 1356 | ? | 3.2–4.0 GT/s | |
Socket FM2 | 2012 | AMD Trinity Processors | Desktop | PGA | 904 | 1.27 | ? | used for 2nd generation APUs |
LGA 1150/ Socket H3 |
2013 | Intel Haswell (4th gen) Intel Haswell Refresh Intel Broadwell (5th gen) |
Desktop | LGA | 1150 | ? | ? | used for Intel’s 4th generation (Haswell/Haswell Refresh), the handful of intel 5th generation processors |
rPGA 946B/947/ Socket G3 |
2013 | Intel Haswell | Notebook | rPGA | 946 | 1 | 5.0 GT/s | |
Socket FM2+ | 2014 | AMD Kaveri AMD Godavari |
Desktop | PGA | 906 | 1.27 | ? | Compatible with AMD APUs such as «Richland» and «Trinity» |
Socket AM1 | 2014 | AMD Athlon AMD Sempron |
Desktop | PGA | 721 | 1.27 | ? | Compatible with AMD APUs such as «Kabini» |
LGA 2011-v3 | 2014 (August and September) |
Haswell-E Haswell-EP |
Desktop | LGA | 2011 | ? | Up to 68 GB/sec. Depends on DDR4 speed and channel count. |
Up to 40 PCIe 3.0 lanes. Up to 4 memory Channels. |
LGA 1151/ Socket H4 |
2015 | Intel Skylake (6th gen) Intel Kaby Lake (7th gen) Intel Coffee Lake (8th gen) Intel Coffee Lake Refresh (9th gen) |
Desktop | LGA | 1151 | ? | 5 GT/s — 8 GT/s | used for Intel’s 6th generation (Skylake), 7th generation (Kaby Lake), 8th generation (Coffee Lake) processors, and 9th generation (Coffee Lake Refresh) processors |
LGA 3647 | 2016 | Intel Xeon Phi Intel Skylake-SP |
Server | LGA | 3647 | ? | ? | used for Intel’s Xeon Phi x200 and Xeon Scalable processors |
Socket AM4 | 2017 | AMD Ryzen 9 AMD Ryzen 7 AMD Ryzen 5 AMD Ryzen 3 Athlon 200 |
Desktop | PGA | 1331 | 1 | Depends on DDR4 speed | compatible with AMD Ryzen 9, Ryzen 7, Ryzen 5 & Ryzen 3 Zen based processors |
Socket SP3 | 2017 | AMD Epyc | Server | LGA | 4094 | ? | Depends on DDR4 speed | compatible with AMD Epyc processors |
Socket TR4/ Socket SP3r2 |
2017 | AMD Ryzen Threadripper | Desktop | LGA | 4094 | ? | Depends on DDR4 speed | compatible with AMD Ryzen Threadripper processors |
LGA 2066/ Socket R4 |
2017 | Intel Skylake-X Intel Kaby Lake-X Intel Cascade Lake-X |
Desktop Server |
LGA | 2066 | ? | ? | Used for Intel’s 7th generation (Skylake-X & Kaby Lake-X & Cascade Lake-X) series of Core-X processors |
Socket sTRX4/ Socket SP3r3 |
2019 | AMD Ryzen Threadripper (3000 series) | Desktop | LGA | 4094 | ? | Depends on DDR4 speed | compatible with 3rd generation AMD Ryzen Threadripper processors |
LGA 4189 | 2020 | Intel Cooper Lake Intel Ice Lake-SP |
Desktop Server |
LGA | 4189[16] | 0.99[16] | ||
LGA 1200 | 2020 | Intel Comet Lake (10th gen) Intel Rocket Lake (11th gen) |
Desktop | LGA | 1200 | |||
LGA 1700 | 2021 | Intel Alder Lake (12th gen) | Desktop | LGA | 1700 | |||
LGA 1700 | 2022 | Intel Raptor Lake (13th gen) | Desktop | LGA | 1700 | |||
Socket AM5 | 2022 | AMD Ryzen 7000 series | Desktop | LGA | 1718 | Zen 4 Ryzen CPUs | ||
Socket SP5 | 2022 | AMD Epyc Genoa | Server | LGA | 6096 | Used for Epyc Genoa and Milan | ||
LGA 4677 | 2022 | Intel Sapphire Rapids | Server | LGA | 4677 | |||
LGA 7529 | 2024 | Intel Sierra Forest | Server | LGA | 7529 | |||
Socket name |
Year of introduction | CPU families supported | Computer type | Package | Pin count | Pin pitch (mm) |
Bus clock & transfers |
Notes |
- ^ Some late model Socket 3 motherboards unofficially supported FSB speeds up to 66MHz
- ^ This is a double data rate bus. FSB in the later models.
Other ISAs[edit]
Socket name |
Year of introduction | CPU families supported | Computer type | Package | Pin count | Pin pitch (mm) |
Bus clock & transfers |
Notes |
---|---|---|---|---|---|---|---|---|
Daughter Card | 1995 | PowerPC 601+ | Desktop | Slot | 146 | ? | 40-60 Hz | |
Socket 288 | ? | PowerPC 603+ | Desktop | PGA | 288 | ? | 40-60 Hz | |
Socket 431 | 1995 | Alpha 21064/21064A | Desktop | PGA | 431 | ? | 12.5–66.67 MHz | |
Socket 499 | 1997 | Alpha 21164/21164A | Desktop | PGA | 499 | ? | 15–100 MHz | |
Socket 587 | 1998 | Alpha 21264 | Desktop | PGA | 587 | ? | 12.5–133 MHz | |
Slot B | 1999 | Alpha 21264/21264A | Desktop | Slot | 587 | ? | 100 MHz[17] | |
PAC418 | 2001 | Intel Itanium | Server | PGA | 418 | ? | 133 MHz | |
PAC611 | 2002 | Intel Itanium 2 HP PA-8800, PA-8900 |
Server | PGA | 611 | ? | 200 MHz | |
LGA 1248 | 2010 | Intel Itanium 9300-series and up | Server | LGA | 1248 | ? | 4.8-6.4 GT/s | |
Socket name |
Year of introduction | CPU families supported | Computer type | Package | Pin count | Pin pitch (mm) |
Bus clock & transfers |
Notes |
Slotkets[edit]
Slotkets are special adapters for using socket processors in bus-compatible slot motherboards.
See also[edit]
- List of AMD processors
- List of Intel processors
References[edit]
- ^ «Intel 815 Chipset Family» (PDF). Intel. Retrieved May 4, 2009.
- ^ «423 Pin Socket (PGA423) Design Guidelines» (PDF). Intel. Archived (PDF) from the original on December 29, 2009. Retrieved May 3, 2009.
- ^ «495-Pin and 615-pin micro-PGA ZIF Socket Design Specification Application Note» (PDF). Intel. Retrieved May 3, 2009.
- ^ a b «mPGA 604 Socket Mechanical Design Guide» (PDF). Intel. Retrieved May 3, 2009.
- ^ «Intel Pentium 4 Processor 478-Pin Socket (mPGA478) Design Guidelines» (PDF). Intel. Retrieved May 3, 2009.
- ^ «AMD Sempron Processor Product Data Sheet» (PDF). AMD. Retrieved May 3, 2009.
- ^ «AMD Opteron Processor Product Data Sheet» (PDF). AMD. Retrieved May 3, 2009.
- ^ CPU only has 478 pins, but the socket has 479.
- ^ a b c d «AMD Opteron Processor Product Data Sheet» (PDF). AMD. Retrieved May 3, 2009.
- ^ «LGA 775 Socket Mechanical Design Guide» (PDF). Intel. Retrieved May 4, 2009.
- ^ «LGA771 Socket Mechanical Design Guide» (PDF). Intel. Retrieved May 3, 2009.
- ^ «Low-Profile Socket S1 Design Specification» (PDF). AMD. Retrieved May 3, 2009.
- ^ «Thermal Design Guide for Socket F (1207) Processors» (PDF). AMD. Retrieved May 6, 2009.
- ^ CPU only has 938 pins, but the socket has 941.
- ^ AMD Documentation «Socket AM3 design Specification» (PDF). AMD. Retrieved January 5, 2012.
- ^ a b «LGA 4189 Socket and Hardware» (PDF).
- ^ Hachman, Mark (February 2, 1999). «Alpha camp moves to «Slot B» connector to push further into workstations». EE Times. Retrieved November 10, 2022.
External links[edit]
- Socket ID Guide
- CPU Sockets Chart — A fairly detailed table listing x86 Sockets and associated attributes.
- techPowerUp! CPU Database
- Processor sockets
Русский[править]
Морфологические и синтаксические свойства[править]
падеж | ед. ч. | мн. ч. |
---|---|---|
Им. | со́кет | со́кеты |
Р. | со́кета | со́кетов |
Д. | со́кету | со́кетам |
В. | со́кет | со́кеты |
Тв. | со́кетом | со́кетами |
Пр. | со́кете | со́кетах |
со́—кет
Существительное, неодушевлённое, мужской род, 2-е склонение (тип склонения 1a по классификации А. А. Зализняка).
Корень: -сокет-.
Произношение[править]
- МФА: ед. ч. [ˈsokɛt], мн. ч. [ˈsokɛtɨ]
Семантические свойства[править]
Значение[править]
- прогр. программный интерфейс для обеспечения информационного обмена между процессами ◆ Сокет — двунаправленный канал обмена данными между двумя компьютерами в сети. Информация по сокету может передаваться в обоих направлениях — от сервера к клиенту и от клиента к серверу. Денис Колисниченко, «Разработка Linux-приложений», 2012 г. [Google Книги]
- комп. специальное гнездо (разъём) на материнской плате, предназначенное для установки процессора ◆ Зато продукты компании AMD ― процессоры Duron и Athlon ― разработаны под унифицированный сокет А. Александр МИЛКУС, «Соберём комп сами!», 2001.10.25 // «Комсомольская правда» [НКРЯ]
Синонимы[править]
- ?
- ?
Антонимы[править]
- —
- —
Гиперонимы[править]
- программный интерфейс
- гнездо, разъём
Гипонимы[править]
- ?
- ?
Родственные слова[править]
Ближайшее родство | |
Этимология[править]
Из англ. socket ‘разъём, гнездо’.
Фразеологизмы и устойчивые сочетания[править]
Перевод[править]
Список переводов | |
Анаграммы[править]
- отсек, Косте
Библиография[править]
|
Для улучшения этой статьи желательно:
|
Время на прочтение
10 мин
Количество просмотров 21K
К концу руководства вы освоите основные функции и методы модуля Python socket, научитесь применять пользовательский класс для отправки сообщений и данных между конечными точками и работать со всем этим в собственных клиент-серверных приложениях. Материалом делимся к старту курса по
Fullstack-разработке на Python
.
Сеть при этом может быть логической, локальной сетью компьютера или физически подключённой к внешней сети, с собственными подключениями к другим сетям. Очевидный пример — интернет, к которому подключаются через провайдера.
Примеры протестированы на Python 3.10, но подойдёт и версия 3.6 или новее. Исходным код поможет использовать это руководство по максимуму.
Сети и сокеты — большие темы, по которым написаны томá литературы. Если они вам в новинку, переварить терминологию со всеми подробностями может быть трудно. Но с этим руководством всё получится!
История сокетов
История у сокетов давняя. Их применение началось с ARPANET в 1971 году и продолжилось в 1983-м, когда в операционной системе Berkeley Software Distribution (BSD) появился API под названием «сокеты Беркли».
В 1990-х годах вместе со Всемирной паутиной возникло и сетевое программирование. Преимущества сокетов и первых подключаемых сетей применялись не только в веб-серверах и браузерах — широко стали применяться клиент-серверные приложения разных типов и размеров.
Базовые протоколы API сокетов развивались многие годы, появились и новые, а низкоуровневый API остался прежним.
Самые распространённые сегодня приложения с сокетами — это клиент-серверные приложения, где одна сторона действует как сервер и ожидает подключения клиентов. Именно такое приложение вы напишете благодаря руководству. А конкретнее, сосредоточимся на API сокетов для интернет-сокетов. Иногда их называют сокетами Беркли, или сокетами BSD. Есть и сокеты домена Unix, которые используются для взаимодействия между процессами внутри только одного компьютера.
Обзор API сокетов
В модуле socket есть интерфейс к API сокетов Беркли.
Вот основные функции и методы этого API:
.socket()
.bind()
.listen()
.accept()
.connect()
.connect_ex()
.send()
.recv()
.close()
В Python имеется удобный и последовательный API, напрямую сопоставленный с системными вызовами, то есть аналогами функций из списка выше на C. В следующем разделе вы узнаете, как эти функции используются вместе.
Кроме того, в стандартной библиотеке Python есть классы, которые упрощают применение этих функций. Хотя в этом руководстве socketserver
не рассматривается, с этим фреймворком для сетевых серверов можно ознакомиться по ссылке.
Доступно много модулей, где реализованы интернет-протоколы уровня выше, например HTTP и SMTP. Обзор этих протоколов смотрите в разделе документации Python «Интернет-протоколы и их поддержка».
TCP-сокеты
С помощью socket.socket()
вы создадите объект сокета с указанием типа сокета socket.SOCK_STREAM
. При этом по умолчанию применяется протокол управления передачей (TCP). Возможно, это то, что вам нужно.
Но зачем вам TCP? Вот его особенности:
- TCP надёжен. Отброшенные в сети пакеты обнаруживаются и повторно передаются отправителем.
- Данные доставляются с сохранением порядка очерёдности. В приложении данные считываются в порядке их записи отправителем.
Для сравнения: сокеты, которые создаются через socket.SOCK_DGRAM
протокола пользовательских датаграмм ненадёжны: данные могут считываться получателем с изменением порядка очерёдности записей отправителя. Почему это важно? Сети — это система негарантированной доставки. Нет гарантии, что данные дойдут до места назначения или что отправленные данные будут получены.
Сетевые устройства — маршрутизаторы и коммутаторы — также обладают конечной полосой пропускания и собственными, системными ограничениями. Как на клиентах и на серверах, у них есть процессоры, память, шины и интерфейсные буферы пакетов. С TCP при этом не нужно беспокоиться о потере пакетов, поступлении данных с изменением порядка очерёдности пакетов данных, а также о других подводных камнях.
Чтобы разобраться лучше, ознакомьтесь с последовательностью вызовов API сокетов и с потоком данных TCP.
Ниже слева сервер, а справа клиент:
Поток TCP-сокетов. В центре изображения показан обмен данными между клиентом и сервером с помощью вызовов .send()
и .recv()
.
Внизу соответствующие сокеты закрываются на клиенте и на сервере. (источник изображения)
Начиная с верхнего левого угла, показаны серверные вызовы API на сервере, которые настраивают «прослушиваемый» сокет:
socket()
.bind()
.listen()
.accept()
Этим сокетом, как следует из его названия, прослушиваются подключения от клиентов. Чтобы принять или завершить такое подключение, на сервере вызывается .accept()
.
А чтобы установить подключение к серверу и инициировать трёхэтапное рукопожатие, на клиенте вызывается .connect()
. Процесс рукопожатия важен, ведь он гарантирует доступность каждой стороны подключения в сети, то есть то, что клиент может связаться с сервером, и наоборот. Возможно, только один хост, клиент или сервер может связаться с другим.
Эхо-клиент и эхо-сервер
Теперь, когда вы узнали об API сокетов и взаимодействии клиента и сервера, вы готовы создать свои первые клиент и сервер. Начнём с примера, где полученное сервером сообщение просто возвращается клиенту, как эхо.
Эхо-сервер
Вот он:
# echo-server.py
import socket
HOST = "127.0.0.1" # Standard loopback interface address (localhost)
PORT = 65432 # Port to listen on (non-privileged ports are > 1023)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print(f"Connected by {addr}")
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
Не пытайтесь понять весь код сразу. В этих нескольких строках много чего происходит. И это только отправная точка, здесь можно увидеть базовый сервер в деле. Но что же происходит в вызове нашего API?
С помощью socket.socket()
создаётся объект сокета, которым поддерживается тип контекстного менеджера, который используется в операторе with
. Вызывать s.close()
не нужно:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
pass # Use the socket object without calling s.close().
Передаваемые в socket()
аргументы — это константы, используемые для указания семейства адресов и типа сокетов. AF_INET
— это семейство интернет-адресов для IPv4. SOCK_STREAM
— это тип сокета для TCP и протокол, который будет использоваться для передачи сообщений в сети.
Метод .bind()
применяется для привязки сокета к конкретному сетевому интерфейсу и номеру порта:
# echo-server.py
# ...
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
# ...
Передаваемые в .bind()
значения зависят от семейства адресов сокета. В этом примере используется socket. AF_INET
(IPv4). Поэтому принимается кортеж с двумя значениями: (host, port)
.
host
может быть именем хоста, IP-адресом или пустой строкой. Если используется IP-адрес, то host
должен быть строкой адреса формата IPv4. IP-адрес 127.0.0.1
— это стандартный IPv4-адрес для интерфейса «внутренней петли», когда к серверу подключаются только процессы в хосте. Если передавать пустую строку, подключения на сервере принимаются во всех доступных интерфейсах IPv4.
port
— это номер TCP-порта для приёма подключений от клиентов. Это должно быть целое число от 1
до 65535
(0
резервируется). В некоторых системах, если номер порта меньше 1024
, могут потребоваться привилегии суперпользователя.
Относительно использования имён хостов с .bind()
есть замечание:
«Если в хостовой части адреса сокета IPv4/v6 использовать имя хоста, программа может стать непредсказуемой: Python использует первый возвращаемый из разрешения DNS адрес. Адрес сокета будет разрешён в фактический адрес IPv4/v6 по-разному, в зависимости от результатов из DNS-разрешения и/или конфигурации хоста. Чтобы поведение было предсказыемым, в хостовой части используйте числовой адрес». Документация.
Подробнее об этом вы узнаете позже в разделе «Использование имён хостов». А пока достаточно понять, что при использовании имени хоста можно увидеть разные результаты в зависимости от того, чтó возвращается в процессе разрешения имён. Это может быть что угодно: при первом запуске приложения можно получить 10.1.2.3
, а в следующий раз получится 192.168.0.1
. Дальше может быть 172.16.7.8
и т. д.
В примере ниже подключения на сервере принимаются благодаря .listen()
, а сам сервер становится «прослушиваемым» сокетом:
# echo-server.py
# ...
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
# ...
У метода .listen()
есть параметр backlog
. Он указывает число непринятых подключений, которые система разрешит до отклонения новых подключений. С версии Python 3.5 он необязателен. Если его нет, выбирается значение backlog
по умолчанию.
А если на сервере получается много одновременных запросов на подключение, значение backlog
можно увеличить через установку максимальной длины очереди для отложенных подключений. Это предельное значение зависит от системы. Например, на Linux смотрите /proc/sys/net/core/somaxconn
.
Методом .accept()
выполнение блокируется, и ожидается входящее подключение. При подключении клиента возвращается новый объект сокета, который представляет собой подключение и кортеж с адресом клиента. В кортеже содержится (host, port)
— для подключений IPv4 или (host, port, flowinfo, scopeid)
— для IPv6. Подробнее о значениях кортежей рассказывается в справочном разделе «Семейства адресов сокетов».
Итак, теперь у вас есть новый объект сокета из .accept()
. Это важно потому, что сокет будет использоваться для взаимодействия с клиентом. Он отличается от прослушиваемого, который применяется на сервере для приёма новых подключений:
# echo-server.py
# ...
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print(f"Connected by {addr}")
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
После того как в .accept()
клиенту предоставляется объект сокета conn
, для перебора блокирующих вызовов в conn.recv()
используется бесконечный цикл while
. Так любые отправляемые от клиента данные считываются и передаются обратно с помощью conn.sendall()
.
Если в conn.recv()
возвращается пустой объект bytes
и b''
, значит, в клиенте подключение закрыто и цикл завершён. Чтобы автоматически закрыть сокет в конце блока, с conn
применяется оператор with
.
Эхо-клиент
Перейдём к клиенту:
# echo-client.py
import socket
HOST = "127.0.0.1" # The server's hostname or IP address
PORT = 65432 # The port used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b"Hello, world")
data = s.recv(1024)
print(f"Received {data!r}")
По сравнению с сервером клиент довольно прост. В нём создаётся объект сокета. Для подключения к серверу используется .connect()
, и для отправки сообщения вызывается s.sendall()
, s.recv()
считывает ответ, а затем этот ответ выводится.
Запуск эхо-клиента и эхо-сервера
В этом разделе запускаем клиент и сервер, следим за их поведением и за происходящим.
> Если вам не удаётся запустить из командной строки примеры или собственный код, прочитайте How Do I Make My Own Command-Line Commands Using Python? или How to Run Your Python Scripts (англ.). Если у вас Windows, ознакомьтесь с Python Windows FAQ («Часто задаваемыми вопросами по Python для Windows»).
Откройте терминал или командную строку, перейдите в каталог со скриптами, убедитесь, что в переменной PATH
у вас есть Python 3.6 или новее, а затем запустите сервер:
$ python echo-server.py
Терминал зависнет, потому что сервер заблокирован или находится в состоянии ожидания, в .accept()
:
# echo-server.py
# ...
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print(f"Connected by {addr}")
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
Ожидается подключение клиента. Затем откройте другое окно терминала или командную строку и запустите клиента:
$ python echo-client.py
Received b'Hello, world'
В окне сервера вы должны заметить что-то такое:
$ python echo-server.py
Connected by ('127.0.0.1', 64623)
Здесь на сервере выведен кортеж addr
, возвращаемый из s.accept()
. Это IP-адрес клиента и номер TCP-порта — 64623
(скорее всего, он будет другим, когда вы запустите сервер на своём компьютере).
Просмотр состояния сокета
Чтобы увидеть текущее состояние сокетов на хосте, используйте netstat
. На macOS, Linux и Windows он доступен по умолчанию.
А ниже вывод netstat из macOS после запуска сервера:
$ netstat -an
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 127.0.0.1.65432 *.* LISTEN
Обратите внимание: Local Address
здесь 127.0.0.1.65432
. Если бы в echo-server.py
был HOST = ""
, а не HOST = "127.0.0.1"
, в netstat отображалось бы это:
$ netstat -an
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 *.65432 *.* LISTEN
Local Address
здесь *.65432
. Это означает, что для приёма входящих подключений будут задействованы все поддерживающие семейство адресов доступные интерфейсы хоста. В этом примере в вызове socket()
используется socket. AF_INET
(IPv4) — смотрите tcp4
в столбце Proto
.
Здесь показывается только вывод эхо-сервера. Скорее всего, полный вывод будет гораздо больше, это зависит вашей системы. Стóит обратить внимание на столбцы Proto
, Local Address
и (state)
. В последнем примере netstat показывает, что на эхо-сервере используется TCP-сокет IPv4 (tcp4
) в порте 65432 на всех интерфейсах (*.65432
) и он находится в состоянии прослушивания (LISTEN
).
Другой способ получить к нему доступ (и дополнительную полезную информацию) — использовать программу lsof
, которая выводит список открытых файлов. На macOS она доступна по умолчанию, а на Linux её можно установить пакетным менеджером:
$ lsof -i -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Python 67982 nathan 3u IPv4 0xecf272 0t0 TCP *:65432 (LISTEN)
Если lsof
используется с параметром -i
, в её выводе предоставляется COMMAND
, PID
(идентификатор процесса) и USER
(идентификатор пользователя) открытых интернет-сокетов. Выше показан процесс эхо-сервера.
netstat
и lsof
различаются в зависимости от ОС, у них много опций. Загляните в их man
или документацию, на них определённо стóит потратить немного времени. На macOS и Linux используйте man netstat
и man lsof
. На Windows — netstat /?
.
При попытке подключения к порту без прослушиваемого сокета есть типичная ошибка:
$ python echo-client.py
Traceback (most recent call last):
File "./echo-client.py", line 9, in <module>
s.connect((HOST, PORT))
ConnectionRefusedError: [Errno 61] Connection refused
Здесь либо указан неверный номер порта, либо не запускается сервер. Или, может быть, на пути стоит брандмауэр, которым подключение блокируется (об этом легко забыть). Также может быть сообщение об ошибке Connection timed out
(«Превышено время ожидания подключения»). Чтобы клиент подключался к TCP-порту, добавьте соответствующее правило брандмауэра!
Поможем разобраться в программировании, чтобы вы прокачали карьеру или стали востребованным профессионалом в IT:
- Профессия Fullstack-разработчик на Python (15 месяцев)
- Профессия Data Scientist (24 месяца)
Чтобы увидеть все курсы, нажмите на баннер: