Сокет как пишется

Эта статья расширяет ваш кругозор в вопросах устройства компьютеров и их софта. Текст про важную вещь в сетевой архитектуре, и он будет полезен тем, кто собирается проектировать софт, как-то связанный с интернетом. 

Чтобы разобраться в том, что такое сокеты и чем они так полезны, нужно кое-что вспомнить из статей про 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.
Ivy Bridge supports 40 PCIe 3.0 lanes.
Intel Mainstream Socket.

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
  1. ^ Some late model Socket 3 motherboards unofficially supported FSB speeds up to 66MHz
  2. ^ 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]

  1. ^ «Intel 815 Chipset Family» (PDF). Intel. Retrieved May 4, 2009.
  2. ^ «423 Pin Socket (PGA423) Design Guidelines» (PDF). Intel. Archived (PDF) from the original on December 29, 2009. Retrieved May 3, 2009.
  3. ^ «495-Pin and 615-pin micro-PGA ZIF Socket Design Specification Application Note» (PDF). Intel. Retrieved May 3, 2009.
  4. ^ a b «mPGA 604 Socket Mechanical Design Guide» (PDF). Intel. Retrieved May 3, 2009.
  5. ^ «Intel Pentium 4 Processor 478-Pin Socket (mPGA478) Design Guidelines» (PDF). Intel. Retrieved May 3, 2009.
  6. ^ «AMD Sempron Processor Product Data Sheet» (PDF). AMD. Retrieved May 3, 2009.
  7. ^ «AMD Opteron Processor Product Data Sheet» (PDF). AMD. Retrieved May 3, 2009.
  8. ^ CPU only has 478 pins, but the socket has 479.
  9. ^ a b c d «AMD Opteron Processor Product Data Sheet» (PDF). AMD. Retrieved May 3, 2009.
  10. ^ «LGA 775 Socket Mechanical Design Guide» (PDF). Intel. Retrieved May 4, 2009.
  11. ^ «LGA771 Socket Mechanical Design Guide» (PDF). Intel. Retrieved May 3, 2009.
  12. ^ «Low-Profile Socket S1 Design Specification» (PDF). AMD. Retrieved May 3, 2009.
  13. ^ «Thermal Design Guide for Socket F (1207) Processors» (PDF). AMD. Retrieved May 6, 2009.
  14. ^ CPU only has 938 pins, but the socket has 941.
  15. ^ AMD Documentation «Socket AM3 design Specification» (PDF). AMD. Retrieved January 5, 2012.
  16. ^ a b «LGA 4189 Socket and Hardware» (PDF).
  17. ^ 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.
Ivy Bridge supports 40 PCIe 3.0 lanes.
Intel Mainstream Socket.

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
  1. ^ Some late model Socket 3 motherboards unofficially supported FSB speeds up to 66MHz
  2. ^ 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]

  1. ^ «Intel 815 Chipset Family» (PDF). Intel. Retrieved May 4, 2009.
  2. ^ «423 Pin Socket (PGA423) Design Guidelines» (PDF). Intel. Archived (PDF) from the original on December 29, 2009. Retrieved May 3, 2009.
  3. ^ «495-Pin and 615-pin micro-PGA ZIF Socket Design Specification Application Note» (PDF). Intel. Retrieved May 3, 2009.
  4. ^ a b «mPGA 604 Socket Mechanical Design Guide» (PDF). Intel. Retrieved May 3, 2009.
  5. ^ «Intel Pentium 4 Processor 478-Pin Socket (mPGA478) Design Guidelines» (PDF). Intel. Retrieved May 3, 2009.
  6. ^ «AMD Sempron Processor Product Data Sheet» (PDF). AMD. Retrieved May 3, 2009.
  7. ^ «AMD Opteron Processor Product Data Sheet» (PDF). AMD. Retrieved May 3, 2009.
  8. ^ CPU only has 478 pins, but the socket has 479.
  9. ^ a b c d «AMD Opteron Processor Product Data Sheet» (PDF). AMD. Retrieved May 3, 2009.
  10. ^ «LGA 775 Socket Mechanical Design Guide» (PDF). Intel. Retrieved May 4, 2009.
  11. ^ «LGA771 Socket Mechanical Design Guide» (PDF). Intel. Retrieved May 3, 2009.
  12. ^ «Low-Profile Socket S1 Design Specification» (PDF). AMD. Retrieved May 3, 2009.
  13. ^ «Thermal Design Guide for Socket F (1207) Processors» (PDF). AMD. Retrieved May 6, 2009.
  14. ^ CPU only has 938 pins, but the socket has 941.
  15. ^ AMD Documentation «Socket AM3 design Specification» (PDF). AMD. Retrieved January 5, 2012.
  16. ^ a b «LGA 4189 Socket and Hardware» (PDF).
  17. ^ 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ɨ]

Семантические свойства[править]

Сокет [2]

Значение[править]

  1. прогр. программный интерфейс для обеспечения информационного обмена между процессами ◆ Сокет — двунаправленный канал обмена данными между двумя компьютерами в сети. Информация по сокету может передаваться в обоих направлениях — от сервера к клиенту и от клиента к серверу. Денис Колисниченко, «Разработка Linux-приложений», 2012 г. [Google Книги]
  2. комп. специальное гнездо (разъём) на материнской плате, предназначенное для установки процессора ◆ Зато продукты компании AMD ― процессоры Duron и Athlon ― разработаны под унифицированный сокет А. Александр МИЛКУС, «Соберём комп сами!», 2001.10.25 // «Комсомольская правда» [НКРЯ]

Синонимы[править]

  1. ?
  2. ?

Антонимы[править]

Гиперонимы[править]

  1. программный интерфейс
  2. гнездо, разъём

Гипонимы[править]

  1. ?
  2. ?

Родственные слова[править]

Ближайшее родство

Этимология[править]

Из англ. 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-сокетов
Поток 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 месяца)

Чтобы увидеть все курсы, нажмите на баннер:

Понравилась статья? Поделить с друзьями:
  • Сокамерниками как пишется
  • Сокровища похищены как пишется
  • Сок юпи как пишется
  • Сокращено или сокращенно как пишется
  • Сок вода водой как пишется