
이순신은 일본군이 조선군을 가볍게 보고 있다는 점을 이용하여 그들을 유인하고자 했다. 음력 9월 7일, 조선 수군은 벽파진 근처에서 일본 수군의 소함대를 격파했다. 일본 수군은 조선 수군이 13척뿐임을 알고, 해상의 적 이순신과 조선 수군을 완전히 제거하기로 결심했다.
벽파진으로 우수영을 옮긴 이튿날인 음력 9월 16일 오전, 일본 수군 333여 척이 순조(順潮)를 타고 울돌목으로 접근했다. 일본 수군 지휘부는 대형 군선인 아타케부네가 협수로를 통과하기 어렵다고 보고 중형 군선인 관선(세키부네) 133척으로 진영을 짜고 협수로를 통과, 조선 수군을 향해 진격했다. 이때 해류는 동쪽에서 서쪽으로 흐르고 있었다. 즉, 일본수군의 진격 방향이 해류의 흐름과 일치하는 순방향이었다.
조선 수군 13척의 전선도 해협으로 들어서서 일본 수군을 맞이했다. 전투가 시작되자, 조선 수군 일부가 적의 기세에 밀려 겁을 먹고 뒤로 물러서기 시작했다. 그러나 이순신이 탑승한 기함은 계속 자리를 고수하며 부하들을 독려했고, 초요기를 올려 뒤로 물러나있던 중군장 첨사 김응함과 거제도 현령 안위를 진격해 오도록 한 뒤, 그들을 심하게 다그쳤다. 두 사람의 배가 적진으로 공격하기 시작하자 평산포 대장 정응두와 멀리 대략 1킬로미터 정도 물러나 있던 전라우수사 김억추도 돌격에 가세했다. 특히, 안위의 군선으로 일본 수군의 공격이 집중되었다. 격전의 와중에 대포와 화살에 맞아 일본군들 일부가 바다에 빠졌는데 이 광경을 보고있던 이순신 기함에 탑승하고 있던 항왜 준사(俊沙)가 "저기 그림무늬 붉은 비단 옷을 입은 자가 바로 적장 마다시(馬多時,구루시마)다"라고 알렸다.
이순신은 물긷는 병사 김돌손을 시켜 즉시 구루시마를 끌어올릴 것을 명했다. 갈고랑쇠에 낚여 배 위로 끌려 올라온 적장 구루시마 미치후사는 곧바로 토막내어졌으며, 조선 수군의 사기는 급격히 올라갔다. 반면에, 전투 중에 지휘관이 적군에 의해 참수되고 토막난 것을 본 일본 수군의 사기는 떨어졌다.
또 하나의 악재로, 오후가 되자 점차 해류의 방향이 바뀌기 시작하였다. 이번에는 해류의 방향이 조선 수군에는 순조(順潮)가 되고, 일본 수군에 역조(逆潮)가 되어, 일본 수군에게 대단히 불리한 상황이 조성되었다. 역류가 흐르는 상황에서 군선이 첨저선이었던 일본 수군은 배가 선회하려면 많은 공간이 필요했다. 그러나 좁은 해협에 많은 수의 전선을 끌고왔던 일본 수군에게 급한 역류가 흐르는 상황에서 배를 운신하며 전열을 정비한다는것은 매우 어려웠다.
이에 조선 수군은 포격전과 충파를 거듭했고, 일본 수군은 해류의 역조(逆潮)와 조선 수군의 포격과 충파로 인해 전혀 반격할 수 없었으며, 또한 군선이 많은 것이 오히려 독이 되어 군선끼리 서로 부딪히기 시작하였다. 이러한 혼란 속에서 군감 모리 다카마사는 바다에 빠졌다가 구조되었고, 이 전투의 총사령관 도도 다카토라가 부상을 당했다. 군감이 바다에 빠졌다가 구조되고, 총 사령관이 부상을 당한 것으로부터, 일본 본대도 큰 피해를 입었던 것으로 보인다. 결국 333척의 대함대를 13척으로 추격하는 형세가 되었고 일본 수군은 유시(酉時 오후5시~7시)무렵, 물살이 느려지고 바람이 일본 수군쪽으로 부는 것을 이용, 퇴각하였다.