1차시 - 패킷, 프로토콜
통신 : 육하원칙
- 어디서?
- in Computer
- 누가?
- 송신자 (Sender)
- 수신자 (Receiver)
- 무엇을?
- 정보 == bits
- 언제? 왜?
- 응용 프로그램의 영역
- 개발의 영역
- 어떻게?
- To Be Continued
통신
Information/Communication
- 정보 전달을 다루는 과학 기술. 정보를 모아 전류나 전기장으로 바꾼 다음 전기적 계통이나 공간을 통하여 다른 지점에 전달하면 수신자가 이해할 수 있도록 다시 바꾸는 기술이다.
통신, 네트워크를 왜 배워야 하는가?
- 컴퓨터공학의 꽃!
- 게임 : 내 컴퓨터와 쟤 컴퓨터가 같은 프로그램으로 노는 것 ➡️ 통신
- 메신저 : 내 컴퓨터에서 쟤 컴퓨터로 메시지를 보내는 것 ➡️ 통신
데이터통신, 컴퓨터네트워크의 근본적인 질문
- 내 프로세스가 저 프로세스에 어떻게 데이터를 보내지?
- Inter-Process Communication
규칙 (Rule : Protocol)
- 통신을 배운다 => 규칙을 배운다
- 통신 규칙 => 프로토콜 (Protocol)
- 요즘 인터넷의 통신 방법
=> 패킷 (Packet)
=> 데이터를 포장해서 전송
패킷 (Network Packet)
- 컴퓨터 네트워크에서 데이터를 전송하는 기본 단위
- 더 큰 메시지를 작은 조각으로 나누어 효율적인 전송 가능
- 헤더와 페이로드로 구성
- 헤더 : 패킷 라우팅 및 처리에 필요한 정보 포함
- 페이로드 : 실제 전송되는 데이터 (텍스트, 이미지, 비디오 등)
패킷 캡쳐 (Packet Capture)
- 네트워크 인터페이스 (Network Interface)를 오가는 데이터를 살펴보는 (스니핑) 동작
어떤 인터페이스를 캡쳐해야 하나?
- WireShark를 실행한 후, 인터넷 사용
=> 그래프가 출렁이는 것이 있음
Network layer
- OSI 7 Layer Model
- 7 Layer : Application Layer
- 6 Layer : Presentation Layer
- 5 Layer : Session Layer
- 4 Layer : Transport Layer
- 3 Layer : Network Layer
- 2 Layer : DataLink Layer
- 1 Layer : Physical Layer
- TCP/IP Protocol
- Application (7, 6, 5 Layer)
- Telenet, FTP, DHCP, TFTP, HTTP, SMTP, DNS, SNMP
- Transport (4 Layer)
- TCP, UDP
- Internet (3 Layer)
- ICMP, ARP, RARP, IP
- Network Interface (2, 1 Layer)
Network Socket
1. 네트워크 소켓이란 무엇인가?
- 컴퓨터 프로그램 간 통신을 위한 양방향 통신 엔드포인트
- 애플리케이션 계층 프로토콜 (TCP, UDP 등)과 운영 체제 간의 인터페이스 역할
- 소켓 API를 통해 프로그램에서 생성, 관리, 사용 가능
2. 소켓의 주요 특징
- 프로세스 간 통신 (IPC)
: 같은 컴퓨터 또는 서로 다른 컴퓨터의 프로그램 간 통신 가능
- 네트워크 프로그래밍
: 다양한 네트워크 응용 프로그래밍 개발 가능 (웹 서버, 클라이언트, 메신저 등)
- 표준화
: Berkeley 소켓 API와 같은 표준 인터페이스를 통해 다양한 운영 체제에서 사용 가능
3. 소켓 API
- 소켓 생성, 연결, 데이터 전송, 수신, 종료 등을 위한 함수 제공
- 운영 체제 종류에 따라 다양한 API 존재 (Berkeley 소켓, Windows 소켓 등)
4. 소켓의 종류
- 연결 지향 소켓 (Connection-oriented sockets)
- 연결 없는 소켓 (Connectionless sockets)
- 데이터그램 소켓 (Datagram sockets)
- 스트림 소켓 (Stream sockets)
IP와 Port로 Process를 구분 (TCP/IP)
- IP address
- Port number
- Protocol
웹 (World Wide Web)
- (대부분) HTTP 통신 (HyperText Transfer Protocol)
- 서버는 요청에 대하여 응답
- 요청과 응답에 대한 규약 (Protocol)
- GET
- POST
- PUT
- DELETE
HTTP (HyperText Transfer Protocol)
- Socket 활용 객체 전송
- HTTP over TCP (HTTP/3 over UDP)
- QUIC
- 웹 페이지 : 객체들의 집합
- 객체 : HTML, Image, Audio, Video, e.t.c.
- 웹 페이지 식별 via URL (Universal Resource Locator)
- https://info.cern.ch/
2차시 - HTTP, RESTful API
HTTP의 위치 : 응용 계층 (Layer 7)
- TCP/IP, UDP/IP 위에 HTTP 위치
- HTTPS : SSL/TLS 위에 HTTP
- SSL/TLS도 응용 계층
- HTTP로 전송
- HTML
- CSS
- JavaScript
HTTP의 흐름
1. TCP 연결
- IP address, Port number
- 필요한 경우 암호화 (TLS)
2. HTTP 메시지 송신 (요청)
- Method Path Protocol
- With Headers
3. HTTP 메시지 수신 (응답)
- Protocol Code Message
- with Headers
CURL
- CURL이란 무엇인가?
- 다양한 프로토콜을 지원하는 강력한 명령행 도구
- URL을 통해 웹 서버와 통신하여 데이터를 전송 및 수신
- 웹 개발, 데이터 스크래핑, 자동화, 테스트 등 다양한 분야 활용
- CURL의 주요 기능
- HTTP, HTTPS, FTP, FTPS, SCP, SFTP, Telenet, LDAP, POP3, IMAP, SMTP 등 다양한 분야 활용
- GET, POST, PUT, DELETE, HEAD, OPTIONS 등 다양한 HTTP 메서드 지원
- URL, 헤더, 데이터, 인증정보 등을 설정하여 요청 구성 가능
- 응답 코드, 헤더, 바디 등을 확인하여 결과 분석 가능
- 다양한 옵션을 통해 동작을 세밀하게 조정 가능
- 스크립팅 언어와 연동하여 자동화 가능
- CURL의 강력한 기능
- 파일 업로드 및 다운로드
- 웹 페이지 스크래핑
- API 호출
- 네트워크 테스트
- 자동화
- 스크립팅
- CURL 사용 방법
- CURL 활용 예시
- 웹 개발
- 데이터 스크래핑
- 자동화
- 테스트
- CURL 심층 탐구
- CURL 옵션
- CURL 라이브러리
- CURL 스크립팅
- CURL 보안
HTTP Request
- ‘문자’로 서버에 전달됨
- TCP Layer 위에서…
- Body는 문자가 아닐 수 있음 (Audio, Video, etc …)
- Header / Body 구분
- Empty line with a carriage return and a line feed
(\r\n)
HTTP Method
- GET
- POST
- PUT
- DELETE
- —
- HEAD
- PATCH
HTTPS Status Code
- 번호에 따라 의미가 정해져 있음!
- Information Responses (100-199)
- Successful Responses (200-299)
- Redirection Messages (300-399)
- Client Error Responses (400-499)
- Server Error Responses (500-599)
- 주요 번호는 외워두면 개발할 때 매우 편함
- 200 OK, 201 Created, 202 Accepted
- 302 Found
- 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found
- 500 Internal Server Error, 502 Bad Gateway
멱등성 (Idempotent)
- 같은 요청을 여러 번 날렸을 때 ‘서버’의 상태가 유지되어야 하는 성질
- GET, PUT, DELETE
3차시 - HTTP server using Socket (Python 3)
실습) Basic HTTP Server
Python 3 HTTP Server
- Python 3 표준 라이브러리에서 제공하는 간단한 HTTP Server
실습) TCP Communication
TCP Communication
- HTTP는 (주로) TCP 이용
- Packet Control
- Reliable Connection
- More) QUIC
WireShark Socket Capture ..
- [TCP ACKed unseen segment]
- 설명
- 수신자가 이전에 보낸 ACK 메시지에 대한 응답으로 ACK를 보냈지만, 아직 해당 세그먼트를 수신하지 못한 경우 발생
- 일반적으로 네트워크 지연 또는 패킷 손실로 인해 발생
- 송신자는 ACKed unseen segment 메시지를 받으면 해당 세그먼트를 다시 전송할 수 있음
- 가능한 원인
- 네트워크 지연
- 패킷 손실
- 송신 또는 수신 버퍼 오버플로
- TCP 윈도우 스케일링 문제
- 해결 방법
- 네트워크 문제 해결
- MTU 설정 조정
- TCP 윈도우 스케일링 사용
- [TCP Spurious Retransmisson]
- 설명
- 수신자가 이미 받은 세그먼트를 송신자가 다시 전송하는 경우 발생
- 일반적으로 송신자 또는 수신자 측에서 ACK 메시지 손실로 인해 발생
- 네트워크 성능 저하를 초래할 수 있음
- 가능한 원인
- ACK 메시지 손실
- 송신 또는 수신 버퍼 오버플로
- TCP 타이머 문제
- 해결 방법
- 네트워크 문제 해결
- TCP 타이머 조정
- [TCP Retransmission]
- 설명
- 송신자가 정해진 시간 안에 ACK 메시지를 받지 못하면 해당 세그먼트를 다시 전송하는 경우 발생
- 네트워크 지연 또는 패킷 손실로 인해 발생
- 네트워크 성능 저하를 초래할 수 있음
- 가능한 원인
- 네트워크 지연
- 패킷 손실
- 송신 또는 수신 버퍼 오버플로
- TCP 타이머 문제
- 해결 방법
- 네트워크 문제 해결
- TCP 타이머 조정
- [TCP Duplex ACK]
- 설명
- 동일한 순서 번호를 가진 ACK 메시지를 두 번 연속으로 보내는 경우 발생
- 일반적으로 수신자 측에서 ACK 메시지 손실을 의심할 때 발생
- 네트워크 성능 저하를 초래할 수 있음
- 가능한 원인
- ACK 메시지 손실
- 송신 또는 수신 버퍼 오버플로
- TCP 타이머 문제
- 해결 방법
- 네트워크 문제 해결
- TCP 타이머 문제
- [TCP Dup ACK]
- 설명
- 이미 받은 ACK 메시지를 수신자가 다시 보내는 경우 발생
- 일반적으로 송신 측에서 세그먼트 손실을 의심할 때 발생
- 네트워크 성능 저하를 초래할 수 있음
- 가능한 원인
- 패킷 손실
- 송신 또는 수신 버퍼 오버플로
- TCP 타이머 문제
- 해결 방법
- 네트워크 문제 해결
- TCP 타이머 조정
- [TCP Previous segment not captured]
- 설명
- 현재 세그먼트를 이해하기 위해 이전 세그먼트가 필요하지만 캡쳐되지 않은 경우 발생
- TCP 세션 분석을 어렵게 만들 수 있음
- 가능한 원인
- 캡쳐 필터 설정 문제
- 패킷 손실
- 캡쳐 시작 지연
- 해결 방법
- 캡처 필터 설정 확인
- 캡처 시작 시간 조정
실습) tcp_echo_server.py
- TCP 활용 에코 서버
- 서버가 보낸 데이터를 답변함
- 집중해서 봐야 할 것!!! (TCP 통신 순서)
1. bind
2. listen
3. accept
4. recv-send
5. Close
실습) tcp_echo_client.py
- TCP 활용 에코 클라이언트
- 입력된 텍스트를 서버로 보내고, 서버가 답변한 것을 출력
- 집중해서 봐야 할 것!!! (TCP 통신 순서)
1. connect
2. send-recv
3. close
MIME이란 무엇일까요?
- MIME은 Multipurpose Internet Mail Extensions의 약자로, 다양한 유형의 파일을 이메일로 보낼 수 있도록 하는 규약입니다. 쉽게 말하면, 이메일에 사진, 동영상, 문서 등 텍스트 파일 외의 다른 파일을 첨부할 수 있도록 해주는 기술이라고 생각하면 됩니다.
1. MIME 이전 시대
옛날에는 이메일을 통해 텍스트만 전송할 수 있었습니다. 만약 사진을 보내고 싶었다면 사진을 텍스트로 변환해야 했습니다. 이 과정은 매우 번거롭고 시간이 많이 소요되었습니다.
2. MIME의 등장
MIME은 이러한 문제를 해결하기 위해 등장했습니다. MIME은 파일마다 고유한 MIME 유형이라는 것을 정의합니다. MIME 유형은 파일의 종류를 나타내는 코드로, 이메일을 받는 쪽에서 파일을 어떻게 처리해야 하는지 알려줍니다.
3. MIME 유형 예시
- 텍스트 파일 : text/plain
- HTML 파일 : text/html
- JPEG 이미지 : image/jpeg
- PNG 이미지 : image/png
- MP3 음악 파일 : audio/mpeg
- MP4 동영상 파일 : video/mp4
4. MIME 작동 방식
MIME은 파일을 Base64라는 방식으로 인코딩하여 이메일에 포함시킵니다. Base64는 바이너리 데이터를 텍스트로 변환하는 방식입니다. 이렇게 변환된 데이터는 이메일을 통해 전송되고, 받는 쪽에서 다시 디코딩하여 원래 파일을 복원합니다.
5. MIME의 장점
- 다양한 유형의 파일을 이메일로 보낼 수 있다.
- 파일 전송 과정이 간편하고 빠르다.
- 파일 손상 가능성이 낮다.
6. MIME의 활용
MIME은 이메일 첨부 파일 뿐만 아니라 웹에서도 다양하게 활용됩니다. 웹 브라우저는 다양한 MIME 유형의 파일을 인식하고 처리할 수 있습니다. 예를 들어, 웹 브라우저에서 이미지를 클릭하면 이미지 뷰어가 열리고, MP3 파일을 클릭하면 음악 플레이어가 실행됩니다.
7. MIME 요약
MIME은 인터넷에서 다양한 유형의 파일을 전송하는 데 필수적인 기술입니다. MIME은 파일마다 고유한 MIME 유형을 정의하고, Base64 인코딩 방식을 사용하여 파일을 이메일이나 웹에서 안전하게 전송할 수 있도록 합니다.
'Coding > 언더독 레볼루션 (UnderDog Revolution)' 카테고리의 다른 글
리액트 스터디 : JavaScript 응용 - 1 (Truthy & Falsy, 삼항 연산자, 단락회로 평가, 조건문 업그레이드, 비 구조화 할당, Spread 연산자) (0) | 2023.01.21 |
---|---|
리액트 스터디 : React.js 기초 (0) | 2023.01.20 |
리액트 스터디 : Node.js 기초 (0) | 2023.01.20 |
리액트 스터디 : JavaScript 기본 - 2 (변수, 상수, 자료형, 형 변환, 연산자, 조건문) (1) | 2023.01.15 |
리액트 스터디 : JavaScript 기본 - 1(변수, 상수, 자료형, 형 변환, 연산자, 조건문) (0) | 2023.01.15 |