프로토콜: 컴퓨터로 이루어지는 데이터 교환 방식을 정한 규칙
프로토콜의 기본 요소
- 구문(SYNTAX): 전송하고자 하는 데이터의 형식, 부호화, 신호 레벨
- 의미(SEMANTICS): 효율적이고 정확한 정보 전송 및 오류 관리를 위한 제어 정보 규정
- 시간(TIMING): 통신 속도, 메세지의 순서 제어
프로토콜의 기능
- 단편화: 긴 데이터 블록 쪼개기
- 캡슐화: 프로토콜에 적합한 데이터 블록 제작을 위해 정보 추가
프로토콜 정리
1. TCP (Transmission Control Protocol)
client와 server 연결 상태에서 데이터 통신하는 프로토콜
| client | server |
|---|---|
| 1. server로 SYN | |
| 2. client로 SYN-ACK | |
| 3. server로 ACK |
Segment format
*segment: TCP 통신 단위

| Source port address (4 bits) | 데이터 보내는 호스트의 TCP 포트 |
|---|---|
| Destination port address (4 bits) | 데이터 받는 호스트의 TCP 포트 |
| Sequence Number (8 bits) | TCP 세그먼트에 있는 첫번째 바이트에 대한 순번 |
| Acknowledgement (16 bits) | receiver가 받기 원하는 number |
| HLEN (16 bits) | header 길이 저장 |
| Reserved (3 bits) | |
| Control field (13 bits) | 1bit씩 존재 flag처럼 사용, 패킷 받으면 제일 먼저 확인 ACK: 데이터 전달 받음 SYN: 연결 요청 FIN: 연결 종료 요청 |
| Windows size (8 bits) | TCP 세그먼트 보내는 호스트의 TCP 버퍼 크기 |
| TCP Checksum (8 bits) | TCP 데이터와 TCP 헤더의 error 유무 확인 |
| Option (16 bits) |
2. UDP (User Datagram Protocol)
일방적 데이터 전송하는 프로토콜
신뢰성이 떨어짐, 실시간 전송에 많이 쓰임
| sender | receiver |
|---|---|
| 1. sender로 request | |
| 2. receiver로 response |

| source port (16 bits) | 출발지 |
|---|---|
| destination port (16 bits) | 목적지 |
| length (16 bits) | 길이 |
| checksum (16 bits) | 오류 검사 |
3. IP (Internet Protocol)
다른 네트워크 간 데이터 전송을 위한 경로 제어 프로토콜
IP의 속성
- 비신뢰성: IP 데이터그램 dest로 전송
- 비접속성: 논리적 주소로만 패킷 전송
Datagram format
*IP의 통신단위는 Packet인데 format은 datagram이라 명칭한 거 같다.

| VER (4 bits) | ip버전을 기록, IPv4인지 IPv6인지 |
|---|---|
| HLEN (4 bits) | header의 길이 저장 기본 크기 20 bytes + option 때문에 플러스 알파 존재 전체길이/4의 몫 저장 |
| Service type (8 bits) | header+data datagram 전체 길이 바이트 단위 |
| Total length (16 bits) | 단편화에서 같은 datagram인지 확인하는 번호 |
| Identification (16 bits) | |
| Flags (3 bits) | 처음 1 bit는 항상 0 2 bit: IP 라우터에 의해 분열 여부, 분열 가능하면 0 3 bit: 원래 데이터에 단편화가 더 있는지, 마지막 조각이면 0 |
| Fragmentation offset (13 bits) | 단편화되기 전 datagram의 위치 |
| Time to live (8 bits) | 패킷 수명 1~255 사이 값 라우터들이 패킷 전달할 때마다 –1 |
| Protocol (8 bits) | 어떤 상위계층 프로토콜이 포함되었는지 표시 |
| Header Checksum (16 bits) | 헤더에 오류 check |
| Source IP Address | source 주소 |
| Destination IP Address | dest 주소 |
if 중간에 다른 라우터 존재, physical 주소 변경하여 목적지 도달
via 라우팅 알고리즘, 최적 경로 설정(라우팅 테이블)
4. HTTP (HyperText Transfer Protocol)
서버/클라이언트 간의 데이터 교환을 request/response로 정의한 프로토콜
TCP/IP 통신 위에서 사용됨
| client | server | |
|---|---|---|
| 1. server로 request | 이 사이에 proxy 존재 (ex. gateway, filtering..) |
|
| 2. client로 response |

request는 다음 세 가지
- request line : method, path, version이 있다.
- request headers
- request message body
response는 다음 세 가지
- status line: version과 상태 코드가 있다.
| status line | |
|---|---|
| 1xx | informational |
| 2xx | success |
| 3xx | redirection |
| 4xx | client error |
| 5xx | server error |
- response headers: user와 상호작용을 위한 데이터를 담는 부분
- response message body: server의 응답 부분
*HTTPS는 HTTP에 TLS 프로토콜 도입하여 메세지 암호화..
5. ICMP (Internet Control Message Protocol)
ping을 이용한 통신에 쓰이는 프로토콜
| sender | switch | router | receiver |
|---|---|---|---|
| 1. ping |
|||
| 2. <receiver의 IP주소가 본인 네트워크와 동일한지 파악 동일하다면, 해당 네트워크로 ICMP 패킷 전달 동일하지 않다면, 기본 게이트웨이로 패킷 전달 |
|||
| 3. ARP 패킷 생성, 경유 스위치로 전달 | |||
| 4. 전달 받은 ARP 패킷 learning -> table 갱신 -> flooding | |||
| 5. ARP 패킷 검증과 ARP 캐시 테이블 갱신 |
6. ARP (Address Resolution Protocol)
상대방의 IP 주소만 알고, MAC 주소를 모를 때 사용
| 같은 네트워크 | ||
| sender | switch | receiver |
| 1. broadcast로 같은 네트워크 전체 node에게 패킷 flooding | ||
| 2. 전달 받은 ARP 패킷 learning -> ARP table 갱신(MAC 주소 기록) -> request 답 없다면 다시 flooding | ||
| 3. ARP 패킷 받고 sender의 MAC 주소 기록-> ARP Reply 패킷 전송 | ||
| 2. 전달 받은 ARP Reply 패킷 learning -> ARP table 갱신(MAC 주소 기록) -> sender에게 전달 |

| Hardware type (6 bits) | hardware 주소 타입, 네트워크 유형 |
|---|---|
| Protocol type (2 bits) | 사용하는 프로토콜 type |
| Hardware length HLEN (1 bit) | |
| Protocol Length/Size (1 bit) | 망계층 주소 크기 |
| Operation Code (2 bits) | ARP 패킷 종류 표시 request - 1 reply - 2 rarp request - 3 rarp reply - 4 |
| Sender Hardware Address (6 bits) | |
| Sender Protocol Address (4 bits) | |
| Target Hardware Address (6 bits) | |
| Target Protocol Address (4 bits) |
7. FTP (File Transfer Protocol)
TCP/IP 프로토콜을 가지고 server/client 파일 전송 지원 프로토콜
| client | server |
|---|---|
| 1. 3-way handshaking 1회 진행 | |
| 2. request 입력해서 server로 보냄 FTP commands 사용 |
|
| 3. 숫자 코드로 response 숫자 코드: FTP server return codes |
8. FTPS (Trivial File Transfer Protocol)
FTP의 expand 버전.. TLS/SSL 암호화 프로토콜 지원
포트를 암호화하여 안전한 데이터 전송
9. TELNET (TELetype NETwork)
인터넷이나 로컬 영역 네트워크 연결에 사용
10. SSL/TLS
암호화 프로토콜
응용 계층과 TCP 계층 사이 보안 layer
| client | server |
|---|---|
| 1. 3-way handshaking 1회 진행 | |
| 2. SSL/TLS 작동 |
11. SSH
원격 시스템에서 명령을 실행하기 위해 다른 컴퓨터 로그인에 사용
TELNET에서 보안이 강화된 프로토콜