Both are a form of test driven development, since you write the tests upfront. The main difference is that TDD tests are technical tests often [unit-tests][1] created during developing of a feature and are written just before you implement a part of the feature in the code-base. Where BDD tests are often written before the coding starts and are human readable and anyone should be able to understand what they test. BDD tests are used as [Specification by Example][2].

But its a bit more complex than that as BDD frameworks like [JBehave][3] can also be used to write unit-tests, but also for end-2-end integration tests. And nothing is really forcing you to make the tests readable by non developers.

There is also a third term [ATDD][4] (Acceptance test-driven development) which is how BDD was called before the BDD area. This makes the difference between the both a little bit more clear. 

Suggested reads are 

* [Online TDD chapters][5] of the Art of Agile
* The [specification by example][2] book
* The [Test Driven][6] book.

Personally I think we should find another name for TDD which makes it clear that its a cycle for writing unit-tests, because now its so broad that any tests defined before the coding could be called a form of TDD.

Hope I not confuse you more, but the main difference is technical tests testing the working of methods (TDD) vs human readable tests describing the behavior (BDD). 


  [1]: https://en.wikipedia.org/wiki/Unit_testing
  [2]: http://specificationbyexample.com/
  [3]: http://jbehave.org/
  [4]: https://en.wikipedia.org/wiki/Acceptance_test-driven_development
  [5]: http://www.jamesshore.com/Agile-Book/test_driven_development.html
  [6]: https://www.manning.com/books/test-driven