OneDay Network
Wireshark 전송계층(Transport layer) 분석 본문
1.1 전송 계층(Transport layer) 정의
OSI 7 layer에서 4계층에 속하며, 프로토콜 내에서 송신자와 수신자를 연결하는 통신을 제공한다. 전송 계층(Transport layer)에서는 하위 계층인 네트워크 계층처럼 경로, 장비들과 상관없이 응용 프로세스 간 End - to - End 통신한다.
전송 계층에서 가장 핵심은 “프로세스 간의 통신”이라는 것이다.
대표적인 프로토콜로 TCP와 UDP가 존재한다.
1.2 전송 계층(Transport layer) 프로토콜 분석
가. TCP (Transmission Control Protocol)
TCP(Transmission Control Protocol)는 연결 지향 방식을 사용한다.
TCP Header는 UDP(User Datagram Protocol)의 Header에 비해 크기가 크다. 그 이유는 TCP는 신뢰성 있는 전송을 추구하기 때문에 헤더에 UDP보다 다양한 필드가 존재한다. TCP의 가장 큰 메커니즘에는 혼잡 제어(Congestion control)
과 흐름 제어(Flow control), 그리고 에러 제어(Error control)이 있다.
흐름 제어는 송신 측과 수신 측 사이의 패킷의 양과 속도를 TCP의 필드를 이용하여 조절하여 효율적으로 통신 할 수 있게 한다. 즉, 송신 측과 수신 측의 처리 속도와 버퍼 차이 때문에 발생하는 오버플로우(Overflow)를 방지한다.
에러 제어는 Go-back-N 방식을 이용하는데, 데이터를 수신 받지 못했다면 마지막에 수신 받은 데이터 이후 모든 데이터를 전송하는 기법이다.
여기서 지속적인 ACK번호가 돌아왔을 때, 전송 속도를 늦추는 것이 혼잡 제어라고 말할 수 있다.
[그림 1] TCP 3-way-handshake 과정
TCP(Transmission Control Protocol)는 [그림 1]과 같이 3-way-handshake 과정을 거치고 난 뒤 통신을 한다. 먼저 클라이언트는 SYN패킷을 보내 서버 와의 연결을 요청한다. SYN패킷을 받은 서버는 SYN/ACK패킷을 클라이언트 에게 보낸다. SYN/ACK패킷을 받은 클라이언트는 다시 서버로 ACK패킷을 통해 응답하여 클라이언트와 서버 간에 연결이 확립된다.
[그림 2] SYN 패킷
TCP 헤더에는 신뢰성 있는 통신과 다양한 TCP의 메커니즘을 추구하기 위해 다양한 필드들이 존재한다. Window size는 수신자의 윈도우 크기를 말한다. Window size를 통해 수신자의 메모리 버퍼를 고려하여 데이터를 전송한다.
쉽게 말하면, 수신자가 얼마만큼의 데이터를 한꺼번에 전송 받을 수 있는지를 나타내는 수치이다.
[그림 3] SYN Sequence Number 필드
TCP는 순서를 보장하기 위해 Sequence필드를 사용한다. 임의의 숫자를 선정하여 Sequence Number를 생성한다. 위 그림을 보면 2629552739으로 Sequence Number가 생성되었다.
[그림 4] SYN Flag 필드
TCP는 Flag라는 필드를 통해 상태를 나타낸다. 0이면 Not set이고 1이면 Set
이다. 지금은 SYN패킷이기 때문에 SYN부분에 Set이 된 것을 확인 할 수 있다.
[그림 5] SYN/ACK 패킷
[그림 6] SYN/ACK Sequence Number, Acknowledgment Number 필드
SYN패킷을 받은 서버는 다시 클라이언트에게 SYN/ACK를 보내게 된다. 여기서 SYN패킷의 Sequence Number가 2629552739였다. SYN/ACK패킷의 Acknowledgment Number가 SYN패킷의 Sequence Number+1인 2629552740으로 바뀐 것을 볼 수 있다. 또한, SYN/ACK 패킷에서 Sequence Number가 무작위 수로 생성 되어 다시 클라이언트 측으로 보내진다.
[그림 7] SYN/ACK Flag 필드
SYN/ACK 필드에서는 Flag가 SYN과 ACK가 Set 된 것을 볼 수 있다.
이러한 이유는 클라이언트의 요청에 응답과 동시에 요청하기 때문에 SYN Flag와 ACK Flag가 동시에 Set 되었다.
[그림 8] ACK 패킷
서버 측에서 SYN/ACK 패킷을 보내오면 마지막으로 클라이언트는 ACK
패킷을 보내 연결을 최종 확립한다.
[그림 9] ACK Sequence 필드
SYN/ACK패킷의 Acknowledgment Number가 ACK패킷의 Sequence Number 2629552740와 같은 것을 볼 수 있다. TCP에서 가장 중요하게 생각하는 매커니즘인 “신뢰성 있는 전송”을 보장하기 위해서는 Acknowledgment Number필드가 매우 중요하다. 그 이유는 TCP는 ACK가 수신되지 않으면 재전송을 실행하기 때문이다.
[그림 10] ACK Flag 필드
ACK 패킷의 Flag 필드를 보면 ACK가 Set되있는 것을 볼 수 있다. 이러한 과정을 거치고 난 뒤 서버에서 클라이언트 측으로 데이터를 전송한다.
나. UDP(User Datagram Protocol)
UDP는 TCP와 다르게 신뢰성 보장의 기능이 없기 때문에 헤더 필드 종류도 적기 때문에 헤더의 크기도 작다. 따라서, UDP의 장점은 데이터를 빠르게 전송 할 수 있는 것이다. 이러한 장점을 이용하여 영상, 스트리밍 등 빠른 전송이 필요한 경우 UDP가 사용된다.
'Network' 카테고리의 다른 글
DDOS 공격 (0) | 2019.03.12 |
---|---|
Wireshark 응용계층(Application layer) 분석 (0) | 2019.03.11 |
Wireshark 네트워크 계층(Network layer) 분석 (0) | 2019.03.07 |
Wireshark 데이터링크 계층(Data link layer) 분석 (1) | 2019.03.06 |
OSI 7 Layer란? (0) | 2019.03.06 |