1. TCP(Transmission Control Protocol)
헤더 크기는 20 bytes이며 옵션이 있을 경우 더 크게(e.g., 24, 28 bytes) 나오는 경우도 있다. Layer 4 계층 프로토콜이며, 다른 시스템과 통신 수립 연결을 실시한 이후, 데이터 요청 및 응답을 실시하는 연결 지향성 특징을 갖고 있다.

▶ tcp header size
- 출발지 포트: 2 bytes
- 목적지 포트: 2 bytes
- SEQ Number: 4 bytes
- ACK Number: 4 bytes
1) '3-Way 핸드 쉐이킹' 동작 실시

▶ 클라이언트와 서버는 위과 같이 '3-Way 핸드 쉐이킹' 동작을 실시하여 TCP 연결을 성립하고 데이터 요청 및 응답을 실시
- 3-Way 핸드 쉐이킹: syn -> syn + ack -> ack
- client: 172.16.5.254:1980
- server: 114.111.46.227:80
※ 이때, 1980과 80은 port number이다.
목적지 포트 번호가 80번인 것을 통해 HTTP 요청인 것을 확인할 수 있고, 이때 TCP는 큰 데이터를 한 번에 보내지 않고 적당히 분할하여 보내기에, No. 98은 데이터 요청(HTTP GET), No. 101은 데이터 응답(HTTP/1.1 200 OK)이다.
2) TCP Control Flag (6 bit)

▶ TCP 플래그 상태에 따른 TCP 주요 동작
- urg (1.....): 긴급한 데이터 표기
- ack (.1....): 확인 응답/승인
- psh (..1...): 버퍼링 없이 바로 출력 (TCP는 받은 즉시 출력이 아니라 모아놓고 출력하는 버퍼링 기능 존재)
- rst (...1..): 강제 종료 (ack 받을 필요 X)
- syn (....1.): 통신 개시
- fin (.....1): 정상적인 종료
| URG | ACK | PSH | RST | SYN | FIN | 10진수 | 16진수 | tcp.flag |
| 2^5 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 | |||
| 32 | 16 | 8 | 4 | 2 | 1 | |||
| 0 | 0 | 0 | 0 | 1 | 0 | 2 | 0x02 | syn |
| 0 | 1 | 0 | 0 | 1 | 0 | 18 | 0x12 | syn+ack |
| 0 | 1 | 0 | 0 | 0 | 0 | 16 | 0x10 | ack |
※ TCP의 C는 Control을 의미하는데, 이때 6개의 flags가 control을 담당하기에 flags가 TCP에서 가장 중요하다고 할 수 있다.
RST (강제 종료) 사용 예시

80번 포트만 열린 웹서버는 22번 포트로 클라이언트가 syn을 보낸 것을 받아 연결할 수 없다.
이럴 때, rst을 보냄으로써 rst를 받은 클라이언트로 하여금, 웹서버의 22번 포트가 안 열림을 확인할 수 있다.
이렇게 rst은 연결 시작 단계에서도 사용되고, 오류 발생으로 인해 네트워크를 강제로 끊어야 할 때 사용된다.
3) Fin 플래그를 이용한 TCP 정상 종료

이때 클라이언트가 240초 대기하는 이유는 서버가 보낸 Fin에 대한 Ack가 손실될 경우 서버는 CLOSED되지 못하는데, 이 경우 서버는 Fin을 재전송한다. 이렇게 재전송될 수 있는 상황이 있기에 바로 종료하지 않고 클라이언트는 대기해야 한다.
이러한 이유로 대부분의 경우 클라이언트가 서버보다 늦게 종료된다.
※ netstat -n 명령어: network statistics는 네트워크 연결 상태, 포트 사용 현황 등 네트워크 관련 정보를 확인하는 명령어이고, 그중 -n 옵션은 IP, 포트 등을 숫자로만 표시하여 정확한 IP/포트 정보를 빠르게 확인시 유용하다. (e.g., 도메인 이름 -> IP 주소)
4) 데이터 스트림 서비스
데이터는 세그먼트 단위로 분할하여 전송 및 수신 처리
- sequence 번호와(순서) ack 번호(확인)를 이용한 'Stop & Wait', 'Sliding Window'라는 흐름 제어 기능 필요
- 현재 TCP에서는 'Sliding Window' 기법 사용
이때 ack 번호는 0번을 받으면 다음 번인 1번을 달라는 의미로 ack 1을 보내고, 2, 3, 4, 5를 받으면 ack 6을 보낸다.
※ ack number는 flag ack와 다른 것이니 혼돈하지 말아야 한다.
| Stop & Wait | 송신한 세그먼트에 대한 Ack를 수신해야지만, 그 다음 세그먼트를 전송한다. 때문에 다음 세그먼트 송신 처리에 대한 지연이 발생하고 수신하는 Ack 양이 많다는 단점이 있다. |
| Sliding Window | 송신측이 아닌, 수신측 윈도우 크기에 맞게 송신측에서 세그먼트 양을 조정하여 전송함으로써 세그먼트 송신 지연 발생과 Ack 양을 최소화한다. |
Sliding Window 부연 설명

※ window size는 고정이 아니라 가변적이기에 상황에 따라 증가되거나 감소된다.
5) 혼잡 제어 기능
혼잡 발생시 전송률을 최소화하여 혼잡을 줄이는 기능이다. 하지만 실제론 TCP에만 있는 기능이기 때문에 잘 사용하지 않으며, 라우터에서 QoS 정책을 별도로 구성하여 적용하고 있다. (TCP뿐만 아니라 UDP, IP 등 다양한 패킷들에 대해서도 적용 가능)
※ QoS: Quality of Service, 네트워크에서 트래픽 우선순위를 정해 지연, 손실 없이 안정적인 서비스를 보장하는 기술이다.
6) 오류 검사
수신한 세그먼트에 대한 손상 여부를 판단하여, 세그먼트를 드랍하는 기능이다.
7) 재전송 기능
송신한 세그먼트에 대한 Ack를 재전송 시간 초과 타이머(RTO, Retransmission Timeout) 안에 수신하지 못하면, 해당 세그먼트가 손상되었거나, 손실된 것으로 간주하여 세그먼트를 재전송한다. 이때, RTO 타이머는 통신 상황에 따라 가변적인 시간을 갖고 있다.
8) TCP를 사용하는 서비스
- HTTP(80), HTTPs/SSL(443), Telnet(23), SSH(22), FTP(21), FTP-Data(20), SMTP(25), POP3(110), Mysql(3306)
- Tomcat(8080, Java WAS), NFS(2049, 네트워크 파일 공유), RPC(111, 원격 함수 호출), SMB(139, 445, 파일/프린터 공유)
※wireshark 검색 방법 e.g., tcp / tcp.port == 23 / ip.addr == 172.16.5.254 && tcp / frame.number >= 2031
TCP SYN Flooding 공격

▶ 클라이언트가 SYN 패킷만 계속 보냄으로써, 서버가 세션을 계속 대기 상태로 유지하게 하여 리소스 소진시킴
결과적으로, 웹서버에 부하가 발생하여 정상적인 사용자가 연결 불가한 서비스 거부 (DoS) 상태가 된다.
이때, 이러한 Dos 공격을 여러 대의 시스템을 통해 distributed하게 하는 것을 DDos(디도스) 공격이라고 한다.
이러한 공격은 주로 악성코드 유포를 통해 이루어진다.
- e.g., 특정 날짜에 특정 목적지로 초당 TCP SYN 1만 개를 전송하는 쓰레드를 100개 생성하는 악성코드
2. UDP(User Datagram Protocol)
헤더 크기는 8bytes이다. Layer 4 계층 프로토콜이며 상대방과 연결 과정 없이 데이터 요청 및 응답을 바로 실시하는 비연결 지향성 특징을 갖고 있다.
1) 비연결 지향성 프로토콜
UDP는 연결성이 없기 때문에 데이터 요청 및 응답을 바로 실시한다.
UDP는 TCP에서 제공하는 다음과 같은 기능은 지원 X (단, 오류 검사 기능은 지원)
- 통신 연결
- 데이터 스트림 서비스
- 흐름 제어 기능
- 혼잡 제어 기능
- 재전송 기능
- Window Size
※ 위 기능들이 필요없을 때, TCP(신뢰성)가 아닌 UDP(신속성)를 사용하면 된다.
2) UDP를 사용하는 서비스
- DNS(53), TFTP(69), DHCP Server(67), DHCP Client(68), SNMP(161, 네트워크 장비 관), NTP(123), Syslog(514)
- NMB(137, 138, 같은 네트워크, 즉 LAN 안에서 브로드캐스트 방식으로 컴퓨터 이름을 IP 주소로 변환)
3. IP(Internet Protocol)
헤더 크기는 20 bytes이다. Layer 3 계층 프로토콜이며 비연결 지향성 특징(연결은 4계층이 담당하기 때문)을 갖고 있다. IP 프로토콜은 로컬 환경에서 리모트 환경으로 데이터 전송(내부 -> 외부 통신)을 하기 위해서 사용한다.
※ IP 헤더에선 IP Precedence 혹은 DSCP를 설정하는데, 이때 IP Precedence는 앞의 3비트, 즉 총 8개의 등급으로 우선순위를 나누고, DSCP는 이러한 우선순위를 앞의 6비트를 이용해 64개의 등급으로 더욱 세분화한 것이라고 볼 수 있다. (QoS 정책 구현)

▶ IP header - TTL (Time to Live)
TTL은 패킷이 네트워크상에 전송될 수 있는 시간을 나타낸다. (시간 단위: 라우터)

TTL을 이용하여 네트워크에서 발생하는 패킷 루프를 방지하고 ping 테스트를 통해서 출발지와 목적지 사이의 라우터 개수를 계산할 수 있다. 또한, 응답 패킷의 TTL 값을 확인하여 다른 시스템의 운영체제 유형을 짐작할 수 있다.
※ 운영체제 TTL 기본값 (TTL은 1 byte이기에 2^8 = 256, 즉 0~255 값만 가질 수 있음)
- Windows 128
- Linux 64
- Cisco 255
예시


▶ A -> 10.1.1.1(C)
- 128 -> 127 -> 126: 2 감소 (추측)
A PC와 10.1.1.1 사이에 라우터 2개가 존재하며 10.1.1.1의 운영체제는 Windows임을 추측할 수 있다.

▶ A -> 13.13.12.2(Router 2)
- 255 -> 254: 1 감소 (추측)
A PC와 13.13.12.2 사이에 라우터 1개가 존재하며 13.13.12.2의 운영체제는 Cisco임을 추측할 수 있다.

▶ A -> 192.168.1.254(Router 1)
- 255: 감소 X (추측)
A PC와 192.168.1.254 사이에 라우터가 존재하지 않는, 즉 두 장치는 같은 네트워크 상에 존재함을 추측할 수 있다.
※ 이때, 사이에 라우터가 아무리 많아도 최대 30대 정도이다.
IP Fragments
IP는 데이터를 MTU 크기에 맞게 분할하게 되는데, 이러한 기능을 IP fragments 기능이라고 한다.
- MTU: 네트워크 장치가 처리할 수 있는 최대 데이터 크기로, 파라미터 값이다. (기본값: 1500 bytes)

▶ IP header
- Id: 데이터의 고유 식별값으로, Id가 같으면 같은 데이터가 MTU를 초과하여 분할되었음을 알 수 있음
- More fragments: 분할된 데이터가 연속해서 더 있는지를 나타냄
- Fragment Offset: 앞에서 누적된 분할된 데이터의 크기
예시
데이터: 4000 bytes, MTU: 1500 bytes
| Id | More fragments | Fragment offset | |
| 1500 | 17 | 1 | 0 byte |
| 1500 | 17 | 1 | 1500 bytes |
| 1000 | 17 | 0 | 3000 bytes |
4. 네트워크 계층 모델
1) TCP/IP 5 Layer
| 계층 | 프로토콜 | 주소 유형 | |||
| 상위계층 (Application) |
http, https(ssl), telnet, ssh, ftp, ftp-data, smtp, pop3 | dns, tftp, snmp, ntp, dhcp server/client, syslog | - | ||
| Layer 4 (Transport) |
TCP (20 bytes) |
통신 연결 '3-Way 핸드 쉐이킹' 동작 데이터 스트림 서비스 혼잡 제어 기능 재전송 기능 Window Size 오류 검사 |
UDP (8 bytes) |
오류 검사 | 포트 번호 |
| Layer 3 (Internet) |
IP (20 bytes) |
로컬 환경에서 리모트 환경으로 데이터 전송 TTL을 이용하여 패킷 루프 방지 기능 및 거리 측정 |
IP 주소 | ||
| Layer 2 (Network Interface) |
Ethernet | Ethernet 내부 환경에서 데이터 전송 최종적으로 오류 검사 실시 |
MAC 주소 | ||
| Layer 1 (Physical) |
전기 신호 변환 및 입출력 | bit (0, 1) | |||
2) OSI 7 Layer
| Layer 7 애플리케이션 | 서비스가 구현되는 계층 |
| Layer 6 프레젠테이션 | 서비스를 어떤 방식으로 표현할 것인지를 결정 |
| Layer 5 세션 | OS/서비스 간에 논리적인 연결 |
| Layer 4 트랜스포트 | TCP, UDP |
| Layer 3 네트워크 | IP |
| Layer 2 데이터 링크 | Ethernet |
| Layer 1 물리 계층 | 전기 신호 변환, 입출력 |
▶ 7 Layers
- 상위 계층(5~7): 서비스 구현, OS/응용 프로그램 담당
- 하위 계층(1~4): 전송 담당, 네트워크 장비/전송 프로토콜 담당
5. ICMP(Internet Control Message Protocol)
ICMP는 실제 데이터 전송 시 사용하는 프로토콜이 아니라, IP를 도와주는 프로토콜로서, IP 프로토콜을 이용하여 데이터 전송이 가능한지 확인하기 위해서 메세지를 생성하여 요청 및 응답을 실시하는 프로토콜이다. (점검 시 사용하는 프로토콜)
- 명령어: ping, traceroute(Linux / Windows: tracert)
1) 기본적인 ICMP 메세지 유형
| 유형 | 타입 | 내용 |
| echo | 8 | ICMP 요청 메세지 |
| echo-reply | 0 | ICMP 응답 메세지 |
| Destination Unreachable | 3 | ICMP 목적지 도달 불가능 응답 메세지 |
| TTL Exceeded | 11 | TTL이 만료된 응답 메세지 |
※ TTL Exceeded는 패킷이 중간에서 너무 오래 도는 문제로, 목적지 도달 전의 문제이고, Destination Unreachable은 목적지까지 갔는데 뭐가 문제가 있는 것으로, 목적지 도달 후의 문제이다. (e.g., 포트 막혀 접근 불가)
2) 기본적인 'Destination Unreachable' 메세지 유형
| 유형 | 코드 | 내용 |
| Network Unreachable | 0 | 목적지에 대한 경로가 없는 경우 |
| Host Unreachable | 1 | 최종 목적지 호스트에 도달할 수 없는 경우 (e.g., 장비 꺼져 있음, LAN 케이블 빠져 있음) |
| Protocol Unreachable | 2 | 목적지에서 특정 프로토콜을 사용할 수 없는 경우 |
| Port Unreachable | 3 | 목적지 호스트에서 특정 포트가 닫혀 있는 경우 |
예시


▶ A -> 10.1.1.1(C)
- 라우터 2개 존재 확인 가능

▶ ping을 통해서 알아낸 route 개수 == tracert를 통해서 알아낸 route 개수
tracert는 TTL 값을 1부터 점점 늘려가며 route 경로를 추적한다.
※ 일반적으로 해외로 갈 때 응답 시간이 기존보다 늘어나고, 공격(응답 부하)을 막기 위해 ICMP를 방화벽으로 차단 사이트도 많다.
6. ARP(Address Resolution Protocol)
Ethernet을 도와주는 프로토콜로, 목적지 IP 주소에 대한 MAC 주소를 설정한다. 이때, ARP 브로드캐스트 요청 및 ARP 유니캐스트 응답을 통해 ARP 테이블이 만들어지기에, 최초의 연결시 무조건 실패할 수밖에 없다. (ARP 테이블에 존재면 ARP 요청 X)
- 브로드캐스트 DA: FFFF.FFFF.FFFF.FFFF
- ARP는 IP 포함하지 X
- 외부 네트워크로 ping을 보내면 ARP 테이블엔 gateway의 MAC 주소가 담김
※ 스위치는 브로드캐스트를 받으면 복제해서 다 뿌리지만, 라우터는 브로드캐스트를 받으면 아예 넘기지 않는다.
arp -d // arp 테이블 정보 삭제
arp -a // arp 테이블 확인
▶ ARP 테이블 관련 명령어
참고자료
http://www.ktword.co.kr/test/view/view.php?m_temp1=1889
TCP Header
TCP Header Transmission Control Protocol Header TCP 헤더(2023-04-30)초기 순서번호, ISN, Window Size , 윈도우 크기 , Windowsize, Acknowledgement Number, 확인응답 번호 1. TCP 세그먼트 내 헤더 구성 ※ [참고] TCP 헤더 크
www.ktword.co.kr
https://arsenic-dev.tistory.com/48
Computer Network Lecture.03 DLC
경희대학교 이성원 교수님의 컴퓨터 네트워크 수업을 기반으로 정리한 글입니다.ContentsDLC BasicSimple ProtocolStop-and-Wait ProtocolGo-Back-N ProtocolSelective Repeat ProtocolDLC Example - HDLCDLC Example - PPPDLC BasicData
arsenic-dev.tistory.com
'자격증 > CCNA' 카테고리의 다른 글
| [TCP/IP] - 6. IP 주소 특징 (6) | 2025.08.04 |
|---|---|
| [TCP/IP] - 5. 와이어샤크 필터 (3) | 2025.07.29 |
| [TCP/IP] - 3. TCP&UDP 서비스 (0) | 2025.07.16 |
| [TCP/IP] - 2. 네트워크 주소 체계 (0) | 2025.07.15 |
| [TCP/IP] - 1. 네트워크 구성 요소 (0) | 2025.07.02 |