728x90

윈도우7 지원 종료가 2020년 1월14일 끝났지만, 피치 못할 환경으로 윈도우7/윈도우2008 업데이트 지원을 받을 수 있습니다.

물론 계약을 해야 가능 하므로 비용 발생이 됩니다.

MS ESU(Extended Security Updates) 계약이 있는 것을 알았습니다.

최대 3년간 받을 수 있다고 하네요.

 

연장된 보안 업데이트(ESU) 프로그램이란 무엇인가요?

연장된 보안 업데이트(ESU) 프로그램은 지원이 종료된 후에 특정 레거시 Microsoft 제품을 실행해야 하는 고객을 위해 마지막 수단으로 제공되는 옵션입니다. 제품의 추가 지원 날짜가 종료된 후 최대 3년 동안 필수* 및/또는 중요* 보안 업데이트를 포함합니다.

사용 가능한 경우 연장된 보안 업데이트가 배포됩니다. ESU에는 새로운 기능, 고객 요청 비보안 업데이트 또는 디자인 변경 요청은 포함되지 않습니다.

운영 체제가 그때까지 지원되므로 모든 Windows 7 및 Windows Server 2008/R2 고객은 2020 년 1월 14일에 업데이트를 받게 됩니다. 2020년 1월 14일 이후에 이 운영 체제에 대한 업데이트는 ESU 고객에게만 해당합니다.

 

Windows 7 ESU(확장 보안 업데이트)에는 무엇이 포함되어 있습니까?

Windows 7 ESU에는 MSRC(Microsoft 보안 대응 센터)에서 정의한 중요한 문제에 대한 2020년 1월 14일 이후 최장 3년 간의 보안 업데이트가 포함되어 있습니다. 2020년 1월 14일 이후에 PC에서 Windows 7을 실행하고 있으나 확장 보안 업데이트는 구입되어 있지 않은 경우 컴퓨터는 더 이상 보안 업데이트를 받지 않습니다.

보안 업데이트이 필요한 경우 고객은 무료로 다음 제품에 대한 연장된 보안 업데이트를 받을 수 있습니다.

  • SQL 및 Windows Server 2008/R2: 워크로드를 “있는 그대로” Azure 가상 머신(IaaS)으로 이동하려는 고객은 지원이 종료된 후 3년 동안 SQL Server와 Windows Server 2008 및 2008 R2 모두에 대해 연장된 보안 업데이트에 무료로 액세스할 수 있습니다.
  • Windows 7: Microsoft Windows Virtual Desktop은 2023년 1월까지 무료로 연장된 보안 업데이트를 통해 Windows 7 장치를 제공합니다.
  • .NET 3.5 SP1, .NET 4.5.2 및 .NET 4.6은 Windows Server 2008 ESU 동안 지원됩니다.

  • .NET 3.5 SP1 및 .NET 4.5.2부터 .NET 4.8까지는 Windows Server 2008 R2 및 Windows 7 ESU 단계 동안 지원됩니다.

Windows Server와 SQL Server 2008, 2008 R2에 대한 보안 연장 업데이트 비용은 어떻게 되나요?

Azure:

    Azure에서 Windows Server 또는 SQL Server 2008, 2008 R2를 실행하는 고객은 가상 머신을 실행하는 요금 외에 추가 비용 없이 보안 연장 업데이트를 받을 수 있습니다. Azure SQL Database Managed Instance (PaaS)로 이동하는 고객은 보안 연장 업데이트가 필요치 않습니다. 완벽한 관리형 솔루션이기 때문에 Microsoft가 항상 업데이트하고 패치합니다.

사내 데이터센터(on-Premises):

    활성 Software Assurance 또는 구독 라이선스를 보유한 고객은 온-프레미스 라이선스 연간 비용의 약 75%에 해당하는 가격으로 보안 연장 업데이트를 구입할 수 있습니다. 가격은 게시된 가격표에서 확인할 수 있습니다. 자세한 내용은 해당 지역의 Microsoft 파트너 또는 영업 팀에 문의하세요.

호스팅 환경:

    SPLA 공인 호스팅 업체에서 Windows Server 또는 SQL Server 2008/2008 R2를 구입한 고객은 Enterprise 또는 Server 및 Cloud Enrollment에서 보안 연장 업데이트를 별도로 구입해야 합니다. 온-프레미스 라이선스 연간 비용의 약 75% 가격으로 Microsoft에서 직접 구입하거나 Microsoft 리셀러를 통해 구입합니다. Microsoft 리셀러를 통해 판매되는 보안 연장 업데이트의 가격은 리셀러가 책정합니다. Windows Server 보안 연장 업데이트의 가격은 Windows Server Standard의 코어당 가격을 기준으로 책정됩니다. 호스팅된 가상 머신의 가상 코어 수를 기반으로 하며 인스턴스당 최소 16개의 라이선스가 적용됩니다. SQL Server 보안 연장 업데이트의 가격은 SQL Server의 코어당 가격을 기준으로 책정됩니다. 호스팅된 가상 머신의 가상 코어 수를 기반으로 하며 인스턴스당 최소 4개의 라이선스가 적용됩니다. Software Assurance는 필요하지 않습니다. 자세한 내용은 해당 지역의 Microsoft 리셀러 또는 영업 팀에 문의하세요.

 

자세한 것은 아래 사이트 참고 하시기 하시기 바랍니다.

https://support.microsoft.com/ko-kr/help/4527878/faq-about-extended-security-updates-for-windows-7

https://support.microsoft.com/ko-kr/help/4497181/lifecycle-faq-extended-security-updates

728x90
728x90

윈도우7이 종료 되었지만, 무료 업그레이드는 지속적으로 유지 할 듯 하다는 내용입니다.

 

업그레이드 방법 :https://mani4u.tistory.com/289?category=588428

 

업그레이드 방법 : https://mani4u.tistory.com/289?category=588428

 

728x90
728x90

By Mark Russinovich and Andrew Richards

Published: May 16, 2017

Download ProcDump (439 KB)

Download ProcDump for Linux (GitHub)

Introduction

ProcDump is a command-line utility whose primary purpose is monitoring an application for CPU spikes and generating crash dumps during a spike that an administrator or developer can use to determine the cause of the spike. ProcDump also includes hung window monitoring (using the same definition of a window hang that Windows and Task Manager use), unhandled exception monitoring and can generate dumps based on the values of system performance counters. It also can serve as a general process dump utility that you can embed in other scripts.

Using ProcDump

usage: procdump [-a] [[-c|-cl CPU usage] [-u] [-s seconds]] [-n exceeds] [-e [1 [-b]] [-f ] [-g] [-h] [-l] [-m|-ml commit usage] [-ma | -mp] [-o] [-p|-pl counter threshold] [-r] [-t] [-d ] [-64] <[-w]< process name or service name or PID> [dump file] | -i | -u | -x

[arguments]> ] [-? [ -e]

ParameterDescription

-a Avoid outage. Requires -r. If the trigger will cause the target to suspend for a prolonged time due to an exceeded concurrent dump limit, the trigger will be skipped.
-at Avoid outage at Timeout. Cancel the trigger's collection at N seconds.
-b Treat debug breakpoints as exceptions (otherwise ignore them).
-c CPU threshold at which to create a dump of the process.
-cl CPU threshold below which to create a dump of the process.
-d Invoke the minidump callback routine named MiniDumpCallbackRoutine of the specified DLL.
-e Write a dump when the process encounters an unhandled exception. Include the 1 to create dump on first chance exceptions.
-f Filter the first chance exceptions. Wildcards (*) are supported. To just display the names without dumping, use a blank ("") filter.
-fx Filter (exclude) on the content of exceptions and debug logging. Wildcards are supported.
-g Run as a native debugger in a managed process (no interop).
-h Write dump if process has a hung window (does not respond to window messages for at least 5 seconds).
-i Install ProcDump as the AeDebug postmortem debugger. Only -ma, -mp, -d and -r are supported as additional options.
-k Kill the process after cloning (-r), or at the end of dump collection
-l Display the debug logging of the process.
-m Memory commit threshold in MB at which to create a dump.
-ma Write a dump file with all process memory. The default dump format only includes thread and handle information.
-mc Write a custom dump file. Include memory defined by the specified MINIDUMP_TYPE mask (Hex).
-md Write a Callback dump file. Include memory defined by the MiniDumpWriteDump callback routine named MiniDumpCallbackRoutine of the specified DLL.
-mk Also write a Kernel dump file. Includes the kernel stacks of the threads in the process. OS doesn't support a kernel dump (-mk) when using a clone (-r). When using multiple dump sizes, a kernel dump is taken for each dump size.
-ml Trigger when memory commit drops below specified MB value.
-mm Write a mini dump file (default).
-mp Write a dump file with thread and handle information, and all read/write process memory. To minimize dump size, memory areas larger than 512MB are searched for, and if found, the largest area is excluded. A memory area is the collection of same sized memory allocation areas. The removal of this (cache) memory reduces Exchange and SQL Server dumps by over 90%.
-n Number of dumps to write before exiting.
-o Overwrite an existing dump file.
-p Trigger on the specified performance counter when the threshold is exceeded. Note: to specify a process counter when there are multiple instances of the process running, use the process ID with the following syntax: "\Process(_)\counter"
-pl Trigger when performance counter falls below the specified value.
-r Dump using a clone. Concurrent limit is optional (default 1, max 5).
CAUTION: a high concurrency value may impact system performance.
- Windows 7 : Uses Reflection. OS doesn't support -e.
- Windows 8.0 : Uses Reflection. OS doesn't support -e.
- Windows 8.1+: Uses PSS. All trigger types are supported.
-s Consecutive seconds before dump is written (default is 10).
-t Write a dump when the process terminates.
-u Treat CPU usage relative to a single core (used with -c).
As the only option, Uninstalls ProcDump as the postmortem debugger.
-w Wait for the specified process to launch if it's not running.
-wer Queue the (largest) dump to Windows Error Reporting.
-x Launch the specified image with optional arguments. If it is a Store Application or Package, ProcDump will start on the next activation (only).
-64 By default ProcDump will capture a 32-bit dump of a 32-bit process when running on 64-bit Windows. This option overrides to create a 64-bit dump. Only use for WOW64 subsystem debugging.
-? Use -? -e to see example command lines.

If you omit the dump file name, it defaults to< processname>_.dmp.

Use the -accepteula command line option to automatically accept the Sysinternals license agreement.

Automated Termination:
Setting an event with name "procdump-" is the same as typing Ctrl+C to gracefully terminate ProcDump

Filename:
Default dump filename: PROCESSNAME_YYMMDD_HHMMSS.dmp
The following substitutions are supported:
PROCESSNAME Process Name
Process ID PID
EXCEPTIONCODE Exception Code
YYMMDD Year/Month/Day
HHMMSS Hour/Minute/Second

Examples

Write a mini dump of a process named 'notepad' (only one match can exist):

C:\>procdump notepad

Write a full dump of a process with PID '4572':

C:\>procdump -ma 4572

Write 3 mini dumps 5 seconds apart of a process named 'notepad':

C:\>procdump -s 5 -n 3 notepad

Write up to 3 mini dumps of a process named 'consume' when it exceeds 20% CPU usage for five seconds:

C:\>procdump -c 20 -s 5 -n 3 consume

Write a mini dump for a process named 'hang.exe' when one of it's Windows is unresponsive for more than 5 seconds:

C:\>procdump -h hang.exe hungwindow.dmp

Write a mini dump of a process named 'outlook' when total system CPU usage exceeds 20% for 10 seconds:

C:\>procdump outlook -p "\Processor(_Total)\% Processor Time" 20

Write a full dump of a process named 'outlook' when Outlook's handle count exceeds 10,000:

C:\>procdump -ma outlook -p "\Process(Outlook)\Handle Count" 10000

Write a MiniPlus dump of the Microsoft Exchange Information Store when it has an unhandled exception:

C:\>procdump -mp -e store.exe

Display without writing a dump, the exception codes/names of w3wp.exe:

C:\>procdump -e 1 -f "" w3wp.exe

Write a mini dump of w3wp.exe if an exception's code/name contains 'NotFound':

C:\>procdump -e 1 -f NotFound w3wp.exe

Launch a process and then monitor it for exceptions:

C:\>procdump -e 1 -f "" -x c:\dumps consume.exe

Register for launch, and attempt to activate, a modern 'application'. A new ProcDump instance will start when it activated to monitor for exceptions:

C:\>procdump -e 1 -f "" -x c:\dumpsMicrosoft.BingMaps_8wekyb3d8bbwe!AppexMaps

Register for launch of a modern 'package'. A new ProcDump instance will start when it is (manually) activated to monitor for exceptions:

C:\>procdump -e 1 -f "" -x c:\dumps Microsoft.BingMaps_1.2.0.136_x64__8wekyb3d8bbwe

Register as the Just-in-Time (AeDebug) debugger. Makes full dumps in c:\dumps.

C:\>procdump -ma -i c:\dumps

See a list of example command lines (the examples are listed above):

C:\>procdump -? -e

  • Windows Internals Book
    The official updates and errata page for the definitive book on Windows internals, by Mark Russinovich and David Solomon.
  • Windows Sysinternals Administrator's Reference
    The official guide to the Sysinternals utilities by Mark Russinovich and Aaron Margosis, including descriptions of all the tools, their features, how to use them for troubleshooting, and example real-world cases of their use.

Download ProcDump (439 KB)

Download ProcDump for Linux (GitHub)

Runs on:

  • Client: Windows Vista and higher.
  • Server: Windows Server 2008 and higher.

Learn More

 

 

참고

[개요]

  • 이 문서는 어플리케이션 프로세스의 메모리덤프를 생성하는 방법을 기술합니다. 블루스크린(BSoD) 등과 관련된 커널메모리 덤프는 다루지 않습니다.
  • 기술지원 담당자 등 자신이 개발하지 않은 프로세스의 메모리덤프를 작성해야 하는 분들을 위해 작성되었습니다.

 

 

[프로세스 Crash 발생시 메모리덤프 생성하기]

  • 프로세스에 오류가 발생하여 Crash될 때 자동으로 덤프를 생성하는 방법입니다.
  • Crash가 발생하기 전에 미리 설정해놓아야 합니다.

 

[방법1] procdump를 이용하는 방법

    • 다음의 위치에서 procdump.exe를 다운로드받아 임의의 위치에 압축해제합니다. (예 : C:\temp )

https://docs.microsoft.com/en-us/sysinternals/downloads/procdump

    • 관리자 권한으로 커맨드 쉘(cmd.exe)을 실행하여 다음의 명령을 실행합니다. (폴더 경로를 생략하는 경우 procdump.exe가 존재하는 위치에 생성됩니다.

procdump.exe -ma -i [덤프파일 생성할 폴더경로]

 

 

    • 이제 시스템에서 어떤 프로세스든 비정상 종료하게 되면 메모리덤프 파일이 생성됩니다.

 

    • 메모리덤프 설정을 해제하려면 다음과 같이 명령을 입력하면 됩니다.

procdump.exe -u

 

 

[방법2] WER (Windows Error Reporting)을 이용하는 방법

    • Vista 이후부터 윈도우즈에서 실행중인 프로세스가 오류를 일으켜 Crash가 발생하면 메모리덤프를 생성하고 Microsoft로 전송하는 기능이 생겼습니다.
    • 기본설정의 경우 Microsoft로 전송된 메모리덤프는 삭제되는데, 다음의 레지스트리 위치에 키를 생성하고 값을 설정하면 메모리덤프를 로컬에 남길 수 있습니다.

키 : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps

 

값이름 : DumpFolder

Type : REG_EXPANDSZ

값 : C:\temp\dump

 

값이름 : DumpType

Type : REG_DWORD

값 : 2

 

 

 

 

    • 자세한 내용은 다음의 링크를 참조하시기 바랍니다.

https://docs.microsoft.com/ko-kr/windows/desktop/wer/collecting-user-mode-dumps

 

 

[방법3] Dr.Watson을 사용하는 방법

    • WindowsXP에서 사용하는 방법입니다.
    • 다음의 링크를 참조하시기 바랍니다.

http://kuaaan.tistory.com/213

 

 

 

[실행중인 프로세스의 메모리덤프 생성]

  • 오류 없이 실행중인 프로세스의 메모리덤프를 생성하는 방법입니다.
  • 주로 Hang, DeadLock, CPU과점유 등의 이슈가 발생한 프로세스의 원인을 분석할 때 필요합니다.

 

[방법1] 작업관리자를 이용하는 방법

 

1. 다음 스크린샷을 참고하시기 바랍니다.

 

2. 메모리덤프는 %temp% 폴더에 생깁니다. (시작 > 실행 > 명령창에 %temp% 를 명령하고 엔터치면 바로 이동이 가능합니다.)

 

 

[방법2] procdump 를 이용하는 방법

1. 별도의 실행파일을 다운로드받아야 한다는 번거로움이 있지만, 스크립트 등을 이용해 자동화할 수 있고 'CPU 80% 이상 점유하는 경우에 덤프 생성' 등 다양한 기능을 사용할 수 있습니다. (procdump /? 참조)

 

2. 관리자 권한 커맨드 쉘에서 다음과 같이 입력하면 됩니다.

procdump.exe notepad.exe (프로세스 이름으로 덤프 : 매치되는 프로세스가 1개인 경우에 한함)

procdump.exe 12776 (프로세스ID)

 

728x90
728x90

// 장비 전면 <MODE> 버튼을 누른 채, 뒷면 전원 케이블을 연결합니다.

C2950 Boot Loader (C2950-HBOOT-M) Version 12.1(11r)EA1, RELEASE SOFTWARE (fc1)
Compiled Mon 22-Jul-02 17:18 by antonino
WS-C2950C-24 starting...
Base ethernet MAC Address: 00:0f:90:81:98:00
Xmodem file system is available.

The system has been interrupted prior to initializing the
flash filesystem. The following commands will initialize
the flash filesystem, and finish loading the operating
system software:

flash_init
load_helper
boot

switch: flash_init

Initializing Flash...
flashfs[0]: 78 files, 3 directories
flashfs[0]: 0 orphaned files, 0 orphaned directories
flashfs[0]: Total bytes: 7741440
flashfs[0]: Bytes used: 5982208
flashfs[0]: Bytes available: 1759232
flashfs[0]: flashfs fsck took 7 seconds.
...done initializing flash.
Boot Sector Filesystem (bs:) installed, fsid: 3
Parameter Block Filesystem (pb:) installed, fsid: 4

switch: load_helper

switch: boot

Loading "flash:/c2950-i6q4l2-mz.121-19.EA1c.bin"...#############################
################################################################################
################################################################################
################################################################################
#####################

File "flash:/c2950-i6q4l2-mz.121-19.EA1c.bin" uncompressed and installed, entry
point: 0x80010000
executing...

Restricted Rights Legend

Use, duplication, or disclosure by the Government is
subject to restrictions as set forth in subparagraph
(c) of the Commercial Computer Software - Restricted
Rights clause at FAR sec. 52.227-19 and subparagraph
(c) (1) (ii) of the Rights in Technical Data and Computer
Software clause at DFARS sec. 252.227-7013.

cisco Systems, Inc.
170 West Tasman Drive
San Jose, California 95134-1706

 

Cisco Internetwork Operating System Software
IOS (tm) C2950 Software (C2950-I6Q4L2-M), Version 12.1(19)EA1c, RELEASE SOFTWARE
(fc2)
Copyright (c) 1986-2004 by cisco Systems, Inc.
Compiled Mon 02-Feb-04 23:29 by yenanh
Image text-base: 0x80010000, data-base: 0x8058A000


Initializing flashfs...
flashfs[1]: 78 files, 3 directories
flashfs[1]: 0 orphaned files, 0 orphaned directories
flashfs[1]: Total bytes: 7741440
flashfs[1]: Bytes used: 5982208
flashfs[1]: Bytes available: 1759232
flashfs[1]: flashfs fsck took 7 seconds.
flashfs[1]: Initialization complete.
Done initializing flashfs.
POST: System Board Test : Passed
POST: Ethernet Controller Test : Passed
ASIC Initialization Passed

POST: FRONT-END LOOPBACK TEST : Passed
cisco WS-C2950C-24 (RC32300) processor (revision P0) with 20808K bytes of memory
.
Processor board ID FOC0814W0T4
Last reset from system-reset
Running Enhanced Image
26 FastEthernet/IEEE 802.3 interface(s)

32K bytes of flash-simulated non-volatile configuration memory.
Base ethernet MAC Address: 00:0F:90:81:98:00
Motherboard assembly number: 73-5750-13
Power supply part number: 34-0965-01
Motherboard serial number: FOC081409Z7
Power supply serial number: DAB08135KRN
Model revision number: P0
Motherboard revision number: A0
Model number: WS-C2950C-24
System serial number: FOC0814W0T4

--- System Configuration Dialog ---

Would you like to enter the initial configuration dialog? [yes/no]: n

 

Press RETURN to get started!


Switch>enable

Switch#erase startup-config
Erasing the nvram filesystem will remove all configuration files! Continue? [confirm]y[OK]
Erase of nvram: complete

Switch#delete vlan.dat
Delete filename [vlan.dat]? y
Delete flash:y? [confirm]y
%Error deleting flash:y (No such file or directory)

Switch#reload
Proceed with reload? [confirm]y
00:01:51: %SYS-5-RELOAD: Reload requested

C2950 Boot Loader (C2950-HBOOT-M) Version 12.1(11r)EA1, RELEASE SOFTWARE (fc1)
Compiled Mon 22-Jul-02 17:18 by antonino
WS-C2950C-24 starting...
Base ethernet MAC Address: 00:0f:90:81:98:00
Xmodem file system is available.
Initializing Flash...
flashfs[0]: 77 files, 3 directories
flashfs[0]: 0 orphaned files, 0 orphaned directories
flashfs[0]: Total bytes: 7741440
flashfs[0]: Bytes used: 5981184
flashfs[0]: Bytes available: 1760256
flashfs[0]: flashfs fsck took 7 seconds.
...done initializing flash.
Boot Sector Filesystem (bs:) installed, fsid: 3
Parameter Block Filesystem (pb:) installed, fsid: 4
Loading "flash:/c2950-i6q4l2-mz.121-19.EA1c.bin"...#############################
################################################################################
################################################################################
################################################################################
#####################

File "flash:/c2950-i6q4l2-mz.121-19.EA1c.bin" uncompressed and installed, entry
point: 0x80010000
executing...

Restricted Rights Legend

Use, duplication, or disclosure by the Government is
subject to restrictions as set forth in subparagraph
(c) of the Commercial Computer Software - Restricted
Rights clause at FAR sec. 52.227-19 and subparagraph
(c) (1) (ii) of the Rights in Technical Data and Computer
Software clause at DFARS sec. 252.227-7013.

cisco Systems, Inc.
170 West Tasman Drive
San Jose, California 95134-1706

 

Cisco Internetwork Operating System Software
IOS (tm) C2950 Software (C2950-I6Q4L2-M), Version 12.1(19)EA1c, RELEASE SOFTWARE
(fc2)
Copyright (c) 1986-2004 by cisco Systems, Inc.
Compiled Mon 02-Feb-04 23:29 by yenanh
Image text-base: 0x80010000, data-base: 0x8058A000


Initializing flashfs...
flashfs[1]: 77 files, 3 directories
flashfs[1]: 0 orphaned files, 0 orphaned directories
flashfs[1]: Total bytes: 7741440
flashfs[1]: Bytes used: 5981184
flashfs[1]: Bytes available: 1760256
flashfs[1]: flashfs fsck took 7 seconds.
flashfs[1]: Initialization complete.
Done initializing flashfs.
POST: System Board Test : Passed
POST: Ethernet Controller Test : Passed
ASIC Initialization Passed

POST: FRONT-END LOOPBACK TEST : Passed
cisco WS-C2950C-24 (RC32300) processor (revision P0) with 20808K bytes of memory
.
Processor board ID FOC0814W0T4
Last reset from system-reset
Running Enhanced Image
26 FastEthernet/IEEE 802.3 interface(s)

32K bytes of flash-simulated non-volatile configuration memory.
Base ethernet MAC Address: 00:0F:90:81:98:00
Motherboard assembly number: 73-5750-13
Power supply part number: 34-0965-01
Motherboard serial number: FOC081409Z7
Power supply serial number: DAB08135KRN
Model revision number: P0
Motherboard revision number: A0
Model number: WS-C2950C-24
System serial number: FOC0814W0T4

--- System Configuration Dialog ---

Would you like to enter the initial configuration dialog? [yes/no]: n

 

Press RETURN to get started!


00:00:14: %SPANTREE-5-EXTENDED_SYSID: Extended SysId enabled for type vlan
00:00:18: %SYS-5-RESTART: System restarted --
Cisco Internetwork Operating System Software
IOS (tm) C2950 Software (C2950-I6Q4L2-M), Version 12.1(19)EA1c, RELEASE SOFTWARE
(fc2)
Copyright (c) 1986-2004 by cisco Systems, Inc.
Compiled Mon 02-Feb-04 23:29 by yenanh
00:00:21: %LINK-5-CHANGED: Interface Vlan1, changed state to administratively do
wn
00:00:22: %LINK-3-UPDOWN: Interface FastEthernet0/24, changed state to up
Switch>
00:00:22: %LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan1, changed state t
o down
00:00:23: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/24, chan
ged state to down
00:00:24: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/24, chan
ged state to up

Switch>enable

Switch#config terminal

Enter configuration commands, one per line. End with CNTL/Z.

Switch(config)#enable password cisco
Switch(config)#end
Switch#write memory

728x90
728x90

Cisco Catalyst 2950 Switch 기본 정보 변경 명령어 입니다.

 

Switch> enable

Switch# configure terminal

Switch(config)# enable password cisco // enable 모드 암호 설정.

 

Switch(config)# interface vlan1

Switch(config-if)# ip address 000.000.000.000 255.255.255.0 // 장비 관리용 IP주소 설정.

Switch(config-if)# no shutdown

Switch(config-if)# exit

Switch(config)# ip default-gateway 000.000.000.1 // 장비 기본 게이트웨이 주소 설정.

 

Switch(config)# ip http server // 장비 관리용 웹콘솔 활성화.

 

Switch(config)# line vty 0 4 // Telnet 모드.

Switch(config-line)# password cisco // Telnet 접속 암호 설정.

Switch(config-line)# exit

Switch(config)# end

Switch# write memory // 설정값 저장.

Switch# exit

728x90
728x90

이 글의 내용은 윈도우 10, 2016, 2019에서 사용이 가능하며 일반적인 상황에서 안전모드로 부팅할때에 참고해주시기 바랍니다.

 

 

 

 

먼저 "Shift 키를 누른 상태"에서 "시작 > 전원 > 다시 시작"을 클릭합니다. Shift 키는 다음화면으로 넘어갈때까지 눌러주세요.

 

 

 

 

"문제 해결"을 클릭합니다.

 

 

 

 

"시작 설정"을 클릭합니다.

 

 

 

 

"다시 시작"을 클릭합니다.

 

 

 

 

다시시작이 되면 안전 모드로 부팅할수있는 화면이 나옵니다. "안전 모드"를 선택하고 다음으로 넘어갑니다.

 

 

 

 

안전 모드로 부팅이 된것을 확인할수 있습니다.

728x90
728x90

 MS에서는 보조기술을 사용하는 고객은 업그레이드 기한이 만료된 후에도 윈도우 7과 8에서 윈도우 10으로 업그레이드 할수 있도록 지원해주고 있습니다. 진행 방법은 아래를 참고해서 진행하시면 될것같습니다.

 

OS 기종 : Windows 8.1 pro

 

주의 : 정품인증이 되지 않았거나 또는 크랙판등으로 인증한 PC는 무료 업그레이드로 윈도우 10으로 올라간다는
보장은 할수없는점 참고 바랍니다. 또한 이 글을 참고시 발생하는 문제점은 작성자가 책임을 지지않습니다.

 

 

 

윈도우 10으로 업그레이드 할 PC의 구성은 위와 같습니다.

이 PC는 가상 PC로 CPU 코어는 1개를 할당했고 메모리는 2GB 하드디스크는 30GB 정도를 할당했습니다.

 

 

아래의 URL을 이용하면 보조 기술을 사용하는 고객을 위한 Windows 10 무료 업그레이드라는 부분으로 접근이 가능합니다.

거기서 지금 업그레이드를 누릅니다.

 

URL : https://www.microsoft.com/ko-kr/accessibility/windows10upgrade

 

 

보조 기술의 범위가 넓다보니 모두 설명하기는 어렵지만 간단하게 말씀드리면 윈도우키와 +키를 누르면
나오는 돋보기 같은 기능입니다. 기본적으로는 사용할수 있게끔 설치가 되어있을겁니다.
중,고,대학생 시절때 선생님들이 이 기능을 종종 사용했던것이 기억나시는분도 있을거에요.

 

 

저장을 클릭합니다.

 

 

Windows10Upgrade24074를 클릭하면 나오는 사용자 계정 컨트롤에서 예를 클릭합니다.

 

 

내용을 천천히 보시고 난후 수락을 클릭합니다.

 

 

CPU 메모리 디스크 공간등이 윈도우 10에 지원이 되면 다음을 클릭합니다.

 

 

넘어가면 윈도우 10 다운로드 > 다운로드 확인 > 윈도우 10 설치 형식으로 진행됩니다.

시간이 오래걸리니 차라도 한잔 드시거나 산책을 나갔다 오시는것을 추천합니다.

뭐 요즘 유행하는것을 하시는 방법도 있겠습니다.

 

 

업그레이드가 준비 완료되었다면 지금 다시시작을 클릭합니다.

 

 

로그오프하려고 합니다에서 닫기를 클릭하면 잠시뒤 PC의 리부팅이 진행됩니다.

 

 

리부팅이 진행되면 업데이트 작업이 시작됩니다. 아까보다는 시간이 좀더 오래걸리기 때문에 기다리거나

또는 다른일을 하면서 기다립니다.

 

 

3번정도의 리부팅이 진행되고 업그레이드가 완료되면 몇가지 설정절차가 필요합니다. 다음을 클릭합니다.

 

 

원하시는데로 사용하시려면 사용자 지정을 클릭하시고 그게 아니라면 빠른 설정 사용을 클릭합니다.
여기서는 빠른 설정 사용을 선택하겠습니다.

 

 

다음을 클릭합니다.

 

 

준비중입니다. PC를 끄지 마세요에서 좀더 기다리면 최신버전의 Windows 10으로 업데이트해 주셔서 감사합니다. 라는 멘트가 나옵니다.

 

728x90
728x90

Exchange 2016: Deny External Access to EAC

 

Security has been the key with this growing cyber-attack world. So my customer asked to block external ECP access. Here is how we implemented this.

We have following options and my views on it.

  • Block at the url https://url/ECP at the Firewall or Load Balancer level

This sounds a good option except not every firewall or load balancer do it. We also need to involve network team.

  • Block the AdminEnabled in the ECP Virtual Directory property.

This is new feature but this block internal access as well. So not a nice option. The following cmdlet can be used to apply this.

Set-ECPVirtualDirectory -Identity “Servername\ecp (default web site)” -AdminEnabled $false

 

  • Block the AdminEnabled in the ECP Virtual Directory property with new server which will be used for ECP access.

Adding another server which will use some hardware resources in virtualized setup or a new hardware server + Windows and Exchange License cost to access ECP is never a recommendation. At the same time, it gives you full isolation.

  • Remove External URL on the ECP Virtual Directory

Removing Externalurl does not stop the external access unless we also block OWA. So this is not an option.

  • Allow only LAN IP Address range on the ECP Virtual Directory from IIS Manager.

Allow only the LAN IP address range sounds a reasonable option to me. Here is how we configure this.

Step 1. Login to your Exchange server and Open IIS Manager

Step 2. Browse down to “Default Web Site” à ECP

 

Step 3. Double click on “IP Address and Domain Restrictions”

 

Step 4. Click on “Add Allow Entry”

 

Step 5. Add IP or Range then click Ok

 

It is not done yet. So have some patience

Step 6. Click on “Edit Feature Settings”

 

Step 7. In “Access for Unspecified clients” Select Deny and in “Deny Action Type” we can “Not Found” or any other option.

 

Step 8. Do the IIS reset.

Now we are done. Only the assigned IP Range users can see it.

 

Are you concerned if your users can still access options which used to take the user to /ecp vdir to get the out of office and other options?

This has changed in Exchange 2016. In Exchange 2016 Options will use the following url and not https://url/ECP

So if you are on Exchange 2013 then do not follow this blog until you see the users option url change in Exchange 2013.

In Exchange 2016 Options will take us to the following url.

https://mail.domain.com/owa/#path=/options/mail

 

728x90
728x90

Just like Lync 2010, some Lync 2013 client settings are held in the registry. This post goes over the registry keys

Keys Under Lync:

HKCU:\Software\Microsoft\Office\15.0\Lync

 

Key
AddToFirewallExceptionList
AllowOverridingDeviceAtJoinTime
AutoOpenMainWindowWhenStartup
AutoSignInWhenUserSessionStarts
AwayThreshold
CurrentUILanguage
DSBkgndMode
DuplicatePrimaryMonitorPresentingSetting
EnableBHOSmartTags
EnableEventLogging
EnableTTY
EndPointLocation
FirstRun
FtReceiveFolder
GCWithRosterTabbedFrameWidth
GroupContactsBy
IdleThreshold
IMGCNoExtensionTabbedFrameWidth
IMLargeExtensionTabbedFrameWidth
IMMediumExtensionTabbedFrameWidth
IsConversationStatePreservationEnabled
IsOneLineTabList
JoinAudioConferenceFrom
LastDialedNumber
LyncEntryName
LyncName
MinimizeWindowToNotificationArea
MTTA
MTTF
MTTT
MusicOnHoldAudioFile
MusicOnHoldDisabled
NotSendingSignInTracing
OCTelephonyMode
playSoundFeedback
SavePassword
ServerSipUri
ServerUsername
ShowContactFriendlyName
ShowContactStatus
ShowEmoticons
ShowFavoriteContacts
ShowPhoto
ShowUserConsentForAutomaticSendTracing
SortContactsByName
suspendSoundWhenBusy
suspendSoundWhenConversationWindowInForeground
suspendSoundWhenDND
TracingLevel
TwoLineView
WindowMax
WindowRect

 

Keys Held under the account:

<img style="display: inline; border: 0px;" title="image" src="https://149371380.v2.pressablecdn.com/wp-content/uploads/2012/11/image_thumb9.png" alt="image" width="640" height="332" border="0" /> #

HKCU:\Software\Microsoft\Office\15.0\Lync\user.name@domain.com

Key
Conversations
Dismissed DelegatorList
Dismissed RgsList
Last DelegatorList
Last RgsList
Outstanding DelegatorList
Outstanding RgsList
PreferredGeometry
TrustModelData

 

HKCU:\Software\Microsoft\Office\15.0\Lync\

user.name@domain.com\Autodiscovery

Key
cacheVersion
ExternalAvailabilityServerUrl
ExternalBasicEcpUrl
ExternalEcpPhotoUrl
ExternalEcpUrl
ExternalEwsUrl
ExternalOofServerUrl
ExternalPhotoUrl
ExternalServerVersion
ExternalTimeToLive
InternalAvailabilityServerUrl
InternalBasicEcpUrl
InternalEcpUrl
InternalEwsUrl
InternalOofServerUrl
InternalPhotoUrl
InternalServerVersion
InternalTimeToLive
TimeStamp
WasSoapBased
WasWsSecurityBased

 

HKCU:\Software\Microsoft\Office\15.0\Lync\

user.name@domain.com\BuddyListOldNotifications

Holds SIP Uris

 

HKCU:\Software\Microsoft\Office\15.0\Lync\

user.name@domain.com\ContactStateCacheU\sip:user.name2@domain.com\

Key
Name
ClickToCall

 

HKCU:\Software\Microsoft\Office\15.0\Lync\user.name@domain.com\DS

Key
DontShowCWCloseTabQuery
DSAppsharingGrantControlToSpecificPersonNotification
DSCLOSELSCONF
DSCLOSEVOICE
DSLogoutCloseConversations
DSStartAppsharingNotification

HKCU:\Software\Microsoft\Office\15.0\Lync\

user.name@domain.com\\GroupChat\ma-chan:\\domain.com\b52c2524-eed6-48fa-9909-07d02e7922a7

Key
NewMessageRingtoneIndex
HighImportanceRingtoneIndex

 

HKCU:\Software\Microsoft\Office\15.0\Lync\

user.name@domain.com\GroupStateCacheU

Seems to contain a list of all contact groups and guids

HKCU:\Software\Microsoft\Office\15.0\Lync\

user.name@domain.com\LyncAutodiscovery

Key
cacheVersion
ExternalAuthServerUrl
ExternalSipServerUrl
ExternalTimeToLive
InternalAuthServerUrl
InternalSipServerUrl
InternalTimeToLive
TimeStamp
WebTicketServiceUrl

 

Update 19/9/2013: Richard has mapped some of the keys to the GUI here: http://masteringlync.com/2013/09/19/client-registry-keys/

728x90
728x90

TCP의 헤더에는 어떤 정보들이 담겨있는걸까?


저번에 HTTP/3는 왜 UDP를 선택한 것일까? 포스팅을 진행하며 TCP에 대해 간단한 언급을 했었지만, 해당 포스팅에서는 기존의 HTTP에서 사용하던 TCP에 어떤 문제가 있었는지에 집중해서 이야기했었지만 이번에는 TCP 자체에 조금 더 집중해서 이야기해보려고 한다.

원래는 이 포스팅에서 TCP의 개괄적인 내용을 모두 다루려고 했으나 생각보다 양이 너무 많아서 몇 개의 포스팅으로 나누어 작성하려고 한다.(파도파도 끝이 없는 이 놈의 할배 프로토콜…)

그런 이유로 이번 포스팅에서는 TCP의 헤더 안에 들어 있는 필드들이 어떤 의미를 가지고 있는지에만 집중해서 이야기 해보도록 하겠다.

TCP, Transmission Control Protocol

TCP(Transmission Control Protocol)는 OSI 7계층 중 전송 계층에서 사용되고 있는 프로토콜로, 장비들 간의 통신 과정에서 정보를 안정적으로, 순서대로, 에러없이 교환할 수 있도록 하는 것에 목적을 둔 프로토콜이다.

컴퓨터 공학에서는 컴퓨터에게 가까운 부분일 수록 낮다거나 뒤에 있다는 표현을, 사람에게 가까운 높다거나 앞에 있다라는 표현을 자주 사용하는데, OSI 7계층에서도 마찬가지로 낮은 계층일수록 기계에 가까운 부분이고 높은 부분일수록 사람에게 가까운 부분이라고 생각하면 편하다.

 




이때 우리에게 친숙한 HTTP, SMTP, FTP와 같은 프로토콜 친구들이 가장 높은 계층인 응용 계층에 위치한다. 그에 비해 더 낮은 계층에 존재하는 TCP, UDP, IP 같은 프로토콜들은 상대적으로 접할 일이 많이 없기는 하다.

이런 프로토콜들은 대부분 OS에서 알아서 처리해주기 때문에 상위 계층에서 프로그래밍을 하는 개발자가 굳이 여기서 일어나는 일까지 하나하나 신경쓸 필요가 없기 떄문이다.

애초에 이런 레이어 모델들이 존재하는 이유 중에 이거다. 애초에 네트워크라는 것이 수많은 기술의 집약체인 만큼 한 명의 개발자가 모든 것을 다 알기는 힘들다. 그래서 각 계층 간 철저한 역할 분담을 통해 어떤 작업을 할 때 신경써야하는 범위를 좁혀주는 것이다.

덕분에 우리는 HTTP를 사용할 때 DNS는 어디를 사용할지, 패킷은 어떻게 처리할지 등 여러 가지 작업을 한번에 신경쓸 필요가 없다.

하지만 아무리 레이어가 나누어져 있다고 한들 하위 레이어에서 일어나는 일을 전혀 모르고 있다면, 어플리케이션 레이어에서는 아무 문제 없지만 하위 레이어에서 문제가 발생했을 때 전혀 손도 못 대는 케이스도 발생할 수 있다.

이런 이유로 자신이 사용하고 있는 프로토콜의 대략적인 작동 원리와 개요 정도는 알고 있으면 좋다고 생각하기 때문에, 이번 포스팅을 작성하며 그 동안 대략적인 몇 가지 특징으로만 알고 있던 TCP를 조금 뜯어보려고 한다.

TCP는 왜 만들어진걸까?

개인적으로 어떤 기술을 공부할 때, 무작정 외우는 것이 아니라 이게 왜 필요한 것인지를 알고 그 이유에 대해 공감하며 공부하는 편이 효과적이라고 생각한다.

TCP는 워낙 옛날에 나온 기술이니 당시 상황을 100% 공감하기는 쉽지 않겠지만, 그래도 이 프로토콜이 개발된 이유를 살펴보면 당시 엔지니어들의 고충을 알아볼 수 있다.

패킷 교환 방식을 사용해보자!

TCP는 방금 이야기 했듯이 1970년 냉전 당시 미 국방성이 개발하던 알파넷 프로젝트의 일부로 개발되었는데, 그 당시 알파넷을 연구할 때 관심을 가진 주제 중에 하나가 바로 핵전쟁이 나도 살아남는 네트워크였다.(핵전쟁의 상대방은 당연히 마더 러씨아…)

왜냐하면 1970년대의 네트워크는 회선 교환 방식을 사용하고 있었기 때문에 중계국이 폭격을 맞아서 박살나거나 중간에 연결된 선이 하나가 잘려나가면 그대로 통신이 끊어져 버렸기 때문이다.

 


직접 보지는 않았지만 이런 느낌이지 않았을까…?


저 당시 중계국이 하는 일은 그냥 이거다. A가 중계국에 “B랑 연결해주세요!”라고 하면, 위의 사진과 같이 케이블이 마구 꽂혀있는 패치 테이블에서 A 라벨이 붙은 구멍과 B 라벨이 붙은 구멍을 찾아서 케이블로 연결해준다.

말 그대로 회선을 교환하는 방식인 것이다. 저러다가 A가 C랑 통신하고 싶으면 B 구멍에서 케이블을 빼서 C 구멍에 꽂으면 된다.

이렇게 회선 교환 방식의 경우에는 통신을 하고 싶은 상대방과 물리적으로 회선을 하나 딱 잡아놓고 계속 통신을 하는 것이기 때문에 회선의 효율이 낮을 수 밖에 없다. 우리가 전화를 걸 때 상대방이 통화 중이면 상대방이 통화 중이니... 어쩌고 나오는 것과 같은 원리이다.

물론 회선을 독점하기 때문에 대량의 데이터를 빠른 속도로 주르륵 보낼 수 있는 등의 장점도 있긴 하지만, 이때 미국에게 중요한 것은 핵이 터져도 끊기지 않는 연결이었기 때문에 하나의 회선에 전적으로 의존하는 연결이라는 건 큰 단점으로 다가왔을 것이다.

그래서 나온 아이디어가 바로 패킷 교환 방식이다. 데이터를 하나의 회선을 사용하여 보내다가 해당 회선이나 중계국이 개박살나면 전송되던 데이터와도 영원히 이별하게 되니, 데이터를 잘게 쪼갠 후 여러 개의 회선을 통해 보내자는 것이다. 일종의 분산투자랄까.

 


이렇게 되면 노드 하나가 박살나도 모든 데이터가 유실되진 않을 것이다


최악의 경우 중간에 있는 회선이나 중계국이 박살나서 데이터가 약간 유실될 수는 있겠지만 전체 네트워크를 한 번에 타격하지 않는 이상 모든 데이터가 유실될 가능성은 적다. 또한 하나의 회선을 잡아놓고 계속 통신하는 것이 아니라 패킷에 목적지를 마킹해놓고 그냥 보내기만 하면 되니, 회선의 사용 효율 또한 높아질 수 있다.

이런 이유로 미 국방성은 이 아이디어를 채택하여 알파넷에 적용했고, 초기 테스트도 대성공하여 패킷 교환 방식의 실용성을 증명했다.

이후 몇 개의 대학과 군에서만 사용되던 알파넷이 대중들에게 공개되고 전 세계적으로 연결되며 인터넷으로 발전하게 되었고, 덩달아 알파넷의 통신 프로토콜이었던 TCP도 함께 떡상하게 된 것이다.

패킷 교환 방식의 문제점

하지만 패킷 교환 방식도 당연히 만능이 아니기에, 몇 가지 문제가 있었다. 우리가 TCP를 공부할 때 함께 따라오는 ARQ나 SYN, ACK 등의 개념들이 바로 이런 문제들을 해결하기 위해 과거의 엔지니어들이 머리를 싸맨 결과인 것이다.

Q: 전송 중간에 패킷이 쥐도새도 모르게 사라지거나 훼손되면 어떡해요?
A: 그럼 그 패킷만 다시 보내라고 해!(ARQ)

Q: 송신 측이 패킷을 쪼갠 순서를 알아야 수신 측이 재조립할 수 있겠는데요?
A: 그럼 순서번호를 패킷이랑 같이 보내!(시퀀스 번호)

Q: 수신 측이 처리할 수 있는 속도보다 송신 측이 패킷을 빠르게 보내버리면 어떡하죠?
A: 그럼 수신 측이 처리할 수 있는 양을 송신 측에 알려주고 그 만큼만 보내라고 해! (슬라이딩 윈도우)

TCP가지고 있는 많은 기능과 개념들은 마냥 글로만 봤을 땐 복잡해보이고 뭔가 외울 것도 많아보이지만, 당시 상황을 생각해보면 반드시 필요한 것들이었음을 알 수 있다.

그리고 이런 기능들은 상대방이 보낸 세그먼트의 헤더에 들어있는 정보를 파악하여 작동하기 때문에, 이 기능들을 하나씩 알아보기 전에 TCP의 헤더에는 어떤 정보들이 들어있고, 이 정보들이 의미하는 것이 무엇인지 살펴보려고 한다.

TCP의 헤더를 까보자

HTTP, TCP, IP와 같은 프로토콜들은 각자 자신이 맡은 역할이 있고, 보내고자 하는 데이터에 자신의 헤더를 붙혀서 데이터의 정보를 표현한다.

TCP는 전송의 신뢰성과 흐름 제어, 혼잡 제어 등의 역할을 맡고 있는 프로토콜이기 때문에, TCP 헤더에도 이러한 기능을 사용하기 위한 여러가지 값들이 담겨있다.

즉, 이 헤더를 보면 개괄적인 TCP의 기능들을 한 차례 쓱 훑어볼 수 있다는 말이고, 그런 이유로 필자는 TCP 포스팅의 첫 번째 스텝으로 헤더 까보기를 골랐다.

 




TCP는 여러 개의 필드로 나누어진 20 bytes, 즉 160 bits의 헤더를 사용하며, 각 필드의 비트를 0 또는 1로 변경하여 전송하고자 하는 세그먼트의 정보를 나타낸다.

하지만 이 20 bytes라는 것은 아무 옵션도 없는 기본적인 헤더일 때의 용량이고, TCP의 여러가지 옵션들을 사용하면 헤더 맨 뒤에 옵션 필드들이 추가로 붙기 때문에 최대 40 bytes가 더해진 60 bytes까지도 사용할 수도 있다.

그럼 이 그림에 표기된 순서대로 각 필드가 어떤 정보를 담고 있는지 한번 살펴보도록 하자.

Source port, Destination port

 




이 필드들은 세그먼트의 출발지와 목적지를 나타내는 필드로, 각각 16 bits 를 할당받는다. 이때 출발지와 목적지의 주소를 판별하기 위해서는 IP 주소와 포트 번호가 필요하다.

IP 주소는 당연히 한 계층 밑인 네트워크 계층에 있는 IP의 헤더에 담기기 때문에, TCP 헤더에는 IP 주소를 나타내는 필드가 없고 포트를 나타내는 필드만 존재한다.

Sequence Number

 




시퀀스 번호는 전송하는 데이터의 순서를 의미하며, 32 bits를 할당받는다. 최대 4,294,967,296 까지의 수를 담을 수 있기 때문에 시퀀스 번호가 그리 쉽게 중복되지는 않는다.

이 시퀀스 번호 덕분에, 수신자는 쪼개진 세그먼트의 순서를 파악하여 올바른 순서로 데이터를 재조립할 수 있게 된다.

송신자가 최초로 데이터를 전송할 때는 이 번호를 랜덤한 수로 초기화 하며, 이후 자신이 보낼 데이터의 1 bytes당 시퀀스 번호를 1씩 증가시키며 데이터의 순서를 표현하다 4,294,967,296를 넘어갈 경우 다시 0부터 시작한다.

Acknowledgment Number

 




승인 번호는 데이터를 받은 수신자가 예상하는 다음 시퀀스 번호를 의미하며, 32 bits를 할당받는다.

연결 설정과 연결 해제 때 발생하는 핸드쉐이크 과정에서는 상대방이 보낸 시퀀스 번호 + 1로 자신의 승인 번호를 만들어내지만, 실제로 데이터를 주고 받을 때는 상대방이 보낸 시퀀스 번호 + 자신이 받은 데이터의 bytes로 승인 번호를 만들어낸다.

예를 들어 1 MB짜리 데이터를 전송한다고 생각해보자. 이렇게 큰 데이터를 한번에 전송할 수는 없으므로, 송신자는 이 데이터를 여러 개의 세그먼트로 쪼개서 조금씩 전송해야한다. 이때 송신자가 한번에 전송할 수 있는 데이터 양은 네트워크나 수신자의 상태에 따라 가변적이긴 하지만, 그냥 100 bytes라고 가정해보자.

송신자는 첫 전송으로 100 bytes 만큼만 데이터를 전송하며 시퀀스 번호를 0으로 초기화한다. 시퀀스 번호는 1 bytes당 1씩 증가하기 때문에 첫 번째 바이트 뭉치는 0, 두 번째 바이트 뭉치는 1, 세 번째 바이트 뭉치는 2와 같은 순서로 매겨질 것이다.

즉, 이번 전송을 통해 수신자는 0~99까지 총 100개의 바이트 뭉치를 받았고, 그 다음 전송 때 받아야할 시퀀스 번호는 2가 아닌 100이 되는 것이다.

 


100 bytes 만큼 하나의 세그먼트로 묶어서 전송한다


tcpdump를 사용하여 패킷을 캡쳐해보면 실제로 송신 측이 보낸 데이터의 길이만큼 수신 측의 승인 번호가 증가하는 모습을 확인해 볼 수 있다.

   

송신 측이 보낸 세그먼트를 보면 시퀀스 번호가 seq 160:240로 찍혀있고, 수신 측은 자신의 승인 번호로 콜론 뒤 쪽의 값을 사용하고 있다.

이때 시퀀스 번호의 형식은 n 이상:m 미만의 범위를 나타낸다. 콜론 뒤쪽의 번호는 송신 측의 시퀀스 범위에 포함되지 않으므로 수신 측이 저 번호를 그대로 가져다 쓰는 것이다.

즉, 승인 번호는 다음에 보내줘야하는 데이터의 시작점을 의미한다는 것을 알 수 있다.

Data Offset

 




데이터 오프셋 필드에는 전체 세그먼트 중에서 헤더가 아닌 데이터가 시작되는 위치가 어디부터인지를 표시한다.

이 오프셋을 표기할 때는 32비트 워드 단위를 사용하며, 32 비트 체계에서의 1 Word = 4 bytes를 의미한다. 즉, 이 필드의 값에 4를 곱하면 세그먼트에서 헤더를 제외한 실제 데이터의 시작 위치를 알 수 있는 것이다.

이 필드에 할당된 4 bits로 표현할 수 있는 값의 범위는 0000 ~ 1111, 즉 0 ~ 15 Word이므로 기본적으로 0 ~ 60 bytes의 오프셋까지 표현할 수 있다. 하지만 옵션 필드를 제외한 나머지 필드는 필수로 존재해야 하기 때문에 최소 값은 20 bytes, 즉 5 Word로 고정되어 있다.

이 필드가 필요한 이유는, 밑에서 설명할 옵션(Option) 필드의 길이가 고정되어 있지 않기 때문이다.

Reserved (3 bits)

 




미래를 위해 예약된 필드로, 모두 0으로 채워져야 한다. 상단의 헤더 그림에도 그냥 0 0 0으로 찍혀있는 것을 확인해볼 수 있다.

Flags (NS ~ FIN)

 




9개의 비트 플래그이다. 이 플래그들은 현재 세그먼트의 속성을 나타낸다. 기존에는 6개의 플래그만을 사용했지만, 혼잡 제어 기능의 향상을 위해 Reserved 필드를 사용하여 NS, CWR, ECE 플래그가 추가되었다.

먼저 기존에 존재하던 플래그들의 의미는 다음과 같다.

필드의미

URG Urgent Pointer(긴급 포인터) 필드에 값이 채워져있음을 알리는 플래그. 이 포인터가 가리키는 긴급한 데이터는 높게 처리되어 먼저 처리된다. 요즘에는 많이 사용되지 않는다.
ACK Acknowledgment(승인 번호) 필드에 값이 채워져있음을 알리는 플래그. 이 플래그가 0이라면 승인 번호 필드 자체가 무시된다.
PSH Push 플래그. 수신 측에게 이 데이터를 최대한 빠르게 응용프로그램에게 전달해달라는 플래그이다. 이 플래그가 0이라면 수신 측은 자신의 버퍼가 다 채워질 때까지 기다린다. 즉, 이 플래그가 1이라면 이 세그먼트 이후에 더 이상 연결된 세그먼트가 없음을 의미하기도 한다.
RST Reset 플래그. 이미 연결이 확립되어 ESTABLISHED 상태인 상대방에게 연결을 강제로 리셋해달라는 요청의 의미이다.
SYN Synchronize 플래그. 상대방과 연결을 생성할 때, 시퀀스 번호의 동기화를 맞추기 위한 세그먼트임을 의미한다.
FIN Finish 플래그. 상대방과 연결을 종료하고 싶다는 요청인 세그먼트임을 의미한다.

기존의 Reserved 필드를 사용하여 새롭게 추가된 NS, CWR, ECE 플래그는 네트워크의 명시적 혼잡통보(Explicit Congestion Notification, ECN)을 위한 플래그이다.

ECN을 사용하지 않던 기존의 네트워크 혼잡 상황 인지 방법은 타임아웃을 이용한 방법이었다. 그러나 처리 속도에 민감한 어플리케이션에서는 이런 대기 시간 조차 아깝기 때문에, 송신자와 수신자에게 네트워크의 혼잡 상황을 명시적으로 알리기 위한 특별한 매커니즘이 필요하게 되었는데, 이것이 바로 ECN이다.

이때 CWR, ECE, ECT, CE 플래그를 사용하여 상대방에게 혼잡 상태를 알려줄 수 있는데, 이 중 CWR, ECE는 TCP 헤더에 존재하고 ECT, CE는 IP 헤더에 존재한다.

필드의미

NS ECN에서 사용하는 CWR, ECE 필드가 실수나 악의적으로 은폐되는 경우를 방어하기 위해 RFC 3540에서 추가된 필드
ECE ECN Echo 플래그. 해당 필드가 1이면서, SYN 플래그가 1일 때는 ECN을 사용한다고 상대방에게 알리는 의미. SYN 플래그가 0이라면 네트워크가 혼잡하니 세그먼트 윈도우의 크기를 줄여달라는 요청의 의미이다.
CWR 이미 ECE 플래그를 받아서, 전송하는 세그먼트 윈도우의 크기를 줄였다는 의미이다.

ECN은 이 포스팅의 주제와는 또 다른 이야기이므로 궁금하신 분들은 MR.ZERO님의 Explict Congestion Notification? 블로그를 참고하길 바란다.

Window Size

 




윈도우 사이즈 필드에는 한번에 전송할 수 있는 데이터의 양을 의미하는 값을 담는다. 216=65535216=65535 만큼의 값을 표현할 수 있고 단위는 바이트이므로, 윈도우의 최대 크기는 64KB라는 말이 된다.

하지만 이 최대 크기는 옛날 옛적에 생긴 기준이라 요즘같이 대용량 고속 통신 환경에는 맞지 않는 경우도 있다. 그래서 비트를 왼쪽으로 시프트하는 방식으로 윈도우 사이즈의 최대 크기를 키울 수 있는 방식도 사용하고 있으며, 몇 번 시프트할 지는 옵션 필드의 WSCALE 필드를 사용하여 표기한다.

Checksum

 




체크섬은 데이터를 송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값이다.

TCP의 체크섬은 전송할 데이터를 16 Bits씩 나눠서 차례대로 더해가는 방법으로 생성한다. 방식은 단순하지만 16 bits의 덧셈을 그대로 보자니 숫자가 너무 길어질 것이 뻔하므로 간단하게 반토막인 8 bits로만 한번 해보도록 하겠다.

   

앗, 8 bits인 두 수를 더 했더니 자리 수가 하나 올라가서 9 bits가 되었다. 이렇게 자리 수가 넘쳐버리면 체크섬 필드에 담을 수 없다.

이렇게 두 개의 수를 더했을 때 자리 수가 하나 올라간 부분을 캐리(Carry)라고 하는데, 계산 결과에서 이 부분만 떼어내서 다시 계산 결과에 더해주면 된다.

   

이런 방식을 Warp Around라고 한다. 이제 마지막 계산 결과에 1의 보수를 취해주면 체크섬이 된다. 1의 보수라고 하면 뭐지 싶겠지만 그냥 비트를 반전하면 된다.

   

이제 01110101이 이 데이터의 체크섬이 되는 것이다. 이 예제에서는 8 bits를 가지고 진행했기 때문에 8 bits짜리 체크섬이 나왔지만, 실제로는 16 bits 단위로 데이터를 잘라서 이 과정을 진행하기 때문에 16 bits인 체크섬 필드에 딱 들어맞는 이쁜 값이 나온다.

수신 측은 데이터를 받으면 위의 과정을 동일하게 거치되 1의 보수를 취하지 않은 값인 10001010까지만 만든 다음, 이 값과 송신 측이 보낸 체크섬을 더해서 모든 비트가 1이라면 이 데이터가 정상이라고 판단할 수 있다.

   

만약 이 값에 0이 하나라도 있으면 송신 측이 보낸 데이터에 뭔가 변조가 있었음을 알 수 있다.

Urgent Pointer

 




말 그대로 긴급 포인터이다. URG 플래그가 1이라면 수신 측은 이 포인터가 가르키고 있는 데이터를 우선 처리한다.

Options

 




옵션 필드는 TCP의 기능을 확장할 때 사용하는 필드들이며, 이 필드는 크기가 고정된 것이 아니라 가변적이다. 그래서 수신 측이 어디까지가 헤더고 어디서부터 데이터인지 알기 위해 위에서 설명한 데이터 오프셋 필드를 사용하는 것이다.

데이터 오프셋 필드는 20 ~ 60 bytes의 값을 표현할 수 있다고 했는데, 아무런 옵션도 사용하지 않은 헤더의 길이, 즉 Source Port 필드부터 Urgent Pointer 필드까지의 길이가 20 bytes이고, 옵션을 모두 사용했을 때 옵션 필드의 최대 길이가 40 bytes이기 때문이다.

만약 데이터 오프셋 필드의 값이 5, 즉 20 bytes보다 크지만 TCP의 옵션을 하나도 사용하고 있지 않다면, 초과한 bytes 만큼 이 필드를 0으로 채워줘야 수신 측이 헤더의 크기를 올바르게 측정할 수 있다.

대표적인 옵션으로는 윈도우 사이즈의 최대 값 표현을 확장할 수 있는 WSCALE, Selective Repeat 방식을 사용하기 위한 SACK 등이 있으며, 이외에도 거의 30개 정도의 옵션을 사용할 수 있기 때문에 이 친구들을 하나하나 설명하는 것은 조금 힘들 것 같다.

마치며

이렇게 간략한 TCP의 개요와 헤더 구조에 대해서 알아보았다. 사실 이 내용들은 TCP라는 놈의 껍데기 한 겹 정도에 불과한 내용이지만, 이게 거의 50년 묵은 프로토콜이다보니 포스팅 하나로 정리하기에는 내용이 굉장히 방대하다.

서두에서 이야기 했듯이 TCP나 IP 같은 프로토콜은 소켓 프로그래밍이라도 하지 않는 이상 직접적으로 마주할 기회가 흔치 않은 것이 사실이다.

하지만 직접 마주하지 않더라도 필자는 매일 HTTP를 사용하는 웹 개발자이기 때문에, 자신이 매일 사용하는 프로토콜이 어떤 식으로 굴러가는 지 정도는 알고 있는 것이 좋다고 생각한다.

TCP가 커널에 어떻게 구현되어있는지 직접 확인해보고싶은 분은 깃허브에 올라가있는 리눅스 소스인 linux/net/ipv4 안에 있는 구현체들을 통해 확인해볼 수 있다.(리눅스 소스 자체가 너무 커서 클론 받는 데 한 세월이라는 게 함정)

혹시 자신이 직접 TCP 통신 과정을 확인해보고 싶은 분은 간단한 TCP 예제 프로그램과 tcpdump, netstat 등의 유틸리티를 통해 확인해볼 수 있다. tcpdump를 클라이언와 서버가 주고 받는 패킷의 내용을 확인해보고, netstat을 사용하여 클라이언트와 서버의 TCP 상태를 확인해볼 수도 있다.

다음 포스팅에서는 TCP의 핸드쉐이크나 흐름 제어, 혼잡 제어 기법에 대해서 한번 다뤄보도록 하겠다.

이상으로 TCP의 헤더에는 어떤 정보들이 담겨있는걸까? 포스팅을 마친다.

 

참고 : https://evan-moon.github.io/2019/11/10/header-of-tcp/

728x90

'IT이야기' 카테고리의 다른 글

ZeroSSL에서 무료 인증서 발급받기  (0) 2022.12.23
MS Certification Road Map 2005  (0) 2015.08.25

+ Recent posts