

통신 세션을 설정, 관리, 종료하는 역할을 담당
통신 시스템 간의 상호작용을 조정
데이터 교환의 동기화를 담당
필요한 경우 연결의 복구를 지원
대표적인 프로토콜은 소켓(Socket)
네트워크에서 데이터를 주고받는 연결점(Endpoint)
네트워크 환경에서 동작하는 두 프로그램 간에 데이터를 교환하기 위한 방법 중 하나
프로그램 간의 네트워크 통신을 가능하게 하는 인터페이스를 제공
소켓 통신에서 서버는 특정 포트에서 들어오는 클라이언트의 연결 요청을 기다림
클라이언트가 연결 요청을 보내면 서버는 요청을 수락하고 소켓 연결이 이루어짐
소켓은 주로 IP 주소와 포트 번호를 사용하여 특정 네트워크 서비스나 프로세스를 식별
IP 주소는 인터넷에서 컴퓨터를 찾는 데 사용
포트 번호는 해당 컴퓨터에서 실행 중인 특정 서비스를 찾는 데 사용

데이터의 표현 방식을 관리하고 변환하는 역할을 담당
웹 브라우저와 웹 서버 간에 데이터를 안전하게 전송하기 위해 사용하는 암호화 프로토콜
데이터를 암호화하여 중간에 데이터를 가로채려는 공격자로부터 보호
실제로는 5,6,7 계층에 해당하는 프로토콜
공개키와 해당 공개키를 소유한 개체(예: 웹 서버)의 정보를 포함하고 있음
이를 통해 클라이언트는 서버의 신뢰성을 확인할 수 있음
공개키는 대칭키 암호화와 초기 단계에서 사용되며, 인증기관(CA)은 이러한 디지털 인증서를 발급함
클라이언트는 CA(Certificate Authority)의 공개키를 이용하여 서버의 디지털 인증서를 검증하고 안전한 통신을 위해 세션 키를 교환
SSL/TLS 연결은 Handshake 과정을 거쳐 설정됨
이 과정에서 클라이언트와 서버는 서로의 신원을 인증하고, 암호화 방식과 키를 협상하며, 디지털 인증서를 교환함
이후에는 협상된 암호화 방식과 키를 이용하여 데이터를 암호화하고 복호화 하면서 안전하게 통신하게 됨

클라이언트는 서버에게 인사를 건네면서 랜덤 데이터와 암호화 방식을 전달
서버는 클라이언트에게 인사를 건네고 랜덤 데이터, 암호화 방식 그리고 CA에 의해 발급된 인증서를 전달
클라이언트는 인증서를 확인하고 CA의 공개키를 사용하여 인증서를 복호화, 서버의 신뢰성을 검증함
클라이언트는 대칭키 기반의 임시 키를 생성하고 이를 서버의 공개키로 암호화하여 전송
서버는 자신의 비밀키로 클라이언트로부터 받은 임시 키를 해독하여 동일한 대칭키를 얻음
임시 키는 세션 키로 변환되고 이 세션 키를 이용해 클라이언트와 서버가 통신함
통신이 끝나면 세션을 종료하고 세션 키를 삭제함

2008년에 발표된 TLS 프로토콜의 버전
다양한 암호화 알고리즘 선택 가능
일부 암호화 알고리즘에서 보안 취약점이 발견되어 보안성이 낮은 편
다양한 암호화 알고리즘 지원(SHA-256, SHA-384)
2018년에 발표된 TLS 프로토콜의 최신 버전
보안성이 크게 향상되어 취약점이 개선됨
안전한 암호화 알고리즘으로 제한되어 있어 보안성이 높음
Handshake 과정이 단순화되어 속도가 향상됨
기본적인 문자 인코딩 방식
알파벳, 숫자, 특수 문자 등을 7비트의 이진 코드로 나타냄
1963년에 처음 표준화 됨
여러 차례 개정되어 현재 128개의 문자를 표현할 수 있음

전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 국제 표준
각각의 문자에 고유한 번호를 부여하여 서로 다른 문자 인코딩 방식 간의 혼란을 줄이려는 목적
가변 길이 인코딩 방식, 각 문자를 1~4byte로 표현
영문 알파벳과 같이 ASCII 코드에 포함된 문자들은 1byte로 표현되며, 그 외 문자는 2byte 이상을 사용
웹에서 가장 널리 사용되는 인코딩 방식 중 하나
가변 길이 인코딩 방식, 각 문자를 2byte 또는 4byte로 표현
대부분의 현대 문자는 2byte로 표현 가능, 그 외 특수 문자나 이모티콘 등은 4byte를 사용
디지털 이미지의 파일 형식
JPEG, PNG, GIF 등 사용할 수 있는 포맷이 많음
현재까지 대부분의 포맷은 3D가 아닌 2D 이미지를 저장하기 위한 것

데이터를 더 작은 크기로 만드는 기술
이를 통해 저장 공간을 절약하고 데이터 전송 시간을 줄일 수 있음
압축 알고리즘은 손실 또는 손실 없는 방식으로 분류될 수 있음
손실 압축은 데이터의 일부를 제거하여 데이터 크기를 줄임
손실 없는 압축은 원본 데이터를 완벽하게 복구할 수 있음
압축은 파일 시스템, 네트워크 통신, 그래픽 등 다양한 분야에서 사용됨
ZIP 파일은 여러 파일을 하나의 압축된 파일로 만듦
JPEG 이미지는 손실 압축을 사용하여 이미지를 효율적으로 저장함
OSI 7계층 모델이나 TCP/IP 모델에서 가장 높은 계층으로 사용자와 가장 가까운 계층
사용자가 네트워크 서비스를 사용할 수 있도록 하는 인터페이스 제공
다양한 응용 프로그램과 서비스가 동작
네트워크에서 컴퓨터와 장치에 자동으로 IP 주소 및 기타 네트워크 설정을 제공하는 프로토콜
새로운 장치가 네트워크에 연결될 때 IP 주소 할당, 서브넷 마스크, 기본 게이트웨이, DNS 서버 주소 등을 동적으로 제공하여 네트워크 구성을 편리하게 함
IP 주소 충돌을 방지하고 네트워크 관리를 용이하게 함
클라이언트에게 일정 기간 동안 IP 주소를 할당하고 갱신하는 역할을 함
DHCP 서버로부터 IP 주소와 기타 네트워크 설정을 받는 장치
이 장치는 컴퓨터, 스마트폰, 프린터, 스마트TV 등 네트워크에 연결되는 모든 장치를 포함할 수 있음
네트워크에 연결될 때마다 DHCP 서버에게 IP 주소를 요청
DHCP 클라이언트는 UDP 포트 68을 사용
IP 주소와 기타 네트워크 설정을 할당하는 서버
DHCP 서버는 네트워크의 IP 주소와 관련된 설정을 관리하는 역할
이 서버는 DHCP 클라이언트의 요청에 응답하여 IP 주소, 서브넷 마스크,
게이트웨이 IP 주소, DNS 서버 IP 주소 등의 네트워크 설정을 제공함
DHCP 서버는 UDP 포트 67을 사용

DHCP Discovery
DHCP 클라이언트는 DHCP Discover 메시지를 브로드캐스트 한다. 이 메시지는 DHCP 서버를 찾기 위한 메시지이다.
DHCP Offer
DHCP 서버는 Discover 메시지를 받고, 사용 가능한 IP 주소를 찾아 DHCP Offer 메시지를 클라이언트에게 보낸다. 이 메시지에는 할당된 IP 주소와 네트워크 설정 정보가 포함되어 있다.
DHCP Request
DHCP 클라이언트는 서버로부터 제안받은 IP 주소와 DHCP 서버 정보를 포함한 요청 메시지를 보낸다.
DHCP Acknowledgement
DHCP 서버는 요청받은 해당 IP를 어떤 클라이언트가 언제부터 사용하기 시작했는지 기록하고 Request 메시지를 정상 수신했다는 응답을 전송한다. 이제 클라이언트는 할당받은 IP 주소를 사용하여 네트워크에 연결할 수 있다.
DHCP 서버가 할당할 수 있는 IP 주소의 범위
DHCP 서버는 이 풀에서 사용 가능한 IP 주소를 클라이언트에게 할당
네트워크의 크기와 필요한 IP 주소의 수에 따라 설정됨

DHCP 서버가 IP 주소를 할당하는 기간
이 기간이 만료되면, DHCP 클라이언트는 새로운 IP 주소를 요청해야 함
만약 클라이언트가 IP를 사용하는 도중에 임대 시간이 모두 지난다면, 클라이언트가 사용하던 IP는 다시 수거되고 클라이언트는 다시 DHCP Discover부터 시작해 IP를 재할당 받아야 함
사용하던 IP 주소가 다른 클라이언트에 할당되면서 다른 IP가 할당될 수도 있음
DHCP 서버에서 IP를 할당받은 후 임대 시간의 50%가 지나면 DHCP 갱신 과정을 수행함
만약 갱신이 실패하면 초기 임대 시간의 75%가 지난 시점에서 다시 갱신을 시도함
DHCP 클라이언트는 DHCP 서버 정보와 이미 사용 중인 IP 정보가 있어 DHCP Discover와 DHCP Offer 과정을 생략하고 DHCP Request를 보냄
DHCP 서버에서는 DHCP ACK를 보내면서 갱신 과정을 진행
이 때는 브로드캐스트가 아닌 유니캐르트로 진행되므로 불필요한 브로드캐스트가 발생하지 않게 됨
사람이 읽을 수 있는 도메인 이름을 컴퓨터가 이해할 수 있는 IP 주소로 변환하는 역할
전 세계적으로 분산된 네임 서버 네트워크로 구성되어 있음
사용자가 도메인 이름을 입력하면 해당 도메인의 IP 주소를 찾아주는 역할
이 시스템은 웹 브라우징, 이메일 전송, 다른 인터넷 서비스들을 가능하게 해줌
역 트리 구조로 최상위 루트부터 최상위 도메인, 차상위 도메인, 서브 도메인과 같이 하위 레벨로 원하는 주소를 단계적으로 찾아감

NS 계층구조의 가장 상위에 위치하며, 모든 도메인 이름의 최종 참조 지점
ICANN이 직접 관리하는 서버로 전 세계에 13개가 있음
DNS 서버를 설치하면 루트 DNS의 IP를 기록한 힌트 파일을 가지고 있어 루트 DNS 설정을 할 필요 없음
루트 도메인 바로 아래에 위치하며, 일반 TLD와 국가 코드 TLD로 구분됨
IANA에서 관리하며, 6가지 유형으로 구분 가능

각 국가 또는 지리적 영토를 나타내는 두 자리의 국가 코드로 시작되는 최상위 도메인
해당 국가나 영토에서 운영되는 웹사이트를 식별하기 위해 사용됨
인터넷 상에서 특정 주제나 조직 유형에 관련된 도메인을 식별하기 위한 최상위 도메인
주로 상업적인 목적이나 특정 주제에 관련된 웹사이트를 구분하기 위해 사용됨
도메인 등록 기관(Registry)이 관리하는 서버
도메인 네임의 가장 마지막 부분
일반 TLD와 국가 코드 TLD 같은 도메인들을 관리하고 부여하는 서버
차상위 바로 아래에 위치
특정 서비스나 부서를 나타낼 수 있음
www, mail, blog 등을 구분하는 최하위 서버
인터넷에서 컴퓨터 또는 호스트의 정확한 위치를 지정하는 완전한 도메인 이름
도메인 이름의 전체 경로를 나타내며, 서브 도메인부터 루트 도메인까지를 포함함
DNS 네임스페이스를 논리적으로 나눈 영역
하나 또는 여러 도메인의 DNS 레코드를 저장하고 관리하는 단위
DNS 서버가 관래햐아 하는 범위를 정의
DNS 서버가 해당 패킷을 받았을 때 어떤식으로 처리할지를 나타내는 지침

로컬 네트워크 내에서 DNS 쿼리를 처리하는 서버
로컬 서버는 DNS Hint File을 사용하여 루트 DNS 서버의 위치를 알 수 있음
또한, 재귀적 쿼리와 반복적 쿼리를 지원하여, DNS 쿼리 처리 방식을 선택할 수 있음
DNS 서버가 최상위 도메인 서버에 질의를 시작할 위치를 알기 위한 참조 정보를 제공하는 파일
이는 또한 루트 힌트 파일이라고 불리며, 루트 DNS 서버의 주소 목록을 포함하고 있음
클라이언트가 DNS 서버에 요청을 보내고, DNS 서버가 요청받은 정보를 가지고 있지 않을 경우 다른 DNS 서버에게 직접 물어보는 방식
이후 응답을 받으면 그 결과를 클라이언트에게 반환하고 클라이언트는 요청한 정보를 직접 받게 되므로, 쿼리를 보낸 후에는 그 결과를 기다리기만 하면 됨
클라이언트가 DNS 서버에 요청을 보내고, DNS 서버가 요청받은 정보를 가지고 있지 않을 경우 다른 DNS 서버로 문의하라는 응답을 클라이언트에게 보내는 방식
그 다음 클라이언트는 다른 DNS 서버에게 직접 요청을 보내고, 이 과정을 반복하여 필요한 정보를 찾아냄

특정 도메인에 대한 DNS 레코드를 관리하고 해당 도메인에 대한 최신 정보를 제공하는 서버
해당 도메인의 '권한 있는' 소스로 간주
DNS 쿼리에 대한 최종적인 응답을 제공
인터넷 상에서 파일을 교환하기 위한 표준 프로토콜
사용자는 FTP 클라이언트를 통해 FTP 서버에 연결하여 파일을 업로드하고 다운로드할 수 있음
기본적으로 TCP 포트 21을 사용
능동(Active) 모드에서 클라이언트는 데이터 연결을 위한 포트를 열어두고, 서버가 해당 포트로 연결을 수립하여 데이터를 전송함
이 방식은 클라이언트가 방화벽 뒤에 있을 경우 문제를 일으킬 수 있음
수동(Passive) 모드에서 서버는 데이터 연결을 위한 포트를 열어두고, 클라이언트가 해당 포트로 연결을 수립하여 데이터를 전송함
이 방식은 서버가 방화벽 뒤에 있을 경우 유용
오늘날 대부분의 FTP 연결에서 사용되는 방식

FTP에 보안 채널을 추가한 것
SSH 프로토콜을 사용하여 데이터를 암호화하고 서버와 클라이언트 사이의 모든 통신을 보호함
22번 포트를 사용

네트워크 프로토콜 중 하나
보안이 중요한 네트워크에서 원격으로 컴퓨터에 접속하거나 파일을 전송할 때 사용
[주요 특징]
암호화: 데이터를 암호화하여 전송, 데이터 도난이나 감청을 방지할 수 있음
인증 메커니즘: 사용자는 비밀번호, 공개 키 인증 등 다양한 방법으로 인증 가능
포트 포워딩: 안전하지 않은 네트워크에서도 안전하게 통신할 수 있도록 포트 포워딩 지원
SFTP/SCP 지원: 안전한 파일 전송을 위해 SFTP와 SCP 프로토콜을 지원

전송시스템 ------------> 수신 시스템
"ABCD" ---------------> "ABCD" -> 암호화가 안된 상태(제3자 도청 가능성)
암호화 -> 암호화된 Data -> 암호화된 Data 수신 -> 복호화 -> 원본
암호화, 복호화에는 key가 필요함
암호화할 때 사용하는 key가 있고, 복호화할 때 사용하는 key가 있음
두 key가 같으면 비밀키 = 대칭키 암호화 알고리즘(SEED, DES, 3DES ...)
두 key가 다르면 공개키 = 비대칭키 암호화 알고리즘(RSA, DSA, ECC ...)
원격으로 컴퓨터에 접속하기 위해 사용하는 프로토콜
SSH가 널리 사용되기 이전에 사용되었으나, 데이터가 암호화되지 않아 보안에 취약
다양한 원격 접속 및 파일 전송 프로토콜을 포괄하는 개념으로 사용
보안상 매우 취약하여 사용하지않음
[명령어]
rsh(Remote Shell): 원격 컴퓨터로 로그인하지 않고 명령을 실행
rlogin(Remote Login): 원격 시스템에 로그인하여 작업
rcp(Remote Copy): 두 컴퓨터 간에 파일을 복사할 때 사용
rsync: 파일 및 디렉토리 동기화
인터넷에서 이메일을 전송하는 데 사용되는 표준 프로토콜
클라이언트-서버 모델을 사용하며,
이메일 메시지를 보내는 클라아인트와 이메일 메시지를 받고 전달하는 서버 간의 통신을 관리
SMTPS는 이메일을 암호화하고 이메일을 인증하며 데이터 변조를 방지하므로 일반 SMTP보다 더 안전
SMTPS는 전송 계층 보안(TLS) 프로토콜을 사용
TLS는 데이터가 네트워크를 통과할 때 데이터를 암호화함
암호화는 올바른 해독 키를 가진 당사자만 암호를 풀고 데이터를 볼 수 있도록 데이터를 변환하는 프로세스
인터넷과 같이 신뢰할 수 없는 환경을 통과하는 데이터의 보안을 유지할 수 있음
TLS는 디지털 서명을 사용하여 네트워크 트래픽이 출처라고 주장되는 곳에서 오는지 확인
이 단계가 없으면 컴퓨터는 악의적인 공격에 데이터를 허용하게 됨
SMTP는 기본적으로 TCP 포트 25를 사용
그러나 이 포트는 스팸 메일 발송에 악용 되는 경우가 많아 일반적으로 ISP에 의해 차단되는 경우가 많음
SMTP는 주로 포트 587을 사용하며 이 포트는 SMTPS를 사용하는 암호화된 이메일 전송용 포트임
또한, SSL/TLS를 사용하여 암호화된 연결을 바로 시작하는 포트 465도 있음
이메일 클라이언트가 메일 서버에서 메일 메시지를 가져오는 데 사용되는 프로토콜
TCP 110번 포트를 사용
이메일 클라이언트에서 메시지를 다운로드하는 데 필요한 기능을 제공
대다수 POP은 로컬 장치에 이메일을 내려받으면 서버에서는 이메일을 지우도록 기본 설정되어 있음

이메일 클라이언트와 메일 서버 간에 메일 메시지를 동기화하는 데 사용
TCP/IP 프로토콜 위에서 작동
이메일 클라이언트에서 메시지를 읽고 관리하는 데 필요한 여러 기능을 제공
중앙 서버에서 동기화가 이뤄짐
모든 장치에서 동일한 이메일 폴더를 확인할 수 있음
TCP 143 포트를 사용
웹에서 데이터를 전송하는 데 사용되는 프로토콜
클라이언트-서버 모델을 사용
데이터가 평문으로 전송되어 보안에 취약
웹 서버의 신원을 확인할 수 없으므로 서버의 신뢰성을 보장할 수 없음
HTTP에 SSL/TLS 암호화를 더한 보안 강화 프로토콜
데이터의 기밀성, 무결성, 가용성 보장
클라이언트가 서버에 요청(Request) 메시지를 보내고,
서버는 클라이언트의 요청에 대한 응답을 반환
비연결성 프로토콜

1996년 도입
현재는 사용하지 않음
각 요청에 대한 새로운 TCP 연결
청크 전송 인코딩(Transfer-encoding: chunked)이 존재하지 않음
지속적인 연결(Persistent Connection)
청크 전송 인코딩을 사용한 스트리밍
Keep-Alive 연결
Host 헤더를 통한 가상 호스팅
Pipelining을 사용한 요청 병렬 처리
완벽한 Multiplexing 아닌 응답처리를 미루는 방식
순차적으로 처리되기에 후순위는 지연 발생
Head Of Line Blocking(HOLB)
SPDY(Speedy)
웹 페이지의 성능 향상을 목적으로 설계
구글에서 개발
여러 개의 요청과 응답을 한 연결로 다중화
웹 페이지의 로딩 속도 개선
헤더 압축 및 우선순위 지정과 같은 기능 제공
Multiplexing
하나의 TCP 연결을 통해 여러 개의 요청과 응답을 동시에 처리하는 다중화 기능
여러 요청에 대한 병렬 처리
프레임에 문제가 발생할 시 패킷을 다시 전송
목적지를 찾는 동안 전체 TCP 연결 중단
Server Push
서버가 클라이언트의 요청 없이도 필요한 리소스를 미리 전송
대부분의 브라우저가 HTTP/2를 HTTPS와 함께 구현
QUIC
UDP 기반의 전송 프로토콜
Google에서 개발
다중 스트림 기능을 통해 병렬로 데이터 전송
Zero RTT
Handshake 없이도 이전에 설정된 연결을 통해 데이터를 주고 받음

요청과 응답의 메타데이터를 포함
클라이언트와 서버 간의 통신을 제어하는 데 사용
클라이언트와 서버 사이에 이루어지는 요청과 응답 데이터를 전송하는 방식



서버가 클라이언트의 요청을 어떻게 처리했는지를 나타냄
3자리 숫자로 구성
각각의 범위가 다른 종류의 응답을 나타냄







Wireshark 화면이다.
query만 있는 것이 Request, 응답도 있는 것이 Response
Request는 클라이언트가 서버에게 보내는 것이다.
Response는 서버가 클라이언트에게 보내는 것이다.
192.168.170.8이 Client, 192.168.170.20이 Server다.
클라이언트 포트는 32795이다.

임시로 8.8.8.8에 요청을 보내보자.

Wireshark에서 패킷을 확인 가능하다.

Destination Address가 8.8.8.8인 것을 확인할 수 있다.

UDP 53포트를 사용한다.

응답을 조회해보자.

Answers에서 CNAME을 확인할 수 있다.

역방향 조회도 잘 이루어지는 것을 볼 수 있다.

이 사진은 ssh의 pcap 사진이다.
172.16.238.1이 클라이언트, 172.16.238.168이 서버다.
SSH는 TCP 22번 포트를 사용한다.

위 사진은 키 알고리즘을 서로 협상하는 모습이다.

위와 같이 암호화하기 때문에 알아볼 수 없게 된다...

DHCP, FTP, TFTP 서버까지 구현하였다.

FTP 서버가 잘 동작하는 것을 확인할 수 있다.
1. DHCP는 어떤 서비스?
-네트워크에서 IP 주소를 자동으로 할당해주는 서비스
-사용자가 직접 IP를 설정할 필요 없이 자동으로 네트워크 정보를 받아올 수 있음
-일반적으로 기업 네트워크나 가정용 공유기에서 사용됨
2. DNS는 어떤 서비스?
-도메인 이름을 IP 주소로 변환하는 서비스
-기억하기 쉬운 도메인 주소를 입력하면, DNS가 해당하는 서버의 IP 주소를 찾아 연결해줌
3. FTP는 어떤 서비스?
-네트워크를 통해 파일을 전송하는 프로토콜
-서버와 클라이언트 간에 파일을 업로드하거나 다운로드할 때 사용
4. SSH는 어떤 서비스?
-네트워크를 통해 원격 시스템에 안전하게 접속하고 명령할 수 있도록 하는 프로토콜
-기본적으로 암호화된 통신을 제공
-원격 서버 관리, 파일 전송 등을 보안성을 유지한 상태에서 수행
5. L4 프로토콜?
-TCP, UDP, SCTP, DCCP
6. Port Number(system port)?
-포트 번호는 네트워크에서 여러 프로세스(응용 프로그램)가
동시에 데이터를 주고받을 수 있도록 하는 고유한 식별자
-네트워크에서 특정 서비스 또는 애플리케이션을 식별하는 역할
-DHCP(67/68), DNS(53), FTP(20/21), SSH(22)
